2012-05-25 71 views
0

我已經添加了一些組件到JPanel,它被設置爲網格佈局,我將它添加到設置爲邊框佈局的JFrame。但我想修復面板的大小。當我的窗口最大化時,所有組件的大小都在增加。我想要在窗口的中心的面板,與固定大小即使窗口最大化。框架中面板的固定大小

+0

*「請幫助我一些編碼」*請幫助自己解決問題和任何努力的跡象。 SO不是代碼生成機器。順便說一句 - 不要使用代碼格式的文本,並檢查預期的後期格式。投票結束。 –

+0

如果你提供了一些代碼,它會更好。例如,我會查看你的代碼,看看你是否在哪裏調用'setPreferredSize'。 –

+0

如果面板包含人類可讀的文本,請不要這樣做!字體指標因平臺而異。 – trashgod

回答

3

GridLayout作爲單個組件放置到GridBagLayout而沒有限制 - 它將居中。將帶有GBL的面板添加到BorderLayoutCENTER

參見this example用於上述圖像。


Nested Layout Example還使用GBL在右側渦旋窗格的下部居中圖像。

+0

對於漂亮的圖片和簡短的解決方案+1。 – brimborium

0
JFrame frame = new JFrame(); 
    frame.setSize(500, 500); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(new BorderLayout()); 

    JPanel rootPanel = new JPanel(); 
    frame.getContentPane().add(rootPanel, BorderLayout.CENTER); 
    rootPanel.setLayout(new GridBagLayout()); 

    JPanel contentPanel = new JPanel(); 

    Dimension dimension = new Dimension(300, 300); 
    contentPanel.setMaximumSize(dimension); 
    contentPanel.setMinimumSize(dimension); 
    contentPanel.setPreferredSize(dimension); 
    contentPanel.setBackground(Color.YELLOW); 

    GridBagConstraints g = new GridBagConstraints(); 
    g.gridx = 0; 
    g.gridy = 0; 
    g.anchor = GridBagConstraints.CENTER; 
    rootPanel.add(contentPanel, g); 

    frame.setVisible(true); 
+0

1)使用代碼格式2)這是很少,如果有的話,答案。 -1 –

+0

至少在這種情況下不會起作用。 – brimborium

1

那麼,你不應該使用BorderLayout的,因爲這正好適合其子組件。如果你仍然想,因爲你需要一些側面板或類似的東西使用BoderLayout上的JFrame( ),你可以將你的JPanel(使用GridLayout)封裝到另一個帶有GridBagLayout或BoxLayout或類似東西的JPanel中,然後將其他JPanel放入JFrame中。

JPanel innerPanel = new JPanel(); 
innerPanel.setLayout(new GridLayout()); 
// fill and set your innerPanel 

JPanel middlePanel = new JPanel(); 
middlePanel.setLayout(new GridBagLayout()); 
middlePanel.add(innerPanel, constraintsThatPlaceItWhereYouWantIt); 

JFrame yourFrame = new JFrame(); 
yourFrame.setLayout(new BorderLayout()); 
yourFrame.add(middlePanel, BorderLayout.CENTER); 
+0

'middlePanel.add(innerPanel,constraintsThatPlaceItWhereYouWantIt);'查看我的答案,爲什麼'constraintsThatPlaceItWhereYouWantIt'對於將組件集中到GBL中是多餘的。它鏈接到示例代碼。 –

+0

你是對的,但由於可讀性的原因,我在添加時仍然總是給出約束。他可能會在安置方面做更多更先進的工作。 – brimborium

+0

'middlePanel.add(innerPanel/*放在中間* /);';) –