0

这个 API 有什么用?

几个月前我采用了它,当时我的想法是,一旦用户做出选择,我可以使用它来捕获 ComboBox 中的键盘和鼠标操作,以调用业务逻辑。作为一名开发人员,我只使用鼠标,幸福地无知,认为我的解决方案很好,直到测试人员参与进来,并实际尝试使用带有键盘的组合框。似乎 itemStateChanged() 对更改项目状态的含义有一种非常违反直觉的(无论如何对我来说)感觉。

当与鼠标一起使用时,用户可以使用鼠标在下拉列表上移动,下拉列表突出显示当前包含鼠标光标但不生成事件的组合框条目。该事件在用户实际单击某个项目时生成。这是非常直观的,也是我所期望的。

另一方面,使用键盘时,每次按下向下箭头都会生成一个 itemStateChanged 事件。这是违反直觉的,不是我想要的。我只想在用户通过按下 Enter 键来表明他的选择时才生成一个事件,表明已经做出了选择 - 即鼠标点击的模拟,而不是鼠标移动的模拟。有没有办法让组合框以这种方式运行,或者我不能使用 itemStateChanged 来捕获这些事件?

我还应该补充一点,ItemEvent 本身不包含任何可以帮助我消除歧义的内容。

更新:好的,这是问题的关键:如何让 Swing 将向下箭头通过组合框的下拉列表视为等同于在下拉列表的元素中移动鼠标?ItemListener 和 ActionListener 都将箭头键操作视为“选择”而不是导航。而我希望键盘类似于鼠标。我们的要求是让一切都与键盘一起工作。鼠标是一个不错的选择,这个应用程序的有经验的用户不会使用太多。

4

2 回答 2

1

当用户选择或取消选择项目时,将调用Javadoc 。 itemStateChanged(ItemEvent e)你看到的是完全相同的行为。使用箭头键,每按下一个键,您就可以有效地选择(同时取消选择)组合中的一个特定项目。

对于您的情况,我认为您应该考虑将您的业务逻辑作为JButton该服务器的一部分来实现,以确认用户选择,或者尝试FocusListenerJComboBox您的逻辑作为public void focusLost(FocusEvent e). 这是一个教程,可帮助您获得更好的图片FocusListener

于 2012-08-13T20:13:15.813 回答
0

JComboBox文档

aListener 会在选中项发生变化时收到一两个 ItemEvents

现在,我将第一个声明措辞有点轻,但这是说,当用户选择和项目(从下拉列表中)时,您将至少收到一次通知,可能两次。

你真正想要使用的是ActionListener

做出选择后,ActionListener 将收到一个 ActionEvent。如果组合框是可编辑的,那么当编辑停止时会触发一个 ActionEvent。

于 2012-08-13T20:07:39.320 回答