JavaFX:在一行中填充了一个条目后的上下文菜单?

标签 java javafx

我正在使用 this link为每个表行创建一个 ContextMenu。现在我遇到了问题,因为我不确定如何在“类型”插入行后附加上下文菜单。

假设我正在使用 .zip 编辑器程序,它列出了内容。我有一个图像、一个文本文件和其他一些东西,它们都在一个名为 Entry 的类下。我的表的通用类型是“Entry”,我希望能够根据它的底层子类类型为每个条目创建一个上下文菜单(比如 ImageEntry 可能返回一个菜单项以在图像编辑器中打开它...... .等)。

现在我有一个适用于所有内容的通用上下文菜单,但是显示关于使用图像编辑器打开文本文件的菜单项并不是很好...

这可能吗?如果是这样,那么正确的做法是什么?

最佳答案

向行的itemProperty(代表行中显示的项目)添加一个监听器,并在它改变时更新上下文菜单:

    table.setRowFactory(new Callback<TableView<Person>, TableRow<Person>>() {  
        @Override  
        public TableRow<Person> call(TableView<Person> tableView) {  
            final TableRow<Person> row = new TableRow<>();  
            final ContextMenu contextMenu = new ContextMenu();  

            row.itemProperty().addListener((obs, oldPerson, newPerson) -> {
                contextMenu.getItems().clear();
                // add items to context menu depending on value of newPerson
                // ...
            });

           // Set context menu on row, but use a binding to make it only show for non-empty rows:  
            row.contextMenuProperty().bind(  
                    Bindings.when(row.emptyProperty())  
                    .then((ContextMenu)null)  
                    .otherwise(contextMenu)  
            );  
            return row ;  
        }  
    });  

关于JavaFX:在一行中填充了一个条目后的上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28977375/

相关文章:

java - Java中的多个JSON解析

java - 给定两个随机整数数组,打印它们的交集。也就是说,打印两个给定数组中存在的所有元素

Java 类成员未在构造函数中初始化?

JavaFX 在 fxml 中调整 Canvas 大小

JavaFX - 由 : java. lang.UnsupportedOperationException : Unable to open DISPLAY? 引起

java - 背景图像不工作 javaFX

java - 使用 inno-script-studio build设置 javafx-gradle-plugin?

java - 如何制作 JFrame/JPanel "Modal",以便在关闭窗口或按下按钮之前不会继续输入?

java - 使用任何现有的 java 库/工具将输入示例从 JSON 转换为 JSON

java - 将 URL 设置为我的 .fxml