【问题标题】:Java Fx TreeTableView different Context Menu itemsJava Fx TreeTableView 不同的上下文菜单项
【发布时间】:2014-12-15 08:58:09
【问题描述】:

我正在使用 TreeTableView ,我想根据所选行内的数据更改与上下文菜单关联的菜单项。

假设我有一个结构如下的表:


访客


访客 1

访客 2

访客 3

聊天


喋喋不休1

喋喋不休2


在此表中,我们可以比喻说我们有两个根节点,即“访客”和“聊天者”。现在,我想要两个具有不同选项的上下文菜单。我们可以说访问者的上下文菜单有一个项目是“邀请聊天”,另一个上下文菜单处理聊天并具有不同的选项,例如:“踢”、“禁止”等。我的问题是如何实现这种情况?我应该在哪里使用这些上下文菜单?我应该将它们与单元格、行还是表格一起使用?

【问题讨论】:

  • 自定义单元工厂有什么问题?
  • @kleopatra:我如何使用细胞工厂来实现这一目标?
  • ahh .. 在重新阅读时,我看到您希望内容依赖于 selected 数据。 but then, I don't understand the problem: update the contextMenu whenever selection changes, f.i.那么,究竟是什么您的问题?最好展示一个 SSCCE,展示您想要实现的目标以及它如何无法按预期工作
  • @kleopatra:我更新了我的问题。现在清楚了吗?
  • 您的描述不清楚:想要每种数据类型单独的上下文菜单?然后看我的第一条评论。想要为选定的行提供单独的上下文菜单?请参阅我的第二条评论。反正SSCCE还是不见了……

标签: java contextmenu java-8 javafx-8 treetableview


【解决方案1】:

使用自定义行工厂并在updateItem(...) 方法中配置上下文菜单。

假设你有一个

TreeTableView<MyDataType> treeTable = ... ;

你会做类似的事情

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 ;
});

警告:这没有经过测试,因为您没有提供MCVE 供我测试,但它应该给您一个大致的想法。这将为用户单击的行显示适当的上下文菜单(带有上下文菜单的适当触发器,例如右键单击);这与选择了哪个项目无关。

【讨论】:

  • 我可以为同一张表创建多个 Row 工厂吗?
  • 没有。行工厂是表用来创建表行的对象。如果它有多个,它怎么知道使用哪个?
  • 非常感谢,现在编辑后才有意义,这正是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
相关资源
最近更新 更多