[Hướng dẫn] Hiển thị ảnh nền trong jFrame Form

bombon18

New Member
8/9/12
9
5
3
30
Mình thấy có rất nhiều bài viết về chèn ảnh làm ảnh nền trên jFrame nhưng việc chèn ảnh trong jFrame Form thì không có ai bàn đến >:D<. Mình vừa tìm thấy một cách chèn ảnh trong jFrame Form rất hiệu quả, đó là sử dụng jLabel :P.
Việc tạo Project và jFrame Form thì mình không nói nữa vì nó cơ bản quá rồi. Ở đây mình tạo ra 1 Project có tên TutorialBackground như hình vẽ.




Right Click vào package Tutorial, chọn New> Java package... để tạo ra một thư mục new package chứa hình ảnh.



Trong cửa sổ Design, Right Click tại jFrame chọn setLayout > Gid Bag Layout



Trong cửa sổ Palette, chọn jPanel rồi kéo thả vào jFrame. Nhớ bỏ chọn thuộc tính Opaque của jPanel trong cửa sổ Properties.
Tiếp theo, chọn jLabel rồi kéo thả vào jFrame. Nhớ rằng jLabel không nằm trong jPanel.
Chọn jLabel. Trong cửa sổ Properties, chọn thuộc tính icon. Click vào nút ... để hiện ra cửa sổ icon.



Trong cửa sổ icon, nhấn chọn nút Import to project dể chọn một hình ảnh bất kỳ làm ảnh nền. Ở đây mình chọn file ảnh gemini.jpg. Sau đó nhấn Next.



Ở bước đây ta chọn thư mục để chứa hình ảnh vừa chọn. Chúng ta sẽ chọn thư mục new package (chính là cái new package ta tạo lúc đầu) trong project để chứa ảnh. Sau đó nhấn Finish.



Trong cửa sổ icon, nhấn OK để đóng cửa sổ lại. Lúc này, hình ảnh sẽ được hiển thị trên jLabel1.
Click chọn jLabel1. Trong cửa sổ Properties, ta xóa bỏ dòng "jLabel1" của thuộc tính Text, tức là không hiển thị chữ "jLabel1" trên jLabel nữa.



Trong cửa sổ Navigator (phía dưới bên trái màn hình), Right Click vào jPanel1 và chọn Properties.
Trong cửa sổ Properties, ta chọn như hình vẽ dưới.



Nhấn Close để thoát ra ngoài.
Vẫn trong cửa sổ Navigator, ta Right Click vào jLabel1 và chọn Properties. Chọn tương tự như trên.



Nhấn Close.
Như vậy, hình ảnh đã bao phủ toàn bộ jFrame như 1 ảnh nền :D
Lúc này, ta có thể đặt bất kỳ Components nào lên trên hình vẽ. Ví dụ mình sẽ kéo thả jTextField jButton vào jFrame. Nhấn shift+F6 thử xem :D



Vậy là xong. Chúc các bạn thành công. :-bd
 

KiraArus

Member
28/9/11
145
23
18
HCM
nếu opaque của jpanel là true thì không thấy được background nhỉ.
 

dt2it153

Member
14/7/11
92
2
8
nhà tui ^^
bạn bombon18 cho mình hỏi, set những thuộc tính đó có nghĩa là gì? Sao phải set các properties của jPanel giống jLabel? Thanks.
 

burmy

Member
6/8/12
139
4
18
29
hay wa' cảm ơn anh. E vừa test thử ok quá :) !!! Sao hay vậy mà ko ai like hết :( !!!!!!!!!!!!
 

monkey.d.luffy

New Member
4/3/13
1
0
1
26
bạn ơi không có code tay à.kéo thả thui à.mình thử code tay ko ko đc.có code tay cho mình xin với
 
29/5/15
1
0
1
25
Dak Lak
Cho mình hỏi nếu muốn thêm ảnh chỉ sử dụng code không kéo thả đó bạn! do mình sử dụng eclipse nên chỉ muốn biết code
 

JackV

