Data binding 用户界面中未反映observablelist中的更新项

Data binding 用户界面中未反映observablelist中的更新项,data-binding,javafx,Data Binding,Javafx,我已经从ObservableList中得到了一个过滤后的TableView填充,当我从ObservableList更新一个项目时,该项目在UI中并没有更新,但若我搜索到表中,该项目就会出现 tbcNombre.setCellValueFactory(new PropertyValueFactory<>("nombre")); tbcApellidos.setCellValueFactory(new PropertyValueFactory<>("apellidos"));

我已经从ObservableList中得到了一个过滤后的TableView填充,当我从ObservableList更新一个项目时,该项目在UI中并没有更新,但若我搜索到表中,该项目就会出现

tbcNombre.setCellValueFactory(new PropertyValueFactory<>("nombre"));
tbcApellidos.setCellValueFactory(new PropertyValueFactory<>("apellidos"));
tbcAsistencia.setCellValueFactory(new Callback<CellDataFeatures<Alumno,  Alumno>, ObservableValue<Alumno>>() {
   @Override
   public ObservableValue<Alumno> call(CellDataFeatures<Alumno, Alumno>     features) {
      return new ReadOnlyObjectWrapper(features.getValue());
     }
   });

//datamodel.getAlumnos() returns an observablelist
datosFiltrados = new FilteredList<>(datamodel.getAlumnos());
listaOrdenada = new SortedList<>(datosFiltrados);
listaOrdenada.comparatorProperty().bind(tbvAlumnos.comparatorProperty());
tbvAlumnos.setItems(listaOrdenada);

只需参考此解决方案tableView.getColumns.get0.setVisiblefalse;tableView.getColumns.get0.setVisibletrue;感谢@reegan miranda的回答,但我使用了getColumns.getx的上一次JDK预览和方法setVisible not exists。如果设置正确,您不需要隐藏和显示列或重建表项之类的技巧。你能把你的模范班校友发出去吗?您能准确地指定您正在更新的内容吗?Alumno的POJO只包含字符串成员,如name、姓氏。。。但所有成员都是stringno-stringproperties,因为我使用Hibernate,它不支持从JavaFX正式绑定数据类型。更新发生在用户双击一行后,出现一个包含行数据的窗口,用户可以更改数据,然后在observablelist中更新数据。问题是UI未更新,行显示的数据相同。但我有一个搜索文本字段,用户在其中输入一些文本并过滤表,当用户这样做时,行显示更新数据。
    txtBuscar.textProperty().addListener((observable, oldValue, newValue) -> {
        datosFiltrados.setPredicate(alumnoAux -> {
            boolean aux = false;

            if (StringUtils.isEmpty(newValue)) {
                aux = true;
            } else if (alumnoAux.toString().toLowerCase().contains(newValue.toLowerCase())) {
                aux = true;
            }

            return aux;
        });

        if (datosFiltrados.size() == 0) {
            btnDetalles.setDisable(true);
            btnBorrar.setDisable(true);
        } else {
            btnDetalles.setDisable(false);
            btnBorrar.setDisable(false);
        }
    });