我使用以下代码在我的javafx代码中创建一个可编辑的表:
@FXML private TableView<Person> personTableGUI;
...
PersonTableGUI.setEditable(true);
ReadOnlyObjectProperty <Person> listener = ResourceTableGUI.getSelectionModel().selectedItemProperty();
tableColumn.setCellFactory(TextFieldTableCell.forTableColumn());
personIdTableGUI.setCellFactory(TextFieldTableCell.forTableColumn());
personIdTableGUI.setOnEditCommit((TableColumn.CellEditEvent<Person, String> t) -> {
((Person) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setPersonId(t.getNewValue());
personIdTableGUI.setCellValueFactory((cellData) -> cellData.getValue().personIdProperty());
personNameTableGUI.setCellValueFactory(cellData -> cellData.getValue().personNameProperty());
我使用Person类:
public class Person{
private StringProperty personId;
private StringProperty personName;
我尝试进行以下操作:当stringProperty personName等于&#34; John&#34;可编辑的personIdTableGUI列的相关单元格不可编辑,我该怎么做?
答案 0 :(得分:1)
您可以将TextFieldTableCell
子类化,以便在项目更改时切换可编辑性。所以,例如:
personIdTableGUI.setCellFactory(col -> new TextFieldTableCell<Person, String>(TextFormatter.IDENTITY_STRING_CONVERTER) {
@Override
public void updateItem(String name, boolean empty) {
super.updateItem(name, empty);
if (empty) {
setEditable(false);
} else {
Person rowValue = getTableView().getItems().get(getIndex());
setEditable( ! "John".equals(rowValue.getPersonName()) );
}
}
});