Administrator
Staff member
Cho mình hỏi nếu muốn thêm ảnh chỉ sử dụng code không kéo thả đó bạn! do mình sử dụng eclipse nên chỉ muốn biết code
Kéo thả chỉ là hỗ trợ thôi mà, code nó sinh ra đây
PHP:
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.GridBagLayout());

        jPanel1.setOpaque(false);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 515, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 495, Short.MAX_VALUE)
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        getContentPane().add(jPanel1, gridBagConstraints);

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/newpackage/ban do.jpg"))); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        getContentPane().add(jLabel1, gridBagConstraints);

        pack();
    }
 

JackV

Administrator
Staff member
Mới làm thử, nhược điểm của cách này là hình nền không co giãn theo khung được.
Cách làm khác linh động hơn là bạn code hình nền thành thuộc tính của jpanel

PHP:
public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(new ImageIcon("congdongjava.com.png").getImage(), 0, 30, getWidth(), getHeight(), iiCDJV.getImageObserver());
 

manhlh231

Member
16/4/15
45
1
8
23
hỏi ngu tí, JPanel nó nằm ở đâu vậy ? trong tab swing Containers mình tìm không thấy :3:-O
 

manhlh231

Member
16/4/15
45
1
8
23
sao của mình nó báo không tìm thấy " iiCDJV.getImageObserver" , đã import đầy đủ rồi
 

ditmen2011

New Member
18/9/19
1
0
1
20
Mình thấy có rất nhiều bài viết về chèn ảnh làm ảnh nền trên jFrame nhưng việc chèn ảnh trong jFrame Form thì không có ai bàn đến >:D<. Mình vừa tìm thấy một cách chèn ảnh trong jFrame Form rất hiệu quả, đó là sử dụng jLabel :P.
Việc tạo Project và jFrame Form thì mình không nói nữa vì nó cơ bản quá rồi. Ở đây mình tạo ra 1 Project có tên TutorialBackground như hình vẽ.




Right Click vào package Tutorial, chọn New> Java package... để tạo ra một thư mục new package chứa hình ảnh.



Trong cửa sổ Design, Right Click tại jFrame chọn setLayout > Gid Bag Layout



Trong cửa sổ Palette, chọn jPanel rồi kéo thả vào jFrame. Nhớ bỏ chọn thuộc tính Opaque của jPanel trong cửa sổ Properties.
Tiếp theo, chọn jLabel rồi kéo thả vào jFrame. Nhớ rằng jLabel không nằm trong jPanel.
Chọn jLabel. Trong cửa sổ Properties, chọn thuộc tính icon. Click vào nút ... để hiện ra cửa sổ icon.



Trong cửa sổ icon, nhấn chọn nút Import to project dể chọn một hình ảnh bất kỳ làm ảnh nền. Ở đây mình chọn file ảnh gemini.jpg. Sau đó nhấn Next.



Ở bước đây ta chọn thư mục để chứa hình ảnh vừa chọn. Chúng ta sẽ chọn thư mục new package (chính là cái new package ta tạo lúc đầu) trong project để chứa ảnh. Sau đó nhấn Finish.



Trong cửa sổ icon, nhấn OK để đóng cửa sổ lại. Lúc này, hình ảnh sẽ được hiển thị trên jLabel1.
Click chọn jLabel1. Trong cửa sổ Properties, ta xóa bỏ dòng "jLabel1" của thuộc tính Text, tức là không hiển thị chữ "jLabel1" trên jLabel nữa.



Trong cửa sổ Navigator (phía dưới bên trái màn hình), Right Click vào jPanel1 và chọn Properties.
Trong cửa sổ Properties, ta chọn như hình vẽ dưới.



Nhấn Close để thoát ra ngoài.
Vẫn trong cửa sổ Navigator, ta Right Click vào jLabel1 và chọn Properties. Chọn tương tự như trên.



Nhấn Close.
Như vậy, hình ảnh đã bao phủ toàn bộ jFrame như 1 ảnh nền :D
Lúc này, ta có thể đặt bất kỳ Components nào lên trên hình vẽ. Ví dụ mình sẽ kéo thả jTextField jButton vào jFrame. Nhấn shift+F6 thử xem :D



Vậy là xong. Chúc các bạn thành công. :-bd