2010-04-19 4 views
8

Ich versuche, ein GUI-Fenster in meiner Anwendung zu erstellen. Was ich versuche, ist ein Fenster mit ein paar Tasten oben und einem großen Textbereich. Etwas wie folgt aus:Gemischte Ausrichtung mit Java Swing GroupLayout

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

Ich bin fast da, mit 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) 
); 

Das Problem ist, dass diese mit button3 landet nach links ausgerichtet sind, mit den beiden anderen. Ich kann nicht herausfinden, wie ich die Ausrichtung nur auf diese eine Schaltfläche festlegen kann. Ich kann GroupLayout.Alignment.TRAILING über die gesamte Buttonleiste machen, aber das trifft alle 3 Buttons, was auch nicht ganz stimmt.

Also, was ist der richtige Ansatz? Da die Ausrichtung nur für parallele Gruppen gilt, glaube ich nicht, dass es hilfreich ist, eine horizontale Gruppe mit zwei sequenziellen Gruppen zu haben.

Was fehlt mir?

Antwort

11

Fügen Sie eine Lücke in Ihrer sequenziellen Gruppe hinzu. Verlassen Sie Ihre horizontale Gruppe wie folgt:

Die Lücke mit diesen Parametern fungiert als eine "Feder", die den gesamten verfügbaren Platz einnimmt.

+0

sollte "LayoutStyle.ComponentPlacement.RELATED", aber anders als das, funktioniert super, danke :) – zigdon

+0

Whoops, du hast Recht - ich Versionen gemischt. Fest. – Etaoin

+0

Hallo, sollten Sie diese Zeile nur der vertikalen Gruppe oder auch der horizontalen Gruppe hinzufügen? – Timmos

3

Versuche Zugabe:

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

nach der zweiten Taste. Der MAX_VALUE bewirkt, dass sich die Lücke so weit wie nötig ausdehnt.

1

Sie möchten addPreferredGap() verwenden, das nur für sequenzielle Gruppen verfügbar ist. Der folgende Code gibt Ihnen das gewünschte Layout.

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