2016-03-05 42 views
2

我是java新手。 我只是學習JPanel和JFrame。 我得到從Java軟件解決方案本說明:JFrame的pack()方法不起作用(java,ubuntu)

「的幀的包的方法將其適當地基於 其大小內容-在這種情況下,幀的尺寸,以適應其包含的面板的尺寸 「。

,所以我寫了這個代碼:

public static void main (String [] args){ 
    JFrame frame = new JFrame("test"); 
    JPanel panel = new JPanel(); 
    JLabel label1= new JLabel(""); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    //frame.setSize(1000, 500); 
    frame.getContentPane().add(panel); 
    Color darkBlue = new Color(8,40,94); 
    panel.setSize(1000, 500); 
    panel.setBackground(darkBlue); 
} 

,但它的結果是一個非常微小的窗口,我應該用鼠標最大化看到的內容 但是當我設置幀大小每一件事工作的偉大! 和我使用Ubuntu。 那麼這個問題的原因是什麼?

+1

你打包時它是空的。在所有其他的東西之後調用'pack()'。你也可能需要在面板上使用'setPreferredSize'而不是'setSize'來使'pack()'工作。 – khelwood

回答

5

從代碼的順序:

JFrame frame = new JFrame("test"); 
JPanel panel = new JPanel(); 
JLabel label1= new JLabel(""); 
frame.setVisible(true); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.pack(); 

你沒有你pack()之前添加任何東西到框架中。 pack()表示根據要添加的組件確定其大小。

由於您沒有添加任何組件,因此它在pack()之前就會收到一個內部沒有任何內容的小窗口(直到您調整窗口大小)。

當框架被調整大小時,paintManager將被查詢繪製contentPane,因此如果你在pack()之前添加,不僅框架會很好地爲你調整大小,其中的組件也將被繪製。


要查看組件的JFrame中:

public static void main (String [] args){ 
    JFrame frame = new JFrame("test"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel panel = new JPanel(); 
    JLabel label1= new JLabel(""); 
    panel.add(label1); //Add label to panel 
    frame.add(panel);  //Add panel (with label) to frame 
    frame.pack();   //Let the frame adjust its size based on the added components 
    frame.setVisible(true); 
} 
+0

tnx爲您的偉大答案,所以我們應該一個接一個地排列容器吧? –

+0

@AliZeynali是的,訂單確實很重要,但最終還是取決於你想要做什麼。另一件事是,你可能會考慮有一個定製的JPanel,所以你不必在'main()'方法中編寫所有代碼。 – user3437460

-1

在jframe.setVisible()方法之前調用jframe.pack()!

公共靜態無效的主要(字串[] args){

JFrame frame = new JFrame("test"); 
JPanel panel = new JPanel(); 
JLabel label1= new JLabel(""); 
panel.setSize(1000, 500);  
frame.getContentPane().add(panel); 
Color darkBlue = new Color(8,40,94); 
panel.setBackground(darkBlue); 
frame.pack() ; 
frame.setVisible(true); } 

您還需要檢查JFrame的默認佈局,這是流佈局!

+1

'JFrame'的默認佈局不是'FlowLayout' .... – user3437460

3
public static void main (String [] args){ 
    JFrame frame = new JFrame("test"); 
    JPanel panel = new JPanel(); 
    JLabel label1= new JLabel(""); 
    Color darkBlue = new Color(8,40,94); 
    panel.setPreferredSize(new Dimension(1000, 500)); 
    panel.setBackground(darkBlue); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //frame.setSize(1000, 500);    
    frame.getContentPane().add(panel);  
    frame.pack(); 
    frame.setVisible(true); 
} 

您應該使用包()設置大小後。 此外,panel.setPreferredSize()比setSize()更適合你:)