2010-04-19 10 views
8

Próbuję utworzyć okno GUI w mojej aplikacji. Co próbuję zrobić, to mieć okno z kilkoma przyciskami na górze i dużym polem tekstowym. Coś takiego:Mieszane wyrównanie z Java Swing's GroupLayout

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

jestem prawie tam, korzystając 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) 
); 

Problemem jest to, że kończy się z przycisku Button3 wyrównany do lewej, z dwóch pozostałych. Nie mogę się domyślić, w jaki sposób mogę określić wyrównanie tylko na jednym przycisku. Mogę wykonać GroupLayout.Alignment.TRAILING na całym pasku przycisków, ale to trafi do wszystkich 3 przycisków, co również nie jest poprawne.

Jakie jest właściwe podejście? Ponieważ wyrównanie ma zastosowanie tylko w grupach równoległych, nie sądzę, że pomoc w postaci grupy poziomej z dwiema grupami sekwencyjnymi może pomóc?

Czego mi brakuje?

Odpowiedz

11

Dodaj przerwę w swojej grupie sekwencyjnej. Pozostawiając grupę poziomą w następujący sposób:

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

Luka z tymi parametrami działa jak "wiosna", zajmując całą dostępną przestrzeń.

+0

powinno być „LayoutStyle.ComponentPlacement.RELATED”, ale poza tym, działa świetnie, dzięki :) – zigdon

+0

Ups, masz rację - ja mieszane wersje. Naprawiony. – Etaoin

+0

Witam, czy należy dodać tę linię tylko do grupy pionowej, czy też do grupy poziomej? – Timmos

3

spróbuj dodać:

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

po drugim przyciskiem. Wartość MAX_VALUE spowoduje rozszerzenie luki o tyle, o ile będzie to konieczne.

1

Chcesz użyć metody addPreferredGap(), która jest dostępna tylko w grupach sekwencyjnych. Poniższy kod podaje pożądany układ.

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