JavaFX:将上下文菜单添加到TableView单元格

时间:2018-04-27 16:12:06

标签: javafx tableview contextmenu

我正在尝试为列中的每个单独的单元格添加上下文菜单,通过右键单击单元格来激活该菜单。菜单项还取决于单击的单元格。

我认为使用细胞工厂将是最好的方法,但我无法弄清楚如何做到这一点。

编辑:这是我的一个专栏的实现。 updateItem()中的setText将文本添加到我的列,但我想将其添加为标签,我该怎么做?

moColumn = new TableColumn<>("Maandag");
    moColumn.setSortable(false);
    moColumn.setCellValueFactory(new PropertyValueFactory<>("Mo"));
    getColumns().add(moColumn);
    moColumn.setCellFactory(new Callback<TableColumn<RowData, Label>, TableCell<RowData, Label>>() {
        @Override
        public TableCell<RowData, Label> call(TableColumn<RowData, Label> col) {
            final TableCell<RowData, Label> cell = new TableCell<RowData, Label>() {
                @Override
                protected void updateItem(Label item, boolean empty) {
                    super.updateItem(item, empty);
                    if(empty){
                        setText(null);
                    } else {
                        setText(item.getText());
                    }
                }
            };

            //cell.textProperty().bind(cell.getItem().textProperty());

            cell.setOnMouseClicked(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    if(event.getButton() == MouseButton.SECONDARY){
                        ContextMenu contextMenu = new ContextMenu();
                        MenuItem menuItem = new MenuItem(cell.getText());
                        contextMenu.getItems().add(menuItem);
                        cell.setContextMenu(contextMenu);
                    }
                }
            });
            return cell;
        }
    });

修改:How can I right click on a cell in tableview in Javafx (fxml)? 我发现了这个,但是博客的链接不再有用了......

1 个答案:

答案 0 :(得分:0)

更改:

@Override
            protected void updateItem(Label item, boolean empty) {
                super.updateItem(item, empty);
                if(empty){
                    setText(null);
                } else {
                    setText(item.getText());
                }
            }

要:

@Override
            protected void updateItem(Label item, boolean empty) {
                super.updateItem(item, empty);
                if(empty){
                    setText(null);
                } else {
                    setGraphic(item);
                }
            }