我正在尝试按顺序排列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。
答案 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问题。