我在TableView中遇到限制问题。
userRule.setCellValueFactory(cellData -> cellData.getValue().userRuleProperty());
userRule.setCellFactory(ComboBoxTableCell.forTableColumn(FXCollections
.observableArrayList(RuleEnum.Admin.toString(), RuleEnum.Lider.toString())));
userRule.setEditable(true);
userRule.setOnEditCommit(event -> {
AdminSQL sql = new AdminSQL();
try {
sql.changeRule(userTable.getSelectionModel().getSelectedItem().getUserLp(), event.getNewValue().toString());
} catch (SQLException e) {System.out.println(e.getMessage());e.printStackTrace();}
});
但是在我的Enum和tableview colum中我有3个选项:SuperAdmin,Admin和Lider。如果value = SuperAdmin,我不想在rowcell中创建组合框。
有什么想法吗? :)
答案 0 :(得分:1)
正如fabian在评论中建议的那样,您可以使用可以处理此功能的自定义表格单元格。有两种方法:
userRule.setCellFactory(new ComboBoxTableCell<>(/* add the items here*/){
@Override
public void updateItem(RuleEnum item, boolean empty) {
super.updateItem(item, empty);
if(empty){
setText(null);
setGraphic(null);
}else if (RuleItem.SuperAdmin.equals(item)){
setEditable(false);
}else {
setEditable(true);
}
}
});
或
userRule.setCellFactory(new ComboBoxTableCell<>(/* add the items here*/){
@Override
public void startEdit() {
RuleEnum ruleEnum = getTableRow().getItem().getEnum(); // insert your method here
if(RuleEnum.SuperAdmin.equals(ruleEnum)){
return;
}
super.startEdit();
}
});
答案 1 :(得分:0)
它的工作原理也是这样
userRule.setEditable(true);
userRule.setOnEditStart(e ->{
if(e.getOldValue().equals(RuleEnum.SuperAdmin.toString())) {
userRule.setCellFactory(ComboBoxTableCell.forTableColumn(FXCollections
.observableArrayList(RuleEnum.Admin.toString(), RuleEnum.Lider.toString())));
userRule.setOnEditCommit(event -> {
AdminSQL sql = new AdminSQL();
try {
sql.changeRule(userTable.getSelectionModel().getSelectedItem().getUserLp(), event.getNewValue().toString());
} catch (SQLException e1) {System.out.println(e1.getMessage());e1.printStackTrace();}
});
}
});