2011-01-20 32 views
8

Tôi gặp vấn đề với JPanel bên trong một số khác. Tôi không biết tại sao, nhưng kết quả là một hình vuông đơn giản, nhưng kích thước không chính xác. Tại sao vậy?JPanel bên trong một số khác

import java.awt.Color; 
import java.awt.Container; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class jj extends JFrame { 

    private JPanel painel3; 
    private JPanel painel5; 
    private Container container; 

    public jj() { 

     container = getContentPane(); 
     container.setLayout(null); 

     painel5 = new JPanel(); 
     painel5.setBackground(Color.red); 
     painel5.setBounds(120, 110, 100, 120); 
     painel3 = new JPanel(); 
     painel3.setBackground(Color.white); 
     painel3.add(painel5); 
     painel3.setBounds(50, 50, 290, 220); 

     container.add(painel3); 

     // frame 
     setSize(1000, 900); 
     setLocation(200, 50); 
     setResizable(false); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

    public static void main(String[] args) { 
     new jj(); 
    } 
} 

Trả lời

5

Bạn cần phải đặt bố trí cho panel3 cũng thành vô giá trị nếu không thì mặc định FlowLayout được sử dụng:

panel3.setLayout(null);

+1

Thêm 'painel3.setlayout (null);' hoạt động khi tôi kiểm tra mã của anh ấy. – Puddingfox

2

Thậm chí tốt hơn mặc dù là để tránh sử dụng bố trí vô setBounds/setSize mà cho phép các trình quản lý bố cục giúp bạn trong việc cài đặt GUI của bạn. Bạn có thể đọc lên chúng tại đây: Laying out components in a container

3

Một vài đề xuất bổ sung. Tìm hiểu cách sử dụng LayoutManagers. Họ có thể có một đường cong học tập nhỏ nhưng nó chắc chắn sẽ đáng giá. Hướng dẫn hay: http://download.oracle.com/javase/tutorial/uiswing/layout/using.html

Cũng theo Tiêu chuẩn Java, tên lớp phải bắt đầu bằng chữ hoa. Làm như vậy sẽ giúp người khác đọc mã của bạn tốt hơn.

+1

+1 Sử dụng LayoutManagers là một khuyến nghị tốt. – Jonas

+0

tôi đã thay đổi bố cục của mình thành gridlayout – anvd

+0

@Fel tuyệt vời – jzd

0

Đặt bố cục của painel3 thành null trước khi thêm bảng điều khiển painel5.

painel3.setLayout (null); painel3.add (painel5);

Tôi khuyên bạn nên sử dụng LayoutManagers.

Các vấn đề liên quan