首页 > 解决方案 > JavaFX TableView 未更新 ObservableList 更改

问题描述

我有一个表格视图,每次都能很好地填充,

我的主控制器:

@Override
    public void initialize(URL location, ResourceBundle resources) {
        TableColumn tblc = new TableColumn("Test");
        tblc.setCellValueFactory(new PropertyValueFactory<Test, Integer>("TestData"));
        tbl1.getColumns().setAll(tblc);
        tbl1.setItems(aHandler.getInstance().getData());
        ...

我的测试班:

public class Test extends Thread {
    public Integer TestData=1;
    ....

扩展 Test 类并覆盖其运行的 Test1 类:

public class Test1 extends Test {
    @Override
    public void run() {
         Timer timer = new Timer();
         timer.scheduleAtFixedRate(new TimerTask(){
                public void run() {
                    setTestData(getTestData()+1);
                    System.out.println(getTestData());
                }
            }, new Date(), 1000);
...

我的处理程序:

public class aHandler {
    private ObservableList<Test> TestObservableList = FXCollections.<Test>observableArrayList();

    public ObservableList<Test> getData() {
            return TestObservableList;
        }

由于 tbl1 绑定到 aHandler.getInstance().GetData(),所以在我第一次初始化类时,我看到列 Test 填充了值 1,因为 TestData=1; 但是当定时器开始改变 TestData 时,表视图并没有得到新的赋值。我做错了什么?

我尽力解释问题,如果仍然不清楚,请告诉我,我会解释更多。

编辑:为了更好地解释,我想在每次 TestData 值更改时自动更新 TableView。这是我的最终目标。

标签: javafxtableview

解决方案


解决方案是使用 TableView.refresh(); 在计时器中。

 Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                Platform.runLater(() -> {
                    tableView.refresh();
                });
            }
        }, new Date(), 1000);

推荐阅读