初学者JavaFX观察器

初学者JavaFX观察器,java,Java,它是一个管理学生的应用程序,它有一个名为StudentsViewController的类,该类链接图形部分(StudentView)和有效地在数组列表上进行更改的函数(服务)。我将向您展示我在JavaFX图形用户界面中不理解的部分: public class StudentViewController implements Observer<Student>{ private ObservableList<Student> model; private S

它是一个管理学生的应用程序,它有一个名为
StudentsViewController
的类,该类链接图形部分(StudentView)和有效地在
数组列表上进行更改的函数(服务
)。我将向您展示我在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());
    }

}
公共类StudentViewController实现了Observer{
私有可观察者模型;
私人学生观;
学生服务;
公共学生视图控制器(学生服务服务,学生视图){
这个视图=视图;
this.model=FXCollections.observearraylist(service.getAllStudents());
view.studTable.setItems(模型);
服务=服务;
}
@凌驾
公共无效更新(可观察){
学生服务s=(学生服务)可观察到;
model.setAll(s.getAllStudents());
}
}
我的问题是:

如果我有一个包装我的
ArrayList的
ObservableList
和一个使用
ObservableList的
TableView
,为什么我需要更新功能


为什么我必须从我的模型中清除所有数据,然后在那里放一个新的?

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

公共静态可观察列表可观察列表(列表)

构造一个由指定列表支持的
可观察列表。
observeList
实例上的变异操作将 向已登记该实例的观察员报告。注意 直接对基础列表执行的变异操作不受限制 向任何包装它的
可观察列表的观察者报告


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

经过进一步研究,我找到了答案:

公共静态可观察列表可观察列表(列表)

构造一个由指定列表支持的
可观察列表。
observeList
实例上的变异操作将 向已登记该实例的观察员报告。注意 直接对基础列表执行的变异操作不受限制 向任何包装它的
可观察列表的观察者报告


这意味着,如果我对学生列表(底层列表)进行更改,表视图将不会收到通知(即观察者),因此它不会刷新自身。这就是为什么我需要更新函数,将新列表包装到
observeList
,操作将通知观察者。

JavaFX甚至没有
observest
类。如果没有关于目的和目标的进一步信息,就很难说出这里要实现什么。即使有进一步的信息,我怀疑这将是一个难以回答的问题。在试图回答这个关于“应该如何做”的问题时,我发现我只是在模拟教程中使用的编程模式的本质。要更好地理解观察者在GUI架构中的使用,请参阅:。注意,JavaFX有一整套内置控件和类用于处理可观察属性,因此,这些通常直接使用,而不是像一些GUI架构示例和示例问题中的代码那样实现您自己的
Observer
风格的代码。有关没有提取器的observeList可能不足以监视列表中项的更改的相关信息,请参阅上的信息。您在示例中处理的列表没有定义提取器,因此这可能是
update
函数和其中的
setAll
调用的原因。尽管如此,我猜想作者试图将JavaFX属性与模型对象和服务分开(并不总是必要的),这可能是另一个原因。JavaFX甚至没有
Observer
类。如果没有关于目的和目标的进一步信息,就很难说出这里要实现什么。即使有进一步的信息,我怀疑这将是一个难以回答的问题。在试图回答这个关于“应该如何做”的问题时,我发现我只是在模拟教程中使用的编程模式的本质。要更好地理解观察者在GUI架构中的使用,请参阅:。注意,JavaFX有一整套内置控件和类用于处理可观察属性,因此,这些通常直接使用,而不是像一些GUI架构示例和示例问题中的代码那样实现您自己的
Observer
风格的代码。有关没有提取器的observeList可能不足以监视列表中项的更改的相关信息,请参阅上的信息。您在示例中处理的列表没有定义提取器,因此这可能是
update
函数和其中的
setAll
调用的原因。尽管如此,我的猜测是作者试图将JavaFX属性与模型对象和服务分开(并非总是必要的),因此这可能是另一个原因。