这个API有什么用?

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

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

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

我还要补充一点,ItemEvent本身不包含任何有助于我消除这种情况的歧义。

更新:好的,这是问题的小结:如何使Swing将组合框的下拉列表中的向下箭头当作将鼠标移至下拉列表中的元素一样? ItemListener和ActionListener都将箭头键动作视为“选择”,而不是导航。而我希望键盘类似于鼠标。我们的要求是使一切都可以与键盘一起使用。鼠标很好用,该应用程序的有经验的用户不会使用太多。

最佳答案

根据Javadoc itemStateChanged(ItemEvent e),当用户选择或取消选择某个项目时,将调用该Here's a tutorial JButton。您所看到的是完全相同的行为。使用箭头键,对于每个被按下的键,您可以从组合中有效地选择(并且同时取消选择)一个特定项。

对于您的情况,我认为您应该考虑将业务逻辑作为服务器存储的FocusListener的一部分,以确认用户选择,或者尝试在JComboBox上包含public void focusLost(FocusEvent e)并将逻辑作为。 帮助您更好地了解FocusListener

10-06 12:42