2011-05-06 73 views
18

我有一個只包含一個JPanel的JFrame。 我曾嘗試設置面板的大小和包裝框架,但沒有任何效果。Java Swing設置「實際」框架大小(內部)

如果我設置了JFrame的大小,它將更改大小,使其包含標題欄和邊框。 如何設置「實際尺寸」,使其不包含標題欄和邊框?

例子:

Example

在此先感謝,傢伙

回答

19

您可以設置的contentPane的首選大小,並調用包在JFrame的,但一般它通常最好是讓組件的大小本身基於他們的首選尺寸由他們的佈局管理者決定。

+0

是的,這工作。謝謝。 – CookieMonster 2011-05-06 19:44:10

+0

是的,但這是一個應用程序,只有一個面板將繪製圖形,所以尺寸必須非常準確。 – CookieMonster 2011-05-06 19:47:18

10

如果您設置了JPanel的首選大小,那麼JFrame的pack()方法將會遵守它。

+0

是的,因爲我認爲它被添加到contentPane的BorderLayout.CENTER位置 - 但是如果其他事情被添加到另一個BorderLayout位置,它會搞砸了。 – 2011-05-06 19:45:59

+0

@Andrew,對不起,我做了很多假設,但假設OP想要設置除邊界,菜單等之外的gui大小,如果只設置了BorderLayout.CENTER組件的大小並將其他組件添加到其他BorderLayout位置,那麼最終的GUI大小可能是錯誤的。但是我的假設是不正確的,因爲OP主要關心的是保存圖像的組件的大小。所以文森特的確是對的,我會盡快刪除我的第一條評論(對你的評論)。 – 2011-05-06 20:30:38

4

使用上JFrame.getInsets方法,讓你周圍的非客戶區大小的尺寸。

然後加起來就到你想要的大小,並使用setSize設置大小。

9

這是設置JPanel的大小和包裝框架的例子:

JFrame frame = new JFrame(); 
JPanel panel = new JPanel(); 
panel.setPreferredSize(new Dimension(200, 200)); 
frame.add(panel); 
frame.pack(); 
frame.setVisible(true); 

您是否嘗試過這樣的事情?

+0

是的,那是什麼氣墊船,全鰻魚說,確實工作得很好。 – CookieMonster 2011-05-06 19:51:52

+0

我只有看到他發佈後,我已經發送了我的:) – Tulio 2011-05-06 19:56:19

+1

沒問題的隊友,我upvoted你的以及:)即使我已經想通了這一次,有時我真的不能沒有一個例子:) – CookieMonster 2011-05-06 19:58:25

2

如果你想獲得框架的邊框,然後先用相框中,並且獲得幀後插圖就像這個代碼波紋管:

frame.pack(); 
Insets insets = frame.getInsets(); 
int frameLeftBorder = insets.left; 
int frameRightBorder = insets.right; 
int frameTopBorder = insets.top; 
int frameBottomBorder = insets.bottom; 

是更好地使用方法之後您的setResizable(布爾)方法,因爲可調整大小某種原因改變了你的框線,但是如果你不使用大小調整方法,然後使用方法正確的框架構造的開始。

+0

哇在短時間內downvotes,看起來它甚至不值得幫助人們。 – 2015-09-01 16:49:07

0

在JFrame中設置可用空間的實際大小可以通過在 createComponents(Container container)方法中設置容器的首選大小來完成。以這種方式完成,您可以通過setPreferredSize(new Dimension (width, length)中的run()方法來跳過整個JFrame的大小 。所以,代碼將如下所示:

@Override 
public void run() { 
    JFrame frame = new JFrame(); 
    // other code ... 
    this.createCompoents(frame.getContentPane()); 
} 

private void createCompoents(Container container) { 
    // other code ... 
    container.setPreferredSize(new Dimension(width, length)); 
}