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?
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é .