web-dev-qa-db-fra.com

Existe-t-il un équivalent de "Group Box" dans Java Swing?

Essayer de construire une application graphique en Java/Swing. Je suis principalement habitué à "peindre" les interfaces graphiques du côté Windows avec des outils tels que VB (ou plus précisément, Gupta SQLWindows ... je me demande combien de personnes savent ce que c'est ;-)). 

Je ne trouve pas l'équivalent d'une boîte de groupe dans Swing ... 

Avec une zone de groupe, vous avez une zone carrée (généralement avec un titre) autour de deux widgets associés. Un exemple est une boîte de groupe autour de quelques boutons radio (avec un titre expliquant le rôle des boutons radio, par exemple la boîte de groupe intitulée "Sexe" avec les boutons radio "Homme" et "Femme").

J'ai un peu cherché… la seule solution que j'ai trouvée consiste à ajouter un sous-volet, à définir la bordure du sous-volet, puis à ajouter tous les widgets du "groupe" au sous-volet. Y a-t-il une manière plus élégante de faire cela?

57
Thorsten

Créez un JPanel et ajoutez-y vos radiobuttons. N'oubliez pas de configurer le JPanel de manière appropriée.

Ensuite, appelez panel.setBorder(BorderFactory.createTitledBorder(name));

112
David Koelle

D'autres ont déjà parlé de JPanel et de l'utilisation d'un TitledBorder, c'est bien.

Cependant, lorsque vous jouez avec Swing LayoutManagers, il peut être gênant que des composants de différents JPanels ne puissent pas s'aligner correctement (chaque panneau possède son propre LayoutManager).

Pour cette raison, c'est une bonne pratique (consultez "JGoodies" sur le Web pour plus de détails) dans les interfaces graphiques Swing de ne PAS utiliser TitledBorders mais plutôt des groupes de composants distincts dans un JPanel par un JLabel suivi d'un JSeparator horizontal.

Réf. " Premiers soins pour balançoire "

7
jfpoilpret

Une zone de groupe est simplement un ensemble de "widgets logiquement groupés" . Dans le monde du swing, il s'agit d'une JPanel.

Ajoutez vos widgets à une JPanel.

Définissez son type de bordure sur 'Titled Border' et donnez le titre, identique au nom du 'frame' VB6.

Voila. Vous avez votre boîte de groupe.

3
Nivas

Voici une citation des javadocs JRadioButton depuis que vous avez évoqué les boutons radio. 

Une implémentation d'un bouton radio - un élément qui peut être sélectionné ou désélectionné et qui affiche son état à l'utilisateur. Utilisé avec un objet ButtonGroup pour créer un groupe de boutons dans lequel un seul bouton à la fois peut être sélectionné. (Créez un objet ButtonGroup et utilisez sa méthode add pour inclure les objets JRadioButton dans le groupe.)

Remarque: l'objet ButtonGroup est un groupe logique, et non un groupe physique. Pour créer un panneau de boutons, vous devez toujours créer un JPanel ou un objet conteneur similaire et lui ajouter une bordure pour le différencier des composants environnants. 

2
Bill

Pas AFAIK, du moins pas avec les widgets Swing standard. 

Dans VB, vous avez un widget de groupe, qui est essentiellement un panneau + une bordure.

Dans Swing, vous avez un JPanel, qui est le widget conteneur, et vous créez et définissez un objet frontière uniquement si vous en avez besoin. On peut argumenter que d'une manière plus élégante puisque vous ne payez pas pour quelque chose que vous n'utilisez pas (par exemple, une bordure)

1
Uri

Comme David Koelle l'a mentionné à propos de la configuration de la frontière via le code Java, vous pouvez également obtenir un résultat similaire en mode concepteur.

 enter image description here

0
Gaurang