2010-04-19 51 views
8

我試圖在我的應用程序中構建一個GUI窗口。我想要做的是有一個窗口,頂部有幾個按鈕,還有一個大文本區域。事情是這樣的:與Java Swing的GroupLayout混合對齊

+--------------------------------------------------+ 
| [button1] [button2]     [button3] | 
| +----------------------------------------------+ | 
| | text area         | | 
| |            | | 
| |            | | 
| |            | | 
| +----------------------------------------------+ | 
+--------------------------------------------------+ 

我幾乎沒有,使用的GroupLayout:

layout.setHorizontalGroup(
    layout.createParallelGroup() 
     .addGroup(layout.createSequentialGroup() 
     .addComponent(button1) 
     .addComponent(button2)) 
     .addComponent(closeWindow)) 
     .addComponent(textarea1) 
); 

    layout.setVerticalGroup(
    layout.createSequentialGroup() 
     .addGroup(layout.createParallelGroup() 
     .addComponent(button1) 
     .addComponent(button2) 
     .addComponent(button3)) 
     .addComponent(textarea) 
); 

的問題是,這結束了BUTTON3左對齊,與其他兩個。我似乎無法弄清楚如何才能在一個按鈕上指定對齊方式。我可以在整個按鈕欄上做GroupLayout.Alignment.TRAILING,但是它會觸及所有3個按鈕,這也不太正確。

那麼正確的方法是什麼?由於對齊只適用於並行組,我不認爲有一個Horizo​​ntalGroup有兩個順序組會有幫助嗎?

我錯過了什麼?

回答

11

在您的順序組中添加空隙。離開你的水平組爲:

layout.setVerticalGroup(
    layout.createSequentialGroup() 
     .addGroup(layout.createParallelGroup() 
     .addComponent(button1) 
     .addComponent(button2) 
     .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     .addComponent(button3)) 
     .addComponent(textarea) 
); 

與這些參數的差距充當「彈簧」,佔用所有可用空間。

+0

應該是「LayoutStyle.ComponentPlacement.RELATED」,但除此之外,偉大工程,感謝:) – zigdon 2010-04-19 20:42:47

+0

哎呦,你是對的 - 我是混合版本。固定。 – Etaoin 2010-04-19 21:19:21

+0

嗨,你應該只將該行添加到垂直組還是添加到水平組? – Timmos 2013-03-01 11:03:20

3

嘗試增加:

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE) 

第二按鈕之後。 MAX_VALUE將導致差距儘可能擴大。

1

您想要使用addPreferredGap(),它只在順序組上可用。下面的代碼爲您提供了所需的佈局。

layout.setHorizontalGroup(
      layout.createParallelGroup() 
        .addGroup(layout.createSequentialGroup() 
          .addComponent(button1) 
          .addComponent(button2) 
          .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) 
          .addComponent(button3)) 
        .addComponent(textArea) 
    ); 
    layout.setVerticalGroup(
      layout.createSequentialGroup() 
        .addGroup(layout.createParallelGroup() 
          .addComponent(button1) 
          .addComponent(button2) 
          .addComponent(button3)) 
        .addComponent(textArea) 
    );