我有一个TableView,它有很少的可编辑列。在JavaFX Scene Builder中,可编辑表列的在编辑提交上,我映射了一个FXML控制器方法,该方法调用DAO服务从数据库返回数据。 问题是在编辑表格单元格后没有调用事件处理程序方法。我希望在编辑单元格数据后按Tab键时触发此事件。 这该怎么做?请建议
答案 0 :(得分:2)
我对CheckBoxTableCell和DatePickerTableCell以及ColorPickerTableCells有同样的问题: - (
我这样处理:在控件的事件中,我通过" ((输入)getTableView()。getItems()。get(getTableRow())返回正在使用的POJO对象。 getIndex()"我更新类似于在OnEditCommit方法中完成...
所以对我而言,它看起来像这样(更新颜色):
((Inputs) getTableView().getItems().get(
getTableRow().getIndex())
).setColor(cp.getValue());
以下是ColorPickerCell的示例 :
public class ColorPickerTableCell<Inputs> extends TableCell<Inputs, Color>{
private ColorPicker cp;
public ColorPickerTableCell(){
cp = new ColorPicker();
cp.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
commitEdit(cp.getValue());
updateItem(cp.getValue(), isEmpty());
((Inputs) getTableView().getItems().get(
getTableRow().getIndex())
).setColor(cp.getValue());
}
});
setGraphic(cp);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
setEditable(true);
}
@Override
protected void updateItem(Color item, boolean empty) {
super.updateItem(item, empty);
cp.setVisible(!empty);
this.setItem(item);
cp.setValue(item);
}
}
使用这个简单的JavaFX的POJO:
public ObjectProperty<Color> color = new SimpleObjectProperty<Color>();
this.color = new SimpleObjectProperty(color);
public ObjectProperty<Color> colorProperty() {
return color;
}
public void setColor(Color color2) {
color.set(color2);
}
我不知道这是否是一个很好的方式来实现,但它对我有用...请注意,JavaFX的POJO只能在&#34; ActionEvent&#34;请求(组合框,日期选择器,颜色选择器等)。
此致
答案 1 :(得分:0)
以下是我用来从tableview的可编辑单元格调用DAO的方法。
private TableColumn<Person, String> createNameCol(){
TableColumn col = new TableColumn("Name");
col.setCellValueFactory(
new PropertyValueFactory<Person, String>("name"));
col.setCellFactory(TextFieldTableCell.forTableColumn());
col.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Person, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<Person, String> t) {
Person p = t.getRowValue();
p.setName(t.getNewValue());
sl.update(p); // This is where I call the update method from my DAO.
}
});
return col;
}
如果这不起作用,请发布您的代码。
修改强>
答案 2 :(得分:0)
在这一天浪费了大部分时间,在互联网上搜寻了一些例子,这些例子说的差不多,并且都在做我已经在做的事情,这就是我发现的事情:
在编辑作为TextFieldTableCell的单元格中的值时,必须按Enter键才能进行编辑提交。如果您从单元格中跳出,则该单元格仍处于编辑模式(您可以继续按Tab键以返回到该单元格的文本字段,并且如果您简单地单击该单元格,则将调用TextFieldTableCell的cancelEdit方法从而取消编辑:-(