【问题标题】:Close a dialog by pressing Enter按 Enter 关闭对话框
【发布时间】:2012-05-06 16:06:38
【问题描述】:

我有一个特殊的要求:

我有一个“创建新对象”模式对话框,其中包含许多字段和“确定”和“取消”按钮。我希望确定按钮具有焦点,因此用户可以简单地调用对话框并按 Enter 以创建具有默认值的新对象。我尝试调用requestFocusInWindow(),但在实际显示窗口之前它不起作用。显示窗口后我无法调用它,因为对话框是模态的。而且对话框类上没有setInitialFocusedComponent()这样的方法。

好的,然后我继续为对话框中的每个字段创建一个KeyListener(只有 3 个,没什么大不了的),如果用户在它们上按 Enter,它将手动按下 OK 按钮。现在的问题是第一个字段(因此也是焦点字段)是JSpinner,它使用自己的KeyEvents。所以按 Enter 没有任何作用。

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

【问题讨论】:

    标签: java swing dialog


    【解决方案1】:

    两件事:

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

    像这样:

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

    【讨论】:

    • +1,我喜欢这个答案,使用默认按钮有多简单 :-)。只是来自 Java Docs 的附注 - “默认按钮功能的确切实现取决于外观。例如,在 Windows 外观中,默认按钮会更改为具有焦点的任何按钮,因此按下 Enter 会单击焦点按钮。当没有按钮具有焦点时,您最初指定为默认按钮的按钮再次成为默认按钮。"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多