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

javaFX TableView即使更新了数据列表也不更新

解念
2023-03-14

编辑:我已经用一个带有PropertyValueFactory的cellValueFactory创建了和TableView,但是当我更新表示TableView数据的ObservableList时,我的TableView将不会更新。我确信readNctsvorgaenge()创建的新列表已经更新,并且包含了附加项。这是用mvvmfx->moodel view viewmodel实现的

这是FXML文件...

<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://html" target="_blank">javafx.com/fxml/1" fx:controller="cuscus.ui.vorgangnctsmonitor.MonitorNctsvorgang">
    <children>
        <TableView fx:id="nctsvorgaengeTable"
            AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
            AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <columns>
                <TableColumn prefWidth="175.0" text="%common.Bezugsnummer">
                    <cellValueFactory>
                        <PropertyValueFactory property="bezugsnummer" />
                    </cellValueFactory>
                </TableColumn>
            </columns>
        </TableView>
    </children>
</AnchorPane>

视图的控制器部分:

    public class MonitorNctsvorgang implements FxmlView<MonitorNctsvorgangViewModel> {
        @FXML
        private TableView<MonitorNctsvorgangTableViewModel> nctsvorgaengeTable;
        @InjectViewModel
        private MonitorNctsvorgangViewModel viewModel;

        public void initialize() {
            nctsvorgaengeTable.setItems(viewModel.getNctsvorgaenge());
            viewModel.selectedTableRowProperty().bind(nctsvorgaengeTable.getSelectionModel().selectedItemProperty());
            viewModel.setOnSelect(vm -> nctsvorgaengeTable.getSelectionModel().select(vm));
        }
    }

TableView的数据模型是...

public class MonitorNctsvorgangTableViewModel {
   private final Nctsvorgang nctsvorgang;

   public MonitorNctsvorgangTableViewModel(Nctsvorgang nctsvorgang) {
      this.nctsvorgang = nctsvorgang;
   }

   public String getBezugsnummer() {
      return nctsvorgang.getBezugsnummer();
   }
}

我的viewmodel

    public class MonitorNctsvorgangViewModel implements ViewModel {
       @InjectScope
       private NctsvorgangDetailScope   detailScope;
       @Inject
       private CusCusDao                cuscusDao;

       private final ObservableList<MonitorNctsvorgangTableViewModel>   vorgaenge = FXCollections.observableArrayList();

       public ObservableList<MonitorNctsvorgangTableViewModel> getNctsvorgaenge() {
            return vorgaenge;
       }

       public void initialize() {
           updateNctsvorgaenge();
       }

       public void onNctsvorgangUpdateEvent(@Observes NctsvorgangUpdatedEvent event) {
           updateNctsvorgaenge();
       }      

       private void updateNctsvorgaenge() {
            final List<Nctsvorgang> allVorgaenge = cuscusDao.readNctsvorgaenge();
           vorgaenge.clear();
            allVorgaenge.forEach(vorgang -> vorgaenge.add(new MonitorNctsvorgangTableViewModel(vorgang)));
       }
   }

    Nctsvorgang {
        String bezugsnummer;
    //getter setter here
    }

所以我想知道为什么当我将不同的ObservaleList读入ObservaleList时,我的TableView没有更新/刷新。我遵循的是一个示例(mvvmFX联系人示例),我非常肯定代码与示例中的代码相同。这几天我一直被困在这个问题上,Googlesearch没有解决我的问题,这让我发疯了。抱歉,如果双发,但我已经厌倦了寻找答案:/任何帮助将非常感谢。

共有1个答案

公孙联
2023-03-14

我发现了我的问题,我的ViewModel没有注释@singleton

 类似资料:
  • 我目前正在重构遗留代码,以使用Android架构组件,并在一种存储库模式中设置一个房间数据库和截取请求。因此,表示层/域层要求存储库获取LiveData对象进行观察,或告诉他与服务器同步,然后删除旧的db条目,并从服务器中重新提取所有当前条目。 我已经写了同步部分的测试,所以我确信,对象被正确地获取并插入到数据库中。但是当写一个测试来观察db表的条目时(并测试对象是否被正确保存,以及在将它们放入d

  • 我使用RecycerView使用游标显示sqlite数据库中的数据,当我从数据库中删除一项时,该项将被删除,但我的RecycerView视图不会刷新。 我必须回到我的主要活动,然后数据被刷新。我已经使用了notifyItemRemoved()和notifyDataSetChanged()

  • 问题内容: 我有一个包含10个元素的div,这些元素将被逐个更新,延迟时间为2秒。下面是相同的代码 但是,当我运行它时,所有元素都会一起更新。该程序只是添加一个延迟添加一个开始,并且所有元素都一起更新(被标记)。如何制作代码来逐一标记元素? 问题答案: 您正在打破React的两个基本规则: 不要直接改变状态 如果根据现有状态更新状态,请使用回调形式,因为状态更新可能是异步的(无论如何,在您的示例中

  • 我正在用一些初始数据绘制一个条形图,然后在单击按钮时尝试更新。我收到错误“未捕获的类型错误:无法读取未定义的属性'长度'”。单击更新后,将发生错误。如何解决此问题并启用更新功能以绘制新的条形图? D3代码:

  • 在下面的代码中,我单击Submit按钮。在backing\u home中,通过ajax调用将布尔值更改为true。 如果我删除渲染的,我会正确地看到更新的输出。但是对于下面的代码,它是。我认为它没有呈现新值 可能是什么原因?

  • 我有一个带有分页的表视图。如下(简化): 问题是,当我更新数据时(ObservableList)。更改在表视图中不可见。 在我看来,问题出在中。如果我使用设置项目,所有更改都会立即在中可见。 有什么想法,我该怎么解决这个问题? 编辑 我正在更新如下数据: