JTree avec des cases à cocher

voix
12

Je dois ajouter des cases à cocher à un JTree. Une TreeCellRenderer personnalisée / TreeCellEditor semble que la bonne approche. Jusqu'à présent , je l'approche CheckBoxNodeRenderer dans cette page web . Il fonctionne bien , sauf pour deux choses:

  1. il y a des espaces supplémentaires ci-dessus + la case ci-dessous; Je voudrais garder le même que celui d'une DTree régulière.
  2. Je voudrais faire la distinction entre cliquant sur la case à cocher lui-même (qui devrait tenter de basculer la case à cocher) et en cliquant sur le texte associé à la case à cocher (qui devrait permettre un écouteur d'événement d'interpréter cela comme cliquant sur le nœud de l'arbre correspondant et prendre toutes les mesures est approprié)

est-il un moyen de faire ces choses? Je regardais autour de JTrees avec des cases à cocher, ne peut pas trouver beaucoup. JIDE semble bon mais je dois utiliser des logiciels libres open source (GPL n'est pas correct, LGPL est ok) dans ce cas. (Ou créer mon propre arbre de case à cocher)

Créé 03/08/2009 à 17:06
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
7

En ce qui concerne # 2, vous pourriez faire un groupe spécial l'éditeur / renderer et ajouter une étiquette ainsi que la case à cocher - l'étiquette serait le texte et la case à cocher serait pas le texte ajouté.

Créé 03/08/2009 à 18:00
source utilisateur

voix
4

par suggestion @aperkins ce que je fini par faire dans le TableCellRenderer, il semble bien fonctionner:

final private JPanel nodeRenderer = new JPanel();
final private JLabel label = new JLabel();
final private JCheckBox check = new JCheckBox();

     ...

// in constructor:
final Insets inset0=new Insets(0,0,0,0);        
this.check.setMargin(inset0);
this.nodeRenderer.setLayout(new BorderLayout()); 
this.nodeRenderer.add(this.check, BorderLayout.WEST);
this.nodeRenderer.add(this.label, BorderLayout.CENTER);

Les clés pour se débarrasser de l'espace non désiré dans les marges semble être (a) appelant JCheckBox.setMargin () pour réduire la marge de case à cocher, et (b) en utilisant un BorderLayout pour JPanel.

Créé 03/08/2009 à 20:35
source utilisateur

voix
9

Je sais que cette question a été déjà répondu, mais je veux juste éclaircir quelques points:

1) JIDE couche commune est sous une double licence (GPL et à l' exception classpath licence commerciale gratuite). Cela signifie que vous pouvez utiliser le projet de couche commune sans aucun problème de licence. S'il vous plaît vérifier le lien suivant pour confirmer: http://www.jidesoft.com/products/oss.htm . La couche commune comprend une mise en œuvre d'un JTree checkable (com.jidesoft.swing.CheckBoxTree).

2) Il y a un blog daté de 2005 du maître lui - même, Santhosh Kumar, où il explique comment implémenter un JTree avec des cases à cocher avec les exigences que vous avez mentionnés: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Il vaut la peine de le lire, à mon avis.

Créé 20/02/2012 à 13:16
source utilisateur

voix
2

J'ai sorti un autonome swing Checkbox Arbre projet, disponible à partir de Maven Central comme org.scijava:swing-checkbox-tree.

Le forfait est basé sur John Zukowski CheckBox Arbre Node Exemple de code. Il est sous licence BSD-2 sans dépendances.

Il permet le mélange et la mise en correspondance de DefaultMutableTreeNodeet CheckBoxNodeDatatypes de noeuds. Il permet également de vérifier les nœuds de la boîte en tant que nœuds non-feuille.

En 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, les CheckBoxNodeDatanoeuds sont exactement la même hauteur en pixels que les DefaultMutableTreeNodenœuds.

En ce qui concerne la question n ° 2 de la question: il utilise un JCheckBox+ JLabeldans un JPanel(comme aperkins suggère) de faire la différence entre cliquant sur une case à cocher (pour cocher / décocher un nœud) par rapport à une étiquette (pour sélectionner un nœud).

Exemples d'utilisation:

Ce dernier exemple a également coder pour basculer récursivement les sous - arbres en réponse aux boîtes d' être enregistrés ou non (voir la treeNodesChangedméthode).

Créé 12/10/2012 à 20:49
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more