2016-03-02 80 views
1

林新在的Java Swing,並希望使我的佈局,但不能做到這一點的Java JPanel的佈局

看現在:

http://i.stack.imgur.com/raLS6.png

看我想:

http://i.stack.imgur.com/ikGgx.png

現在代碼:

JPanel MainPanel = new JPanel(new GridBagLayout()); 

    JLabel MoneyLabel = new JLabel(MoneyIcon);  
    MoneyLabel.setHorizontalTextPosition(JLabel.CENTER); 
    MoneyLabel.setVerticalTextPosition(JLabel.BOTTOM); 
    MoneyLabel.setText("Money:" + CarMain.Money); 

    JLabel MoneyClicksLabel = new JLabel(); 
    MoneyClicksLabel.setHorizontalTextPosition(JLabel.CENTER); 
    MoneyClicksLabel.setVerticalTextPosition(JLabel.BOTTOM); 
    MoneyClicksLabel.setText("Money Clicks: " + CarMain.MoneyClicks); 

    JLabel BoxesLabel = new JLabel(BoxLv9_10Icon);  
    BoxesLabel.setHorizontalTextPosition(JLabel.CENTER); 
    BoxesLabel.setVerticalTextPosition(JLabel.BOTTOM); 
    BoxesLabel.setText("Boxes: " + CarMain.Boxes); 

    JLabel BoxesClicksLabel = new JLabel(); 
    BoxesClicksLabel.setHorizontalTextPosition(JLabel.CENTER); 
    BoxesClicksLabel.setVerticalTextPosition(JLabel.BOTTOM); 
    BoxesClicksLabel.setText("Boxes Clicks: " + CarMain.BoxesClicks); 

    MainPanel.add(MoneyLabel); 
    MainPanel.add(MoneyClicksLabel); 
    MainPanel.add(jbtnMoney); 
    MainPanel.add(BoxesLabel); 
    MainPanel.add(BoxesClicksLabel); 
    MainPanel.add(jbtnBoxes); 

這就是我想要的簡單示例,因爲我在每個tabbedpane窗口中構建了13個標籤,這些標籤都是店內店鋪。我如何讓它看起來像第二張照片一樣,我想要什麼?

+0

請看下面我的解決方案。 – user3437460

+0

變量名稱不應以大寫字符開頭。瞭解[Java Conventions](https://en.wikipedia.org/wiki/Naming_convention_(編程)#Java),並在論壇中發佈代碼時遵循它們。否則,論壇語法突出顯示不能正常工作。 – camickr

回答

3

林新在的Java Swing,並希望使我的佈局,但不能做到這一點

恐怕沒有單一的佈局可以適應大家的需求。但是結合幾種佈局通常可以處理大多數場景。

從您在問題中顯示的圖像中。沒有必要編寫自己的佈局。您始終可以使用子面板來放置組件,併爲每個子面板設置特定的佈局以處理您在這些單獨區域所需的內容。

  • 原因在你的第一個附加的圖像對準是因爲:

的JPanel使用的FlowLayout作爲其默認佈局。因此,所有添加的組件都將以線性方式出現,並儘可能多地填充該面板的寬度。一旦超過面板的寬度,組件將被推到下一行。


  • 如果要實現第二附加圖像中的對齊方式:

您可以創建一個主面板包含幾個子板(見下圖)。 紅色框是您的主面板,您可以繼續使用默認的FlowLayout。

然後將您的組件添加到子面板(橙色框),然後將其添加到主。然後,您可以使用BoxLayout的的FlowLayout甚至的GridBagLayout爲子板(橙色框)。

enter image description here