数据视图(TableView/ListView/TreeView)通过监听其ObservableList中的项(items)的变化来更新视图.当项发生变化时, 这些视图才得以更新. 这里的变化是指项的增删, 但项的内容(如某个字段)在外部发生变化, 这些视图并不会自动更新.
以下是两种动态更新数据视图的方法:
//最简单的方法是通过改变视图的items强制更新数据视图(TableView/ListView/TreeView). 如在items中增加并删除一个项(item)或复制items并添加到视图中.
//这里以TableView为例
public void reflashTable(){
table.getItems().add(new Item());//方法1.1
// table.getItems().setAll(table.getItems());//方法1.2
}
//方法二:
//如果Item的内容变化是可监听的(即当内容发生变化时能够向所有监听者派发变化事件).
//这里需要自定义一个CellFactory, 该CellFactory在返回一个自定义的Cell--CustomCell,CustomCell监听Item内容的变化(不是Items),然后更新Cell.
//如果Item的属性是可observable的(即由javafx.beans.Observable子类实现的),那么这些属性就可以作为事件源来派发事件(通过javafx.beans.ObservableaddListener()方法).