2011-08-09 41 views
11
setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH); 
setResizable(false); 
setUndecorated(true); 
System.out.println("--------> "+getContentPane().getWidth()); //----> 0 why is this happening? 

我试图确定一个JFrame的大小。我搜索谷歌和检查的文件,我仍然不知道为什么它不会工作 它工作正常,在其他任何控制我试试Java,JFrame:getWidth()返回0

编辑: frame.getWidth()的作品时,所谓的外部类(扩展JFrame的) 的是,如果我更换

System.out.println("--------> "+getContentPane().getWidth()); 

System.out.println("--------> "+this.getWidth()); 

的getWidth仍然会返回0

编辑2: 我需要帧的大小,然后设置它可见和东西。我需要添加其他控件到框架,它们的坐标和大小取决于框架的大小。

+2

框架是否可见? – lhballoti

+0

一切都取决于你如何放置容器,如果有'setSize()'或'setBounds()'的定义,那么任何reall'Dimension'只返回可见的'Container',否则如果'JComponents'返回其'PreferedSize' '容器',那么你可以在任何你想要的地方得到这个'Dimension' – mKorbel

+0

@ madflame991,对于你的第二次编辑,这是不可能的,也没有意义。 – mre

回答

10

你得到0的原因是你没有调用pack(),setSize(int,int)或setSize(Dimension)中的任何一个。这只有在调用其中一种方法时才会计算出您的框架布局。

JFrame frame = new JFrame("My Frame"); 
frame.setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH); 
frame.setResizable(false); 
frame.setUndecorated(true); 
frame.pack(); // Important line!!! 
frame.setVisible(true); 
System.out.println("--------> "+getContentPane().getWidth()); 
+0

我需要在完成添加控件之前的宽度 – adrianton3

+1

我运行测试,似乎你无法获得帧宽度,它是不可见的,但我意识到,如果你的帧总是JFrame.MAXIMIZED_BOTH,那么帧宽度等于屏幕宽度,你可以通过'Toolkit tk = Toolkit.getDefaultToolkit()获得屏幕宽度; int screenWidth = tk.getScreenSize()。width;' – aymeric

+0

谢谢! getScreenSize不是我所期待的,但它几乎解决了我的问题 – adrianton3

10

您还没有实现(即setVisible(true)JFrame呢。因此,它没有布置其组件,因此没有大小。

+2

1+。 'pack()'也会渲染JFrame(我相信)。 –

+0

我试图调用它后,它仍然返回0 – adrianton3

+0

@ madflame991,这可能是一个愚蠢的问题,但你有没有添加任何组件到'JFrame'之前,使其可见?正如@Hovercraft提到的,也许调用'pack()'是更好的选择,因为这将迫使容器布局它的组件,然后使其自己可见。 – mre