Quelle est la meilleure façon de mettre des espaces entre les objets? Un objet Swing JSeparator peut-il être un séparateur invisible?

j'essaie de mettre deux boutons à l'intérieur d'un panneau en utilisant des widgets Swing. À l'intérieur de l'EDI NetBeans, mon JSeparatorborder propriété est définie à (No border) dans le volet propriétés.

Néanmoins une ligne apparaît. Ce n'est pas ce que j'attend d'un séparateur d'objet. Suis-je en train de faire quelque chose de mal? Venant d'un fond dans Delphi, et C# WinForms, Je m'attends à trouver quelques bizarreries en Swing. Mais comment faire exactement un espace transparent d'une taille particulière, entre deux boutons dans un panneau? Dois-je jouer avec les mises en page et d'éviter l' JSeparator?

mise à Jour: il devrait être trivial de faire cela avec un layout et sans objet séparateur. Alors, comment voulez-vous faire? Je suis à la recherche dans le Customizer NetBeans layout et inspecteur des propriétés et de trouver aucun moyen de le faire. (Réponse: Layouts avec Insets, au lieu de séparateurs.)

10
demandé sur Warren P 2010-06-04 19:20:56

4 réponses

vous devriez jeter un oeil aux méthodes d'utilité statique sur le Box classe. Ils peuvent être utilisés pour fabriquer des entretoises fixes qui agissent comme des séparateurs invisibles; par exemple

JPanel pnl = new JPanel(new FlowLayout());
pnl.add(new JButton("Hello"));
pnl.add(Box.createHorizontalStrut(10)); // Fixed width invisible separator.
pnl.add(new JButton("Goodbye");

cela produit plus de code compact que la création / configuration d'un JPanel vous - même avec les dimensions minimales, maximales et préférées appropriées.

20
répondu Adamski 2010-06-04 15:32:19

JSeparator est conçu pour être un séparateur visible entre les composants.

javadoc pour JSeparator:

JSeparator fournit un composant à usage général pour la mise en œuvre des lignes de diviseur - le plus couramment utilisé comme diviseur entre les éléments de menu qui les divise en regroupements logiques.

si vous voulez mettre un component entre deux components qui sont invisibles il suffit d'utiliser un JPanel à la place. Définissez la taille de le panneau avec setPreferedSize() et setMin/MaxSize().

4
répondu jjnguy 2010-06-04 15:23:36

vous n'avez pas besoin de JSeparator. La plupart des layouts vous permettent de définir l'espace entre les composants. Et Box class peut être particulièrement utile.

2
répondu Anton 2010-06-04 15:28:04

utiliser addSeparator avec une valeur de 1 pour la hauteur le rend invisible pour moi, par exemple:

MyJToolBar.addSeparator(new Dimension(20, 1));
1
répondu SubJunk 2015-03-19 23:37:14