2012-04-25 101 views
5

我有一个特殊的要求,关闭对话框。我希望确定按钮具有焦点,因此用户可以简单地调用对话框并按Enter键以创建具有默认值的新对象。我试过拨打电话requestFocusInWindow(),但直到实际显示窗口时才起作用。显示窗口后我无法调用它,因为对话框是模态的。对话框类没有像setInitialFocusedComponent()这样的方法。按Enter键

好吧,然后我开始为对话框中的每个字段创建一个KeyListener(只有其中的3个,没什么大不了的),如果用户按Enter键,手动按OK按钮。现在的问题是,第一个领域(因此聚焦的领域)是JSpinner,其消耗自己的KeyEvents。所以按下Enter键什么都不做。

如何在不重新组织元素的情况下在对话框中实现“Enter to OK”行为?

回答

8

两件事情:

  1. 您是否尝试过使用setDefaultButton?:dialog.getRootPane().setDefaultButton(okButton)
  2. 你可以考虑在invokeLater的调用你的requestFocusInWindow()。

像这样:

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

的setDefaultButton方法奏效了!谢谢。 – 2012-04-25 22:44:01

+1

+1,我喜欢这个答案,使用默认按钮有多容易:-)。只是Java Docs的一个附注 - “默认按钮功能的确切实现取决于外观和感觉,例如,在Windows的外观和感觉中,默认按钮更改为具有焦点的按钮,以便按下Enter按钮焦点按钮,当没有焦点时,最初指定为默认按钮的按钮再次成为默认按钮。“ – 2012-04-26 02:53:54