javafx tableview 检测任何行的任何更改,包括添加新行

Posted

技术标签:

【中文标题】javafx tableview 检测任何行的任何更改,包括添加新行【英文标题】:javafx tableview detect any change upon any of rows including addition of new one 【发布时间】:2014-02-02 12:18:07 【问题描述】:

因为我真的不知道解决方案。 假设我有一个包含产品信息的 TableView:描述、数量和价格。还有一个标签,显示表格中所有产品的价格总和(乘以数量)。现在,我希望收到有关对该组件产生影响的任何更改的通知,例如现有行的更改或添加新行。是否有任何听众或类似的东西来实现它?

【问题讨论】:

table.getItems().addListener(...)? 【参考方案1】:

通常你通过传递一个 ObservableList 来构造一个 TableView。像这样的东西: TableView myTable = new TableView(myObservableList);

ObservableList<ClassOfTheObjectsInTheList> myObservableList = FXCollections.FXCollections.observableArrayList(anyNoneObservableCollection);
TableView<ClassOfTheObjectsInTheList> myTable = new TableView<>(myObservableList);

您可以通过以下方式随意将 ListChangeListener 添加到任何 ObservableList:

myObservableList.addListener(new ListChangeListener<ClassOfObjectsInTheList>()

                @Override
                public void onChanged(javafx.collections.ListChangeListener.Change<? extends ClassOfObjectsInTheList> pChange) 
                    while(pChange.next()) 
                        // Do your changes here
                    
                
            );

【讨论】:

如果这是您要搜索的内容,您是否介意将答案投票为正确,以便其他寻求帮助的人一眼就能找到它? @omgBob:据我所知,这种方法不会对项目的内部变化做出反应。它仅在您添加和删除项目时才会做出反应。你有其他方法吗? @TrudleR:这取决于您要监控的项目。您可以实现docs.oracle.com/javase/8/javafx/api/javafx/beans/value/… 的任何子接口,并为每个项目添加一个侦听器。这样,项目的每一次更改都会被检测到,并且可以按照您想要的任何方式进行处理。 @omgBob 是的,我发现您可以使用“Extractors”来监听其他属性,这也会触发一个调用 itemList 的“onChange”的事件。 :)

以上是关于javafx tableview 检测任何行的任何更改,包括添加新行的主要内容,如果未能解决你的问题,请参考以下文章

如何将行和列添加到 JavaFX 8 TableView

JavaFX:如何在屏幕上的任何位置检测鼠标/键事件?

JavaFX布尔绑定和TableView绑定多个

JavaFX - 使 TableView 高度适应行数

Javafx PropertyValueFactory 未填充 Tableview

JavaFX 2 TableView:根据单元格内的数据不同的单元格工厂