it-swarm.com.de

Gibt es in Java Swing ein "Group Box" -Äquivalent?

Versuch, eine GUI-Anwendung in Java/Swing zu erstellen. Ich bin es gewohnt, GUIs auf der Windows-Seite mit Werkzeugen wie VB zu "malen" (oder genauer gesagt, Gupta SQLWindows ... frage mich, wie viele Leute wissen, was das ist ;-)). 

Ich kann kein gleichwertiges Gruppenfeld in Swing finden ... 

Mit einem Gruppenfeld haben Sie ein rechteckiges Feld (normalerweise mit einem Titel) um ein paar verwandte Widgets. Ein Beispiel ist ein Gruppenfeld um einige Optionsfelder (wobei der Titel erklärt, worum es sich bei den Optionsfeldern handelt, z. B. Gruppenfeld mit dem Titel "Sex" mit den Optionsfeldern "Male" und "Female").

Ich habe ein bisschen herumgesucht ... Die einzige Möglichkeit, die ich gefunden habe, bestand darin, einen Unterbereich hinzuzufügen, den Rahmen im Unterbereich festzulegen und dann alle Widgets in der "Gruppe" zum Unterbereich hinzuzufügen. Gibt es einen eleganteren Weg, dies zu tun?

57
Thorsten

Erstellen Sie ein JPanel und fügen Sie Ihre Radiobuttons hinzu. Vergessen Sie nicht, das Layout der JPanel entsprechend anzupassen.

Dann rufen Sie panel.setBorder(BorderFactory.createTitledBorder(name)); auf.

112
David Koelle

Andere haben sich bereits mit JPanel befasst und einen TitledBorder verwendet, das ist in Ordnung.

Beim Spielen mit Swing LayoutManagers kann es jedoch als störend empfunden werden, dass Komponenten in verschiedenen JPanels nicht korrekt ausgerichtet werden können (jedes Bedienfeld verfügt über einen eigenen LayoutManager).

Aus diesem Grund ist es eine gute Praxis (überprüfen Sie "JGoodies" im Web für weitere Details) in Swing-GUIs, um KEINE TitledBorders zu verwenden, sondern separate Gruppen von Komponenten in einem JPanel durch ein JLabel gefolgt von einem horizontalen JSeparator.

Ref. " Erste Hilfe für Swing "

7
jfpoilpret

Ein Group-Feld ist nur ein Satz von 'logisch gruppierten Widgets' .. _. Dies ist in der Swing-Welt eine JPanel.

Fügen Sie Ihre Widgets einer JPanel hinzu.

Setzen Sie den Rahmentyp auf "Titelrahmen" und geben Sie den Titel ein, der dem Namen des VB6-Rahmens entspricht.

Voila. Sie haben Ihre Gruppenbox.

3
Nivas

Hier ist ein Zitat aus den JRadioButton-Javadocs, seit Sie die Optionsfelder aufgerufen haben. 

Eine Implementierung eines Optionsfelds - ein Element, das ausgewählt oder deaktiviert werden kann und dessen Status dem Benutzer angezeigt wird. Wird mit einem ButtonGroup-Objekt zum Erstellen einer Gruppe von Schaltflächen verwendet, in der jeweils nur eine Schaltfläche ausgewählt werden kann. (Erstellen Sie ein ButtonGroup-Objekt, und verwenden Sie die add-Methode, um die JRadioButton-Objekte in die Gruppe aufzunehmen.)

Hinweis: Das ButtonGroup-Objekt ist eine logische Gruppierung - keine physische Gruppierung. Um ein Schaltflächenfeld zu erstellen, sollten Sie dennoch ein JPanel oder ein ähnliches Containerobjekt erstellen und ihm einen Rahmen hinzufügen, um es von den umgebenden Komponenten abzuheben. 

2
Bill

Nicht AFAIK, zumindest nicht bei Standard-Swing-Widgets. 

In VB haben Sie ein Gruppen-Widget, das im Wesentlichen ein Panel + Rahmen ist.

In Swing haben Sie ein JPanel, das Container-Widget, und Sie erstellen und setzen ein Rahmenobjekt nur dann, wenn Sie eines benötigen. Man kann argumentieren, dass dies eleganter ist, da Sie nicht für etwas bezahlen, das Sie nicht verwenden (z. B. Grenze).

1
Uri

Wie David Koelle über das Einrichten von border durch Java-Code erwähnt hat, können Sie auch im Designer-Modus ein ähnliches Ergebnis erzielen.

 enter image description here

0
Gaurang