注意看他的输出结果
显示大小为
150 150
160 160
而我不要setResizable(false)后,
输出为
150 150
150 150
谁解释一下为什么设置了Resizable()后增加了10个像素
更奇怪的是我在学校做的时候却只增加2个像素
public class Testing extends JPanel
{
 public Testing()
 {
  this.setPreferredSize(new Dimension(150,150));
 }
 
 public static void main(String[] args)
 {
  JFrame f = new JFrame();
  Container cp = f.getContentPane();
  
  Testing t = new Testing();
  cp.add(t,BorderLayout.CENTER);
  
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  f.pack();
  
  System.out.println(t.getSize());
  
  f.setResizable(false);
  f.setVisible(true);
  
  System.out.println(t.getSize());
 }
 
 public void paint(Graphics g)
 {
  super.paint(g);
  g.fillRect(0, 0, 150, 150);
 }
}

解决方案 »

  1.   

    仔细对照一下分别设置成true和false的边框,你会发现有点不同的。至于一个相差10,另一个相差2,这或许是操作系统、JDK版本、以及界面外观设置等都有影响的而你设置的是this.setPreferredSize(new Dimension(150,150));这是首选大小
    若是setSize()的话就一致了
      

  2.   

    可是setSize布局管理器不响应这个请求的
      

  3.   

    这才知道你那个Testing继承的是JPanel,我还以为是JFrame呢我没办法让它们相等起来,没辙了~~~
      

  4.   

    setPreferredSize()方法 是设置组件首选大小
    而setSize()方法才是设置组件的实际大小。
    而且首选大小和机器的分辨率有一定的关系!