2009-12-14 3 views
0

J'ai un JTree qui affiche un JPopupMenu lorsque je clique droit sur des nœuds dans le JTree. Quel est le meilleur moyen de masquer/afficher ou activer/désactiver certains JMenuItems dans mon JPopupMenu basé sur le nœud sélectionné dans le JTree?Afficher/Masquer JMenuItems dans un JPopupMenu basé sur la sélection d'un JTree

La première solution qui est venue à l'esprit était d'ajouter un TreeSelectionListener au JTree pour l'événement 'value changed'. Dans le code de gestion d'événement, j'utiliserais la méthode getNewLeadSelectionPath() de TreeSelectionEvent pour obtenir le chemin de la sélection la plus récente, et utiliser getLastPathComponent() de l'objet TreePath obtenu pour obtenir le nœud sélectionné. De là, j'aurais une série d'instructions IF qui accèdent à mon objet JPopupMenu et effectuent les modifications nécessaires pour masquer/afficher des JMenuItems spécifiques. Cependant, quelque chose ne va pas, et j'ai donc décidé de demander à SO s'il y avait une meilleure approche.

Répondre

1

La façon dont j'ai choisi d'aborder cela dans ma propre application était d'utiliser la propriété "userObject" de la classe DefaultMutableTreeNode qui vous permet de stocker simplement les données que vous voulez avec votre noeud. J'ai une variété de types de choses qui s'étendent d'une classe de base abstraite qui définit une méthode "createPopupMenu()". Ensuite, dans l'écouteur de sélection (comme vous l'avez décrit dans votre question), j'obtiens l'objet utilisateur et je lui demande de créer un menu contextuel approprié pour l'objet sélectionné et de l'afficher.

1

Obtenir le nœud d'arbre sélectionné est simple et devrait fonctionner comme vous l'avez décrit. Pour modifier le menu contextuel, je recommanderais d'utiliser Action s. De cette façon, vous n'aurez pas à modifier votre menu en direct et vous pourrez également ajouter, par ex. un JToolBar qui contient les mêmes actions qui réagissent de la même manière que les éléments de votre menu.

Questions connexes