我正在编写一个基于Combobox
的复合组件来进行标记化自动完成。
基本思想是Combobox
向模型查询与当前文本匹配的项目,当用户从显示的选项中选择某些内容时,它会添加到另一个列表中以进行标记化表示。总的来说,它看起来像你在Facebook,Apple Mail和其他各个地方看到的输入。
我当前的问题似乎源于无法确定用户何时从列表中选择了某些内容,而不是仅使用光标键在列表中向上/向下导航。在下拉列表中导航选项列表时似乎会触发Combobox#onSelect
,而我真正需要的是在用户完成“我想要这个”操作时抓取选择的方法,通常按Enter键下拉列表中的选择,或使用鼠标在下拉列表中手动选择一个条目。
我迄今为止所做的最好的事情是监控Combobox#onOpen
,检查OpenEvent#isOpen
是否为假,然后手动检查模型以供选择。
是否有更好的方法来了解或检测“我想要这个”场景,并将其与“我希望第三个选项关闭时触发的onSelect
事件区分开来,这样我就会向下, DOWN,DOWN + ENTER“?
以下代码基本上就是我现在正在看的代码
public void onOpen$input(OpenEvent oe) {
logger.info("OpenEvent.isOpen: {}", oe.isOpen());
if (oe.isOpen() == false) {
ListModel model = this.input.getModel();
logger.info("model: {}", model);
if (model instanceof Selectable) {
logger.info("model is Selectable");
Set<?> selection = ((Selectable) model).getSelection();
logger.info("selection: {}", selection);
for (Object selected : selection) {
logger.info("selected: {}", selected);
if (selected instanceof Comboitem) {
logger.info("selected is Comboitem");
selected = ((Comboitem) selected).getValue();
logger.info("selected: {}", selected);
}
addToken(selected);
}
}
}
}
答案 0 :(得分:0)