这是一个管理学生的应用程序,它有一个名为StudentsViewController的类,该类链接图形部分(StudentView)和有效地对ArrayListService)进行更改的功能。我将向您展示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());
    }

}


我的问题是:

如果我有一个包装了ObservableListArrayList和一个使用TableViewObservableList,为什么需要更新功能?

为什么我必须清除模型中的所有数据并在其中放置一个新数据?

最佳答案

经过更多研究,我找到了答案:


  public static <E> ObservableList<E> observableList(List<E> list)
  
  构造一个由指定列表支持的ObservableList
  ObservableList实例上的突变操作将是
  向已在该实例上注册的观察员报告。注意
  直接对基础列表进行的变异操作不是
  向观察者报告任何包裹它的ObservableList


因此,这意味着如果我对学生列表(即基础列表)进行更改,则不会通知表视图(即观察者),因此不会刷新自身。这就是为什么我需要更新功能,以将新列表包装到ObservableList操作中,该操作将通知观察者。

关于java - 初学者JavaFX观察者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40914815/

10-09 19:26