2010-04-19 15 views
8

Uygulamamda bir GUI penceresi oluşturmaya çalışıyorum. Yapmaya çalıştığım şey, üstte birkaç düğme ve geniş bir metin alanı bulunan bir pencereye sahip. Böyle bir şey:Java Swing'in GroupLayout'u ile karışık hizalama

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

neredeyse bitiriyorum, GroupLayout kullanarak:

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) 
); 

sorun bu diğer ikisiyle sola hizalanmış Button3 ile biter olmasıdır. Sadece bir düğme üzerindeki hizalamayı nasıl belirleyebileceğimi anlayamıyorum. Tüm düğme çubuğuna GroupLayout.Alignment.TRAILING yapabilirim, ancak bu da 3 düğmenin hepsine çarpar, ki bu da tam olarak doğru değil.

Doğru yaklaşım nedir? Hizalama sadece Paralel Gruplar için geçerli olduğundan, yardımcı olacak iki Sıralı Gruplu bir HorizontalGroup'un olacağını düşünmüyorum?

Neyi eksik? ekleyerek

cevap

11

Sıralı grubunuza bir boşluk ekleyin. Yatay grubu bırakmak olduğu gibi: O paramters ile

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) 
); 

boşluk mevcut tüm yer kaplıyor, bir "yay" gibi davranır.

+0

"LayoutStyle.ComponentPlacement.RELATED" olabilir, ama bunun dışında, – zigdon

+0

Whoops :) sayesinde inşaat büyük olursa, haklısın - Ben versiyonlarını karışık. Sabit. – Etaoin

+0

Merhaba, bu satırı yalnızca dikey gruba mı yoksa yatay gruba mı eklemelisiniz? – Timmos

3

Dene: İkinci düğmesinden sonraki

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

. MAX_VALUE, boşluğun gerektiği kadar genişlemesine neden olur.

1

Sadece sıralı gruplarda kullanılabilen addPreferredGap() öğesini kullanmak istersiniz. Aşağıdaki kod, istediğiniz düzeni verir.

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) 
    );