gpt4 book ai didi

java - 使用 ObservableMap 填充并同步 ComboBox?

转载 作者:行者123 更新时间:2023-12-01 12:46:49 25 4
gpt4 key购买 nike

我使用单例作为 Employee 对象的虚假数据库。

在这个伪数据库中,有一个 ObservableMap,利用员工的社会安全号码作为其唯一 key 。

我有 ComboBox、TableView 和 ListView,我想用此数据库填充,并确保数据库中的任何更改都会反射(reflect)在这些 TableView、Listview 等中。

但是,组合框、电视和 LV 需要 ObservableArraylist,那么我该如何从 HashMap 中获取它呢?我可以通过迭代器手动提取值并将它们添加到新的 ObservableArraylist 中,但如果数据库中发生任何更改,我也必须手动调整 ObservableArraylist。我宁愿手动同步。

关于我应该做什么有什么想法吗?

编辑:

显然这有效(我必须非常具体。也不确定为什么我必须使用通配符而不是仅仅作为通用参数。

    employeeMap
.addListener((
MapChangeListener.Change<? extends Integer, ? extends Employee> listener) -> {
System.out.println("CHANGED");
});

最佳答案

这尚未经过测试,但请尝试以下操作:

ObservableMap<String, Employee> employeeMap = DataBase.getInstance().getEmployeeMap();
ListView<Employee> listView = new ListView<>();
listView.getItems().addAll(employeeMap.values());

employeeMap.addListener((Change change) -> {
if (change.wasAdded()) {
listView.getItems().add(change.getValueAdded());
} else if (change.wasRemoved()) {
listView.getItems().remove(change.getValueRemoved());
}
});

现在请注意,您只能修改 FX 应用程序线程上的 ObservableMap。如果您需要在不同的线程上修改它,则需要包装对 listView.getItems().add(...)listView.getItems().remove() 的调用。 ..)Platform.runLater(...)

关于java - 使用 ObservableMap 填充并同步 ComboBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24623205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com