我在使用javafx创建的Tableview中遇到问题。我在表格的fxml文件上设置了edititable =“ true”,然后在控制器中执行
@FXML
private TableColumn<ARule,Object> rankCol;
rankCol.setCellValueFactory(new PropertyValueFactory<ARule, Object>("label")); rankCol.setCellFactory(ChoiceBoxTableCell.forTableColumn(Main.getlabelSample())); rankCol.setOnEditCommit(e -> {System.out.println("something happens!");});
要在列排名中创建一个选择框,以更改属性的值。ARule有一个属性字段以及getter和setter方法:
private SimpleObjectProperty label;
public SimpleObjectProperty labelProperty() {
return label;
}
public void setLabel(Object label) {
this.label.set(label);
}
public Object getLabel(){
return this.label.getValue();
}
函数Main.getlabelSample()重新运行由String或Integer填充的对象
private static final ObservableList<Object> labelSample = FXCollections.observableArrayList();
问题是,在界面中我可以编辑该列,并且它在labelSample列表中显示正确的值,问题是它不会更改ARule对象的值,这通过缺少setOnEditCommit处理程序的调用来突出显示。GUI上的值是选定的新值,但表中各项上保存的值是旧的值。
我还有一个单独的按钮,用于更改所选行上该列的值,如果触发该值,则该值将更改为“ real”(在GUI和模型上)。
代码中可能有什么错误?
该列的默认编辑提交行为被设置为该onEditCommit
属性。如果你打电话
rankCol.setOnEditCommit(...);
然后将此属性设置为其他属性,即删除默认行为。
如果要向默认值添加其他行为,请使用addEventHandler(...)
代替setOnEditCommit(...)
:
rankCol.addEventHandler(TableColumn.editCommitEvent(), e -> {
System.out.println("Something happens");
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句