这是一个管理学生的应用程序,它有一个名为StudentsViewController
的类,该类链接图形部分(StudentView
)和有效地对ArrayList
(Service
)进行更改的功能。我将向您展示JavaFX图形用户界面中我不了解的部分:
public class StudentViewController implements Observer<Student>{
private ObservableList<Student> model;
private StudentView view;
StudentService service;
public StudentViewController(StudentService service, StudentView view){
this.view=view;
this.model= FXCollections.observableArrayList(service.getAllStudents());
view.studTable.setItems(model);
this.service=service;
}
@Override
public void update(Observable<Student> observable) {
StudentService s=(StudentService)observable;
model.setAll(s.getAllStudents());
}
}
我的问题是:
如果我有一个包装了
ObservableList
的ArrayList
和一个使用TableView
的ObservableList
,为什么需要更新功能?为什么我必须清除模型中的所有数据并在其中放置一个新数据?
最佳答案
经过更多研究,我找到了答案:
public static <E> ObservableList<E> observableList(List<E> list)
构造一个由指定列表支持的ObservableList
。
ObservableList
实例上的突变操作将是
向已在该实例上注册的观察员报告。注意
直接对基础列表进行的变异操作不是
向观察者报告任何包裹它的ObservableList
。
因此,这意味着如果我对学生列表(即基础列表)进行更改,则不会通知表视图(即观察者),因此不会刷新自身。这就是为什么我需要更新功能,以将新列表包装到ObservableList
操作中,该操作将通知观察者。
关于java - 初学者JavaFX观察者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40914815/