import java.awt.Color;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;public class TxzRun {
    
public static void main(String[] args) {

JFrame jframe = new JFrame("窗体");
jframe.setBounds(8, 8, 21 * 48, 14 * 48 + 33);
jframe.setVisible(true);

JPanel panel = new JPanel();
panel.setBackground(Color.red);//设置panel的背景色为红色
panel.setLayout(null);

jframe.setContentPane(panel);
System.out.println(panel.getHeight()+"  "+panel.getWidth());


}
}显示窗体的时候panel变成了红色,但打印的结果为什么是 0  0呢?  

解决方案 »

  1.   

    囧~~~原因是UI生成需要时间,没记错的话JAVA默认是用线程处理UI的,也就是说jframe.setContentPane(panel);这句只给线程安排了绘图任务,没执行完就直接进下句打印了,对象还没来得及更新的
      

  2.   


    有道理。
    那有没有什么方法能获取到呢??  我写了个方法,方法的参数是JPanel类型,方法体里需要得到panel的大小,每次传参的时候,获取的大小都是0。。
      

  3.   


    import java.awt.Color;import javax.swing.JFrame;
    import javax.swing.JPanel;public class TxzRun { public static void main(String[] args) {
    JPanel panel = new JPanel();
    panel.setBackground(Color.red);// 设置panel的背景色为红色
    panel.setLayout(null);
    JFrame jframe = new JFrame("窗体");
    jframe.setBounds(8, 8, 21 * 48, 14 * 48 + 33);
    jframe.setContentPane(panel);
    jframe.setVisible(true);
    System.out.println(panel.getHeight() + " " + panel.getWidth());
    }
    }改成这样应该可以
    setVisible(true);
    的时候会把界面上所有的当前已知的需要显示的控件初始化完成
    只要是在
    setVisible(true); 之前
    加到界面上的控件的大小应该都可以正确获得
      

  4.   

    恩  这样可以。 Thank you.