JavaFX TableCell可根据行值进行编辑

时间:2014-07-29 13:34:34

标签: java javafx tableview tablecell

我有一个包含多列的TableView,我希望只有在同一行的另一列上验证了某些值时,才能编辑其中的一些。换句话说,我希望TableCell的“可编辑”属性是特定于行的,而不是列特定的。

真正的问题是我找不到任何方法从列中获取TableCell对象,因此我无法将其editable属性设置为false。

你可以帮帮我吗?它甚至可以用JavaFX吗?


例如,这将是检查“可编辑”属性的列:

nextIsEditableCol.setCellValueFactory(new PropertyValueFactory<Person, Boolean>("nextIsEditable"));
nextIsEditableCol.setCellFactory(ChoiceBoxTableCell.<Person,Boolean>forTableColumn(true,false));
nextIsEditableCol.setOnEditCommit(new EventHandler<CellEditEvent<Person, Boolean>>() {
    @Override
    public void handle(CellEditEvent<Person, Boolean> t) {
        if(t.getNewValue()){
            //Here be the code that sets the next cell of this row to editable
        }
    }
});

这将是可能编辑或不编辑的专栏:

mayBeEditedCol.setCellValueFactory(new PropertyValueFactory<Person, String>("name"));
mayBeEditedCol.setCellFactory(TextFieldTableCell.forTableColumn());
nextIsEditableCol.setOnEditCommit(new EventHandler<CellEditEvent<Person, String>>() {
    @Override
    public void handle(CellEditEvent<Person, Boolean> t) {
        t.getRowValue().setName(t.getNewValue);
    }
});

1 个答案:

答案 0 :(得分:0)

您说您希望它是行特定的而不是列特定的吗?

您可以使用单元格更改侦听器。每当细胞被改变时,你将获得细胞的x,y坐标。你可以创建一个像isColumnDependent这样的布尔数组。如果值为true,则可以确定列数,并创建一个迭代单元格左侧和右侧的方法,如果不满足所需的规则,则禁用它们的可编辑性。

只是一个想法,没有多少与JavaFX合作。

如果它与JTable的设置类似,你可以创建一个更加面向行的表模型。