javafx - partialy editable tableview

时间:2018-01-24 10:21:18

标签: java javafx tableview

我使用以下代码在我的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列的相关单元格不可编辑,我该怎么做?

1 个答案:

答案 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()) );
        }
    }
});