2011-08-09 76 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