Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

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

Discussion in 'Bài viết hướng dẫn JSE' started by bombon18, 13/9/12.

  1. bombon18

    bombon18 New Member

    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ẽ.


    [​IMG]

    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.

    [​IMG]

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

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    Ở 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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    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

    [​IMG]

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

    KiraArus Member

    nếu opaque của jpanel là true thì không thấy được background nhỉ.
     
  3. bombon18

    bombon18 New Member

    Bởi vì cái Panel nó đè lên Label :D nên phải tắt Opaque đi mới thấy ảnh nền được :P
     
  4. dt2it153

    dt2it153 Member

    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.
     
  5. burmy

    burmy Member

    hay wa' cảm ơn anh. E vừa test thử ok quá :) !!! Sao hay vậy mà ko ai like hết :( !!!!!!!!!!!!
     
  6. monkey.d.luffy

    monkey.d.luffy New Member

    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
     
  7. 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
     
  8. JackV

    JackV Administrator Staff Member

    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(0515Short.MAX_VALUE)
            );
            
    jPanel1Layout.setVerticalGroup(
                
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .
    addGap(0495Short.MAX_VALUE)
            );

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

            
    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(jLabel1gridBagConstraints);

            
    pack();
        }
     
  9. JackV

    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(), 030getWidth(), getHeight(), iiCDJV.getImageObserver());
     
  10. manhlh231

    manhlh231 Member

    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
     
  11. manhlh231

    manhlh231 Member

    sao của mình nó báo không tìm thấy " iiCDJV.getImageObserver" , đã import đầy đủ rồi
     
  12. ditmen2011

    ditmen2011 New Member

     

Chia sẻ trang này

Loading...