Kha*_*aga 1 java contextmenu java-8 javafx-8 treetableview
我正在使用TreeTableView,并且我想根据所选行内的数据更改与上下文菜单关联的菜单项。
假设我有一个结构如下的表:
访客
不休
在此表中,我们可以比喻说我们有两个根节点,分别是“访问者”和“ Chatters”。现在,我想有两个带有不同选项的上下文菜单。可以说,针对访问者的上下文菜单有一个项目是“邀请聊天”,另一个上下文菜单处理聊天者,并且具有不同的选项,例如:“踢”,“禁止”等。我的问题是如何实现这种情况?我应该在哪里使用这些上下文菜单?我应该将它们用于单元格,行还是表格?
使用自定义行工厂并在updateItem(...)方法中配置上下文菜单。
假设你有一个
TreeTableView<MyDataType> treeTable = ... ;
Run Code Online (Sandbox Code Playgroud)
你会做类似的事情
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 ;
});
Run Code Online (Sandbox Code Playgroud)
注意:这没有经过测试,因为您没有为我提供MCVE进行测试,但是它应该可以为您提供总体思路。这将为用户单击的行显示相应的上下文菜单(带有上下文菜单的适当触发器,例如右键单击);这与选择哪个项目无关。
| 归档时间: |
|
| 查看次数: |
1634 次 |
| 最近记录: |