package test;
import java.awt.*;
import javax.swing.*;
public class TestLayoutNull extends JFrame{
JPanel jPanel1=new JPanel();
JPanel jPanel2=new JPanel();
Container contentPane=this.getContentPane();
public TestLayoutNull()throws Exception{
contentPane.add(jPanel1);
contentPane.add(jPanel2);
contentPane.setLayout(null);
jPanel1.setBackground(Color.RED);//红色的面板 
jPanel2.setBackground(Color.GREEN);//绿色的面板
Rectangle r1=new Rectangle(0,0,400,50);
Rectangle r2=new Rectangle(0,50,400,390);
jPanel1.setBounds(r1);
jPanel2.setBounds(r2);
this.setVisible(true);
        this.setSize(400,400);
}
public static void main(String[] args){
try{
new TestLayoutNull();
}
catch(Exception e){
e.printStackTrace();
}
}以上程序是在eclipse中运行的吗?

解决方案 »

  1.   

    把setSize和setVisible交换一下位置
      

  2.   

    果然可以了。请问大侠这是为什么呢?setSize与setVisible的顺序问什么会影响显示结果啊?
      

  3.   

    setVisible或调整组件大小会触发一个AWT事件,导致画面的更新
    setVisible之后的操作也只有等到下一次画面更新的时候才能够体现出来。
    也可以使用
    setVisible(true);
    setSize(400, 400);
    this.validate();
    这种方式来手动将组件的变更反映到画面上。