将Context Menu添加到使用JAVAFX中的ObservableMap设计的TableView

时间:2018-01-17 14:45:36

标签: java javafx tableview contextmenu

我使用ObservableMap而不是ObservableList创建了一个表。你可以看到代码(不是我写的)here。现在我需要为每一行添加上下文菜单。所以我编写了如下代码:

public MapTableView<String, LineItem> initialize(MapTableView<String, LineItem> tableView) {

    tableView.setRowFactory((TableView<Entry<String, LineItem>> tableView1) -> {

        final TableRow<Entry<String, LineItem>> row = new TableRow<>();
        final ContextMenu contextMenu = new ContextMenu();
        final MenuItem cancelMenuItem = new MenuItem("Cancel");
        cancelMenuItem.setOnAction((ActionEvent event) -> {

           LineItem item  =  tableView1.getSelectionModel().getSelectedItem().getValue();
           System.out.println(item.getLineNo()); // gives me null
            });

        });

        contextMenu.getItems().add(cancelMenuItem);

        // 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)
        );  tableView1.setContextMenu(contextMenu);
        return row;
    });

    return tableView;
}

实际上它是从表中检索订单但是当我访问对象的变量时它会给我&#34; null&#34;。我无法找出我在做什么错。请帮我解决一下这个。更多 - 我正在使用以下内容初始化表:

tableView.setEditable(false);
tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);

我是否应该使用以下任何内容:

tableView.getSelectionModel().setCellSelectionEnabled(true);

一切正常,但是当我试图访问&#34;项目&#34;的变量时我正在获得&#34; Null Pointer Exception&#34;因为值为null,但该对象不为null。提前谢谢。

1 个答案:

答案 0 :(得分:0)

正如@James_D所说,使用

LineItem item = row.getItem().getValue()解决了这个问题。