2011-02-23 67 views
23

在Java中,是否可以獲得JFrame的寬度和高度而不使用標題和其他邊框?JFrame:獲取大小無邊界?

frame.getWidth()和frame.getHeight()1似乎返回包含邊框的寬度。

謝謝。

回答

32
 

frame.getContentPane().getSize(); 
 
+3

謝謝! frame.pack();應該在此命令之前存在。否則,它將返回(0; 0)。 – rzaaeeff 2016-02-21 15:13:04

8
frame.pack(); 
System.out.println("frame width : "+getWidth()); 
System.out.println("frame height: "+getHeight()); 
System.out.println("content pane width : "+getContentPane().getWidth()); 
System.out.println("content pane height: "+getContentPane().getHeight()); 
System.out.println("width of left + right borders: "+(getWidth()-getContentPane().getWidth())); 
System.out.println("height of top + bottom borders: "+(getHeight()-getContentPane().getHeight())); 
2

這工作得很好

frame.getContentPane().getSize(); 

但如果你還沒有添加的內容呢。就我而言,我想在添加內容之前計算JFrame的內部維度,以便相應地分割內容。這是我想出來的。

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 

pack(); // Need this, otherwise insets() show as 0. 
int scrW = (int)screenSize.getWidth(); 
int scrH = (int)screenSize.getHeight(); 
    int innerW = scrW - getInsets().left - getInsets().right; 
    int innerH = scrH - getInsets().top - getInsets().bottom; 

    // Need to setSize(), otherwise pack() will collapse the empty JFrame 
    setSize(scrW, scrH);