【发布时间】:2012-08-13 19:35:21
【问题描述】:
这个 API 有什么用?
几个月前我采用了它,当时我的想法是,一旦用户做出选择,我就可以使用它来捕获 ComboBox 中的键盘和鼠标操作,从而调用业务逻辑。作为一名开发人员,我只使用鼠标,幸福地无知,认为我的解决方案很好,直到测试人员参与进来,并实际尝试使用带有键盘的组合框。似乎 itemStateChanged() 对更改项目状态的含义有一种非常违反直觉的(无论如何对我来说)感觉。
当使用鼠标时,用户可以使用鼠标在下拉列表上移动,下拉列表突出显示当前包含鼠标光标但不生成事件的组合框条目。该事件在用户实际单击某个项目时生成。这是非常直观的,也是我所期望的。
另一方面,对于键盘,每次按下向下箭头都会生成一个 itemStateChanged 事件。这是违反直觉的,不是我想要的。我只想在用户通过按下 Enter 键来表示他的选择时才生成一个事件,表明已经做出了选择 - 即鼠标点击的模拟,而不是鼠标移动的模拟。有没有办法让组合框以这种方式运行,或者我不能使用 itemStateChanged 来捕获这些事件?
我还应该补充一点,ItemEvent 本身不包含任何可以帮助我消除歧义的内容。
更新:好的,这是问题的核心:如何让 Swing 将向下箭头通过组合框的下拉列表视为等同于在下拉列表的元素中移动鼠标? ItemListener 和 ActionListener 都将箭头键操作视为“选择”而不是导航。而我希望键盘类似于鼠标。我们的要求是让一切都可以使用键盘。鼠标是一个很好的工具,有经验的用户不会使用这个应用程序。
【问题讨论】:
标签: java swing jcombobox itemlistener