按Enter键关闭对话框

6
我有一个特殊的需求:
我有一个创建新对象的模态对话框,其中包含许多字段和“确定”和“取消”按钮。我希望“确定”按钮获得焦点,以便用户可以简单地调用对话框并按Enter键使用默认值创建新对象。我尝试调用requestFocusInWindow(),但直到窗口实际显示出来它才奏效。我无法在窗口显示后调用它,因为对话框是模态的。而且对话框类中没有像setInitialFocusedComponent()这样的方法。
好吧,那么我就为对话框中的每个字段创建一个KeyListener(只有3个,没什么大不了的),如果用户在这些字段上按Enter键,它将手动按下“确定”按钮。现在的问题是第一个字段(也就是聚焦的字段)是一个JSpinner,它会消耗自己的KeyEvents。因此,按Enter键没有任何反应。
如何在不重新组织元素的情况下实现对我的对话框的“Enter to OK”行为?
1个回答

9

两件事情:

  1. 你尝试使用了setDefaultButton吗?:dialog.getRootPane().setDefaultButton(okButton)
  2. 你可以考虑在invokeLater中调用requestFocusInWindow()。

像这样:

 SwingUtilities.invokeLater(new Runnable()
     @Override
     public void run() {
         okButton.requestFocusInWindow();
     }
 });

1
+1,我喜欢这个答案,使用默认按钮是多么容易啊 :-)。只是从Java文档中提醒一下 - “默认按钮功能的确切实现取决于外观和感觉。例如,在Windows外观和感觉中,默认按钮会更改为具有焦点的任何按钮,以便按Enter键单击具有焦点的按钮。当没有按钮获得焦点时,您最初指定为默认按钮的按钮将再次成为默认按钮。” - nIcE cOw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接