JavaFX - 如何在表格视图中引用单元格的邻居

JavaFX - How to refer to a cell's neighbor in tableview

我正致力于在 JavaFX 中创建一个包含 editable 属性的 table。我希望能够使用每一行中包含的按钮开始编辑、提交更改和取消;但是,我在引用要开始编辑的单元格时遇到了一些困难。理想情况下,我想做类似这样的事情:

controller.buttonColumn.setCellFactory(p -> new TableCell<TableItem, String>(){
            @Override
            protected void updateItem(String s, boolean empty) {
                super.updateItem(s, empty);
                if (getTableRow().getItem()==null){
                    setGraphic(null);
                    return;
                }
                Button editButton = new Button("Edit");
                editButton.setOnAction(event -> {
                    getTableRow().getCell(1).startEdit();
                });
                setGraphic(editButton);

        });

但这不起作用,因为 TableRow 没有访问特定单元格的方法。同样,我可以使用这样的一行:

getTableView().getEditingCell().cancelEdit();

对于我的取消按钮,但是 getEditingCell() 方法不是 return TableCell 而是 TablePosition,它没有访问相应单元格的方法。

tl;博士 我正在寻找一种方法来访问 TableView 中的单元格,因为它是邻居。

您可以使用 TableView.edit(int row, TableColumn<S,?> column) method:

controller.buttonColumn.setCellFactory(p -> new TableCell<TableItem, String>(){
    @Override
    protected void updateItem(String s, boolean empty) {
        super.updateItem(s, empty);
        if (getTableRow().getItem()==null){
            setGraphic(null);
            return;
        }
        Button editButton = new Button("Edit");
        editButton.setOnAction(event -> {
            getTableView().edit(getIndex(), someTableColumn);
        });
        setGraphic(editButton);
    }
});

其中 someTableColumn 是包含您要开始编辑的单元格的列。

您可以使用相同的方法取消编辑:

tableView.edit(-1, null);