当前位置: 首页 > 知识库问答 >
问题:

JavaFX TableView未更新ObservableList更改

微生城
2023-03-14

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

我的主控制器:

@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;
    ....

扩展测试类并覆盖其运行的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);
...

我的aHandler:

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

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

因为tbl1绑定到Handler。getInstance()。GetData(),第一次初始化该类时,我看到列Test填充了值1,因为TestData=1;但当计时器开始更改测试数据时,表视图不会获得新的赋值。我做错了什么?

我尽我所能解释这个问题,请让我知道,如果它仍然不清楚,我会解释更多。

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

共有1个答案

姚文轩
2023-03-14

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

 Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                Platform.runLater(() -> {
                    tableView.refresh();
                });
            }
        }, new Date(), 1000);
 类似资料:
  • 我想使用JavaFX ListView控件显示一个人员列表(在POJOS中编码,包含一个name和surname属性)。我创建了ListView,并将persons列表添加为ObservableList。如果我在ObservableList中删除或添加一个新人,那么一切都可以正常工作,但是POJO中的更改不会触发ListView的更新。我必须从ObservableList中移除和添加修改后的POJ

  • 我有一个拥有数千个条目的Java ObservableList,它支持JavaFX TableView,每秒接收数百个更新。 ObservableList由ArrayList支持。可以对列表应用任意排序顺序。更新可能会改变列表中单个实体的排序顺序。如果我试图在每次更新后预制排序,我会有性能问题,所以目前我有一个后台任务每秒钟执行一次排序。不过,如果可能的话,我想尝试实时排序。

  • 我的问题是,当更改时,我的(复选框列表视图)不会更新。 只有当我使用有日期的JavaFX版本和有日期的JRE(jre6和JFX2.2)时,才会出现这个问题。当我使用jre8和它所包含的JavaFX时,问题就没有了,列表也会很好地刷新。 上面描述的最新JavaFX上的工作源代码: 名单: 列表使用的类具有以下属性: 问题是,当我更改列表项时,ListView在旧的JavaFX版本上不会改变。 值得一

  • 我知道有人在不同的日期问过类似的问题,但我会在这里放一个SSCCE,尽量简单地问这个问题。 我希望能够更新数据模型,并使其上的任何视图自动更新,这样任何更新模型的调用者都不会知道当前有任何视图。这是我到目前为止学到/尝试的,并且没有调用它不会更新。我错过了什么? 主要的java: 全体船员Java语言

  • 所以我的应用程序有一个主窗口显示食谱列表,第二个窗口(从主窗口打开)添加新的食谱到列表(有信息)。两个窗口具有相同的视图模型。经过测试,新的制作方法被成功添加到列表中,但是UI没有更新新的制作方法。我也有一个删除按钮在主窗口为每个食谱和它的工作正常。删除的制作方法将在视图模型和UI中删除。我的代码相当长。我希望它是可读的。下面是我的代码(还有很多其他的UI,所以我只显示相关的代码): 主窗口视图

  • 一点背景: 我对也做了同样的操作--创建了一个将添加到源列表的方法,并且每当更新源列表时,它将使用JavaFX线程上的UI等价类更新目标列表: 因此,现在如果我有更新的并且其项属性更新不是在JavaFX线程上,我就可以轻松地获得一个在JavaFX中显示的列表: 所以现在的问题是: 我的预期是,当显示在中时,只要值发生更改,它就会更新,但预期的行为只持续几秒钟,之后ListView停止更新,这是因为