使用Observer模式更新TableView

问题描述 投票:0回答:1

我正在编写一个JavaFX应用程序。我有一个TableView,包含数据库中的所有条目,填充如下:

public class AdvertisementListController {

    @FXML public TableView<Advertisement> advertisementTable;
    @FXML public TableColumn<Advertisement, String> dateColumn;
    @FXML public TableColumn<Advertisement, String> productColumn;
    @FXML public TableColumn<Advertisement, String> vendorColumn;
    @FXML public TableColumn<Advertisement, Integer> priceColumn;
    @FXML public TableColumn<Advertisement, Integer> quantityColumn;

    // ...

     public void initialize() {
        dateColumn.setCellValueFactory(new PropertyValueFactory<>("stringDate"));
        productColumn.setCellValueFactory(new PropertyValueFactory<>("productName"));
        vendorColumn.setCellValueFactory(new PropertyValueFactory<>("vendorId"));
        priceColumn.setCellValueFactory(new PropertyValueFactory<>("price"));
        quantityColumn.setCellValueFactory(new PropertyValueFactory<>("quantity"));

        // ...

        AdvertisementDAO advertisementDAO = new AdvertisementDAO();
        annunciTable.setItems(advertisementDAO.getAdvertisementObservableList());
    }

从我的应用程序的另一个窗口,我可以在数据库的表中插入新的条目。我是GoF模式的新手,我试图在这里实现一个Observer模式以保持表更新,但我真的不知道从哪里开始。这里的主题是什么?什么是Observer类?

java javafx observer-pattern
1个回答
2
投票

JavaFX是一个使用模型 - 视图 - 控制器(MVC)设计模式的框架。如果你做一些研究,你会发现MVC也使用了Observer设计模式。

JavaFX更进一步支持Observer设计模式。 JavaFX有Property的概念,它基本上是Observer设计模式。 Property对象保存该值,它可用于观察值的变化。 Property(和ObservableList等)的基本界面是Observable

因此,通过使用Property(在您的情况下ObservableList),您已经在使用Observer设计模式。

所以为了做到这一点,这些都是你需要的:

  1. 确保你的qazxsw poi类将qazxsw poi,qazxsw poi,AdvertisementstringDateproductName存储为vendorId
  2. 而不是通过pricequantity获得Property,将ObservableList移出,作为AdvertisementDAO的领域。每当数据发生变化时,您应该改变getAdvertisementObservableList()
  3. 根据其他窗口如何更改数据,您可能还需要使用ObservableList重载创建AdvertisementListController

例:

ObservableList
© www.soinside.com 2019 - 2024. All rights reserved.