JavaFX:一行填充了一个条目后的ContextMenu?

时间:2015-03-11 02:04:33

标签: java javafx

我正在使用this link为每个表行创建一个ContextMenu。现在我遇到了问题,因为我不确定如何在'类型'之后附加ContextMenu。已被插入一行。

假设我使用的是.zip编辑器程序,它会列出内容。我有一个Image,一个文本文件,以及其他一些东西,所有这些东西都在一个名为 Entry 的类下面。我的表的通用类型是' Entry',我希望能够根据它的基础子类类型为每个条目创建一个上下文菜单(如ImageEntry可能会返回一个菜单项,在图像编辑器中打开它等等。

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

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

1 个答案:

答案 0 :(得分:4)

在行的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 ;  
        }  
    });