2015-07-21 109 views
0

我的TableView没有更新,我需要一个侦听器吗? (M是我的模型)JavaFX 8更新新的数据添加后的TableView

@FXML 
private TableView<Mitarbeiter> mitarbeiter; 

ObservableList<Mitarbeiter> data = 
       FXCollections.observableArrayList(m.getMitarbeiterListe() 
       ); 

mitarbeiter.setItems(data); 

public ArrayList getMitarbeiterListe(){ 
    return mitarbeiterliste; 
} 

在一个新的阶段,我在我的模型

m.addMitarbeiterToList(mitarbeiter) 

public void addMitarbeiterToList(Mitarbeiter mitarbeiter){ 
    mitarbeiterliste.add(mitarbeiter); 
} 

但在TableView中其他阶段添加一些Mitarbeiter到列表没有更新的新数据。 最后,ObservableList是否不指向模型中的ArrayList?

+0

我猜我有点困惑,在任何时候都有数据显示在桌面上?如果是这样,我感到有点惊讶,因为没有列定义的表。查看本教程以获取关于表视图以及它们如何与tableColumns进行交互的更多信息:http://code.makery.ch/library/javafx-8-tutorial/part2/ – WillBD

+0

我把它剪掉了,表中有列和表格工作正常。当我更改模型中现有数据的值时,TableView正在更新值,但是当我在模型中向ArrayList添加新数据时,TableView不显示新添加的数据 – Garog

+0

啊,好吧,我想我看到了混淆。根据这里的文档:https://docs.oracle.com/javafx/2/api/javafx/collections/FXCollections.html底层列表的变化不报告给包装可观察列表。相反,您必须对可观察列表本身执行操作,而不是基础数据结构 – WillBD

回答

2

代替添加项目的至mitarbeiterliste(这是一个ArrayList,并且是不可观察),将它们添加到data,其是ObservableList保持为表中的项目。 TableView观察此列表,并在列表内容更改时自动更新视图。

你的代码片段的背景不是很清楚,但你会做类似

public ArrayList getMitarbeiterListe(){ 
    return data; 
} 

或代替

mitarbeiterliste.add(mitarbeiter); 

data.add(mitarbeiter); 
+0

hm,好吧,为什么当我更改ArrayList中存在的元素的值时,TableView会更新? – Garog

+0

当我看到评论的时候,你看起来像是看出了这一点。为了完整性:“ObservableList”是一个*包装*,用于添加通知的基础'ArrayList'。因此,这两个列表都指向相同的元素集合,但对“ObservableList”所做的更改将通知任何观察者,包括“TableView”。如果你改变了底层的'ArrayList',那么数据会发生变化,但是'TableView'可能不知道它必须重绘。如果你改变'ObservableList',你改变了相同的数据,但它也会通知'TableView'数据已经改变了。 –