Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX TableView更新单元格,不更新对象值_Java_Javafx_Tableview_Fxml - Fatal编程技术网

JavaFX TableView更新单元格,不更新对象值

JavaFX TableView更新单元格,不更新对象值,java,javafx,tableview,fxml,Java,Javafx,Tableview,Fxml,在将列作为文本字段进行编辑并能够编辑和更新单元格内显示的值之后,我注意到每当我试图从tableview中提取更新后的值时,只有旧的原始未编辑值返回给了我-单元格中表示的值似乎不等于从基础模型对象返回的值 要使我的柱可编辑,我使用以下代码: ObservableList<TableColumn> colums = search.getColumns(); colums.get(1).setEditable(true); colums.get(1).setCellFactory(Tex

在将列作为文本字段进行编辑并能够编辑和更新单元格内显示的值之后,我注意到每当我试图从tableview中提取更新后的值时,只有旧的原始未编辑值返回给了我-单元格中表示的值似乎不等于从基础模型对象返回的值

要使我的柱可编辑,我使用以下代码:

ObservableList<TableColumn> colums = search.getColumns();

colums.get(1).setEditable(true);
colums.get(1).setCellFactory(TextFieldTableCell.<DataPoint>forTableColumn());
colums.get(1).setCellValueFactory(new PropertyValueFactory<DataPoint, String>("No"));
那么,我如何将更新后的值保存在模型对象中/如何提取单元格中显示的


(我的GUI是一个FXML文档,由Gluon的Scene Builder程序制作)

除非
cellValueFactory
返回一个也允许您写入项目的属性,否则您需要使用
onEditCommit
事件将值存储在项目中
PropertyValueFactory
返回一个不写入项的属性,如果项类中只存在getter和setter,而不存在属性getter

((TableColumn<DataPoint, String>) colums.get(1)).setOnEditCommit(evt -> evt.getRowValue().setNo(evt.getNewValue()));

我试图添加您给我的第一行代码,但我的IDE告诉我它无法解析该方法:“无法解析方法'getRowValue()'”同样适用于“getNewValue”-您知道问题可能是什么吗?可能是因为您使用的是原始类型。如果添加适当的强制类型,则应修复。(请参见编辑)。谢谢,这似乎可以解决我的问题!
DataPoint selectedData = (DataPoint) TableView_Search.getSelectionModel().getSelectedItem();

System.out.println(selectedData.getNo());
((TableColumn<DataPoint, String>) colums.get(1)).setOnEditCommit(evt -> evt.getRowValue().setNo(evt.getNewValue()));
JavaBeanStringPropertyBuilder builder = JavaBeanStringPropertyBuilder.create().beanClass(DataPoint.class).name("no");
colums.get(1).setCellValueFactory(cd -> builder.bean(cd.getValue()).build());