我有一个包含多列的TableView
,我希望只有在同一行的另一列上验证了某些值时,才能编辑其中的一些。换句话说,我希望TableCell
的“可编辑”属性是特定于行的,而不是列特定的。
真正的问题是我找不到任何方法从列中获取TableCell
对象,因此我无法将其editable属性设置为false。
例如,这将是检查“可编辑”属性的列:
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);
}
});
答案 0 :(得分:0)
您说您希望它是行特定的而不是列特定的吗?
您可以使用单元格更改侦听器。每当细胞被改变时,你将获得细胞的x,y坐标。你可以创建一个像isColumnDependent
这样的布尔数组。如果值为true,则可以确定列数,并创建一个迭代单元格左侧和右侧的方法,如果不满足所需的规则,则禁用它们的可编辑性。
只是一个想法,没有多少与JavaFX合作。
如果它与JTable的设置类似,你可以创建一个更加面向行的表模型。