JTree avec des cases à cocher
J'ai besoin d'ajouter des cases à cocher pour un JTree. Une coutume TreeCellRenderer/TreeCellEditor semble être la bonne approche. Jusqu'à présent j'ai utilisé le CheckBoxNodeRenderer approche dans cette page web. Cela fonctionne bien, sauf pour deux choses:
- il reste de l'espace au-dessus de + en dessous de la case; j'aimerais garder le même régulièrement JTree.
- J'aimerais distinguer entre en cliquant sur la case elle-même (qui doit tenter de basculer cocher la case et en cliquant sur le texte associé à la case à cocher (ce qui devrait permettre un écouteur d'événement à interpréter cela comme le fait de cliquer sur le nœud de l'arborescence et de prendre des mesures appropriées)
est-il un moyen de faire ces choses? J'ai regardé autour de JTrees avec des cases à cocher, ne peut pas trouver beaucoup. JIDE semble bon, mais j'ai besoin d'utiliser gratuitement le logiciel open-source (GPL n'est pas ok, LGPL est ok) dans ce cas. (ou de créer mon propre case de l'arbre)
OriginalL'auteur Jason S | 2009-08-03
Vous devez vous connecter pour publier un commentaire.
Comme pour le #2, vous pourriez faire un panneau d'être l'éditeur/moteur de rendu, et ajouter une étiquette avec le case - l'étiquette serait le texte, et la case à cocher n'aurait pas le texte ajouté.
Juste être conscient que si vous il suffit de copier le DefaultTreeCellRenderer code et remplacer l'extension de JLabel avec un Composite, vous aurez également à supprimer beaucoup de la "remplacé par" performance des méthodes ou vous aurez un vide JTree.
OriginalL'auteur aperkins
Je sais que cette question a déjà répondu, mais je veux juste éclaircir quelques points:
1) JIDE Commune de Couche est une double licence (GPL avec classpath exception et gratuit licence commerciale). Cela signifie que vous pouvez utiliser de la Commune de la Couche de Projet sans une licence. Veuillez consulter le lien suivant pour confirmer: http://www.jidesoft.com/products/oss.htm. La Commune de Couche comprend une mise en œuvre d'un tel menu JTree (com.jidesoft.swing.CheckBoxTree).
2) Il y a un blog daté de 2005 par le Maître lui-même, Santhosh Kumar, où il explique comment mettre en place un JTree avec des cases à cocher avec les exigences que vous avez mentionné: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes. Il vaut la peine de le lire, à mon avis.
JIDE Commune de Couche brokes tous vos collor régime parce qu'il installe sa propre INTERFACE utilisateur, n'ai pas trouver comment le résoudre, si quelqu'un sait comment s'il vous plaît de les partager.
OriginalL'auteur metator
par @aperkins suggestion c'est ce que j'ai fait dans le TableCellRenderer, il semble bien fonctionner:
Les clés pour se débarrasser des indésirables de l'espace dans les marges semble être (a) appel JCheckBox.setMargin() afin de réduire la case à cocher de la marge, et (b) à l'aide d'un BorderLayout pour un Composite.
OriginalL'auteur Jason S
J'ai publié un autonome Swing Case De L'Arbre projet, disponible à partir de Maven Central comme
org.scijava:swing-checkbox-tree
.Le forfait est basé sur Jean Zukowski de Case Nœud De L'Arbre De L'Échantillon code. Il est BSD-2-licence sans dépendances.
Il permet le mélange et l'appariement de
DefaultMutableTreeNode
etCheckBoxNodeData
types de nœuds. Il permet également la case à cocher nœuds non-nœuds feuilles.Ce qui concerne la question de la question #1: je n'ai pas testé sur toutes les plateformes, mais sur mes systèmes OS X, le
CheckBoxNodeData
nœuds sont exactement de la même hauteur, en pixels, comme leDefaultMutableTreeNode
nœuds.Ce qui concerne la question de la question n ° 2: il utilise un
JCheckBox
+JLabel
dans unJPanel
(comme aperkins l'indique) pour différencier cliquant sur une case à cocher (pour cocher/décocher un nœud) par rapport à une étiquette (pour sélectionner un nœud).Exemple d'utilisation:
Le dernier exemple a un code pour le basculement de manière récursive des sous-arborescences en réponse à des boîtes activée ou désactivée (voir la
treeNodesChanged
méthode).OriginalL'auteur ctrueden