Frage

Ich habe eine ziemlich große Form mit vielen Kontrollen zu bauen. Die Bedienelemente sind in Grund Kontrollen / Einstellungen und erweitert Kontrollen / Einstellungen unterteilt. Der Benutzer kann entscheiden, ob er nur der Grund oder sowohl grundlegende als auch erweiterte Kontrollen, um zu sehen.

Ich habe alle erweiterten Kontrollen auf ihre eigenen JPanel fallen gelassen, so dass ich leicht zwischen den beiden Ansichten von Ein- oder Ausblenden dieses Panel umschalten kann.

Zur Zeit bin ich mit Grouplayout und was passiert, ist, dass die Kontrollen auf verschiedenen Panels nicht ausgerichtet sind:

Label aaa:     Text field
Label a:       Text field
Label aaaaaa:  Text field
----------------------------
Label b:    Text field
Label bbb:  Text field
Label bb:   Text field

Unfortunatly fand ich nun Weise die Layouts der beiden Platten zu „synchronisieren“ (außer AbsoluteLayout und festen Steuerkoordinaten)

  • Gibt es eine Möglichkeit, dies zu achive?
  • Ist mein ganzes Design fehlerhaft?

EDIT:. Wenn es möglich ist, würde Ich mag den Grouplayout-Manager halten

War es hilfreich?

Lösung

Soweit ich weiß, kann kein Swing-Layoutmanager (von JRE oder Open Source) mehrere Platten erstrecken.

Zur Zeit arbeite ich an einem solchen Feature für meine DesignGridLayout Projekt, aber es ist nicht etwas, leicht zu Arbeitsgeräte (habe vor ca. 2 Wochen begann ich, und ich sehe immer noch nicht genau, ob und wann ich interessant, etwas zu bekommen, aber ich habe immer noch große Hoffnungen für ihn ;-))

Eine Option wäre überprüfen könnten alle Komponenten auf die gleiche Panel hinzuzufügen (mit nur einem Grouplayout dann) und verstecken / zeigen ihnen, basierend auf Benutzer-Auswahl. Hoffentlich wird die Größe Grouplayout an die Situation anpassen (nach Pack () aufrufen).

Wenn Grouplayout gut verhält, dann wäre es nur eine Frage sein Rudel () aufgerufen wird jedes Mal, nachdem Benutzer ändert seine Auswahl zum Anzeigen / erweiterten Felder ausblenden.

sonst würden Sie manuell die Größe Ihrer Platte einstellen müssen, um jedes Mal, wenn der Benutzer seine Auswahl ändert.

Andere Tipps

Die wahrscheinlich einfachste (gut) Weg, es zu tun ist, um alle Komponenten zum Hauptfeld hinzuzufügen. Stellen Sie die Subpanels auf nicht-opak, und fügen Sie das auch auf das Hauptfeld. Das Hauptfenster die Bedürfnisse Zeichnung optimiert ausgeschaltet werden.

Eine andere Technik ist es, eine Spacer-Komponente hinzuzufügen. Mit der Bodenplatte eine Komponente in der gleichen Spalte wie die Etiketten hinzuzufügen, die dynamisch die Breitenkomponente ihrer verschiedenen Größe Methoden aus den oberen Etikett erfolgt. Machen Sie dasselbe in umgekehrter Richtung an der oberen Platte.

Ich glaube, es gibt keinen Weg, um es mit dem Standard-Layout-Manager zu tun. Sie werden wahrscheinlich Ihre eigenen Layout-Manager haben zu schreiben, aber es sollte nicht allzu schwer sein, wenn Sie eine Unterklasse Grouplayout.

Sie könnten Gridlayout verwenden, anstatt die Ihnen Grouplayout gleichmäßigen Abstand zwischen den Spalten geben

Wenn Sie wollen, dass sie in getrennten Platten mit separaten Layouts halten:

Iterate alle Etiketten auf, die Sie hinzufügen möchten, und die maximale bevorzugte Breite jeder finden. Iterate ein zweites Mal, und stellen Sie die bevorzugte Größe auf, dass jedes bevorzugte Höhe des Labels, aber die maximale Breite.

Dies ist die Erklärung von th Grid . Dadurch wird jede Komponente auf die Größe eingestellt, erwarten Sie es. Mit der Griddata-Objekt können Sie festlegen, wie die Komponenten orderten sind.

Beispiele


(Quelle: sun.com )

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top