我正在使用以下代码填充来自 ZK Java 的组合框项
combo.setModel(new ListModelArray(this.reasons));
combo.setSelectedItem(combo.getItems().get(2));
combo.setSelectedIndex(3);//tried this as well.
它抛出的两个案例
java.lang.IndexOutOfBoundsException: Index: 5, Size: 0
at org.zkoss.zk.ui.AbstractComponent$ChildIter.<init>(AbstractComponent.java:3267) ~[zk-8.0.2.1.jar:3.6.4]
at org.zkoss.zk.ui.AbstractComponent$ChildIter.<init>(AbstractComponent.java:3259) ~[zk-8.0.2.1.jar:3.6.4]
at org.zkoss.zk.ui.AbstractComponent$Children.listIterator(AbstractComponent.java:217) ~[zk-8.0.2.1.jar:3.6.4]
任何输入?
使用模型时,请直接将选择设置为模型。组合项不会急切地呈现,但一旦呈现,它们就会反映当前 ListModel 的状态。
保留对模型的引用:
ListModelArray<String> reasonsModel = new ListModelArray<>(this.reasons);
combo.setModel(reasonsModel);
reasonsModel.addToSelection(this.reasons[2]);
。或从组合框中获取它:
ListModelArray<String> reasonsModel = new ListModelArray<>(this.reasons);
combo.setModel(reasonsModel);
...
((Selectable<String>) combo.getModel()).addToSelection(this.reasons[2]);
要从模型中获取当前选择(可能未选择任何内容(,请执行以下操作:
Optional<String> selected = reasonsModel.getSelection().stream().findAny();