Javafx ComboBox按排序顺序列出内容

时间:2014-07-01 13:47:49

标签: javafx javafx-8

我正在尝试按顺序排列ComboBox列表内容。我想出了一个解决方案,但它仍有一些问题。

final ObservableList<String> oal = FXCollections.observableArrayList();
final SimpleListProperty<String> slp =  new SimpleListProperty<String>(oal);
final SortedList<String> sl = new SortedList<String>(slp, (string1, string2) -> {
    return string1.compareTo(string2);
});

final ComboBox<String> comboBox = new ComboBox<String>();
comboBox.setItems(sl);

我可以为OAL或SLP添加值。

oal.addAll("cccc", "aaaa", "bbbb");
slp.addAll("ffff", "dddd", "eeee");

但如果我尝试向SL添加值,则会失败。

sl.addAll("iiii", "hhhh", "gggg");

Exception in thread "main" java.lang.UnsupportedOperationException

当然,任何向comboBox添加值的尝试也会失败。有没有人知道解决这个问题的方法,还是有一种完全不同的方法来对ComboBox的内容进行排序?

我感谢你们的任何帮助。

我正在使用Java 8u5。

2 个答案:

答案 0 :(得分:4)

您是否只能将项目添加到基础列表而不是排序列表?

final ObservableList<String> comboBoxItems = FXCollections.observableArrayList();
final ComboBox<String> comboBox = new ComboBox<String>();
comboBox.setItems(new SortedList<String>(comboBoxItems, Collator.getInstance()));

然后只需将项目添加到comboBoxItems

答案 1 :(得分:0)

我添加此作为答案,因为我没有足够的stackoverflow声誉来评论。 请注意,当使用SortedList而不是ObservableList时,当前(Java 8u92,可能之前)有一个错误JDK-8087838导致额外不需要的Combobox OnAction事件在向可编辑组合框添加项时触发。这个错误使得很难正确编码组合框事件,因此我建议在修复错误之前不要使用SortedList。另请参阅此stackoverflow问题。