Java Fx TreeTableView différents éléments du menu contextuel


J'utilise TreeTableView et je souhaite modifier les éléments de menu associés au menu contextuel en fonction des données de la ligne sélectionnée.

Supposons que j'ai une table avec une structure comme:


Visiteurs


Visiteur 1

Visiteur 2

Visiteur 3

Chatteurs


Chatter1

Chatter2


Ici, dans ce tableau, nous pouvons dire métaphoriquement que nous avons deux nœuds racine qui sont "Visiteurs"et " Bavards". Maintenant, je veux avoir deux menus contextuels avec des options différentes. Un menu contextuel pour les visiteurs que nous pouvons dire avoir un élément qui est "Inviter à discuter" et un autre menu contextuel qui gère les chatteurs et ont différentes options comme : "kick" , "ban" et ainsi de suite. Mon problème est de savoir comment réaliser ce scénario? Où dois-je utiliser ces menus contextuels? Dois-je les utiliser avec des cellules, des lignes ou le tableau?

Author: Khafaga, 2014-12-15

1 answers

Utilisez une fabrique de lignes personnalisée et configurez le menu contextuel dans la méthode updateItem(...).

En Supposant que vous avez un

TreeTableView<MyDataType> treeTable = ... ;

Vous feriez quelque chose comme

treeTable.setRowFactory(ttv -> {
    ContextMenu contextMenu = new ContextMenu();
    MenuItem inviteMenuItem = new MenuItem("Invite to Chat");
    // ...
    MenuItem banMenuItem = new MenuItem("Ban");
    // ...
    TreeTableRow<MyDataType> row = new TreeTableRow<MyDataType>() {
        @Override
        public void updateItem(MyDataType item, boolean empty) {
            super.updateItem(item, empty);
            if (empty) {
                setContextMenu(null);
            } else {
                // configure context menu with appropriate menu items, 
                // depending on value of item
                setContextMenu(contextMenu);
            }
        }
    };
    inviteMenuItem.setOnAction(evt -> {
        MyDataType item = row.getItem();
        // do something with item...
    });
    // event handlers for other menu items...
    return row ;
});

Mise en garde: ce n'est pas testé car vous n'avez pas fourni un MCVE pour que je puisse le tester, mais cela devrait vous donner une idée générale. Cela affichera le menu contextuel approprié pour la ligne sur laquelle l'utilisateur clique (avec le déclencheur approprié pour un menu contextuel, par exemple un clic droit); ceci est indépendant de quel élément est sélectionné .

 5
Author: James_D, 2017-05-23 11:59:37