我想在组合框中填充一些数据。这很好用。但是,我想要动态更改组合框中的数据。
目前我有一个表,在组合框中,我在表列中显示数据的唯一值。现在表数据存储在Static observable列表变量中。我想根据表中显示的数据更改组合框中的数据。也就是说,如果存储表数据的静态可观察列表发生变化,我想在不进行人工干预的情况下更改组合框数据。
这可能没有组合框的单独静态变量吗?
答案 0 :(得分:0)
嗯,让我们看看,所以我们有你的TableView数据:
ObservableList<MyData> tableData = FXCollections.observableArrayList();
和您的ComboBox数据:
ObservableList<MyData> comboboxData = FXCollections.observableArrayList();
如果要将两者链接在一起,最简单的方法是使用FilteredList:
ObservableList<MyData> comboboxData = tableData.filtered(predicate);
因此,只要predicate
或tableData
发生变化,这些变化就会反映在comboboxData
中,而无需进一步操作。您现在只需要编写一个能够过滤表数据的Predicate,只留下您想要显示的组合框条目。
但是,如果您想在ComboBox中仅显示tableData
的不同值,使用简单的谓词就不会那么容易。
这是一个非常丑陋的方法,使用Listener和Set来更新ComboBox列表:
ObservableList<String> tableData = FXCollections.observableArrayList();
ObservableList<String> comboBoxData = FXCollections.observableArrayList();
tableData.addListener((Observable change) -> {
Set<String> distinct = new HashSet<>(tableData);
comboBoxData.setAll(distinct);
});
当您的表包含大型数据集时,这很可能会导致性能问题,但对于较小的数据集,这应该很好。