Javafx Combo Box数据填充

时间:2014-11-17 17:09:44

标签: java javafx javafx-2 javafx-8 fxml

我想在组合框中填充一些数据。这很好用。但是,我想要动态更改组合框中的数据。

目前我有一个表,在组合框中,我在表列中显示数据的唯一值。现在表数据存储在Static observable列表变量中。我想根据表中显示的数据更改组合框中的数据。也就是说,如果存储表数据的静态可观察列表发生变化,我想在不进行人工干预的情况下更改组合框数据。

这可能没有组合框的单独静态变量吗?

1 个答案:

答案 0 :(得分:0)

嗯,让我们看看,所以我们有你的TableView数据:

ObservableList<MyData> tableData = FXCollections.observableArrayList();

和您的ComboBox数据:

ObservableList<MyData> comboboxData = FXCollections.observableArrayList();

如果要将两者链接在一起,最简单的方法是使用FilteredList:

ObservableList<MyData> comboboxData = tableData.filtered(predicate);

因此,只要predicatetableData发生变化,这些变化就会反映在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);
});

当您的表包含大型数据集时,这很可能会导致性能问题,但对于较小的数据集,这应该很好。