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);
我正致力于在 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);