Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按Enter键关闭对话框_Java_Swing_Dialog - Fatal编程技术网

Java 按Enter键关闭对话框

Java 按Enter键关闭对话框,java,swing,dialog,Java,Swing,Dialog,我有一个特别的要求: 我有一个“创建新对象模式”对话框,其中有许多字段和按钮“确定”和“取消”。我希望OK按钮具有焦点,这样用户只需调用对话框并按Enter键即可创建具有默认值的新对象。我尝试调用requestFocusInWindow(),但在实际显示窗口之前,这是行不通的。我不能在窗口显示后调用它,因为对话框是模态的。对话框类上没有类似于setInitialFocusedComponent()的方法 好的,然后我继续为对话框中的每个字段创建一个KeyListener(只有3个字段,没什么大不

我有一个特别的要求:

我有一个“创建新对象模式”对话框,其中有许多字段和按钮“确定”和“取消”。我希望OK按钮具有焦点,这样用户只需调用对话框并按Enter键即可创建具有默认值的新对象。我尝试调用
requestFocusInWindow()
,但在实际显示窗口之前,这是行不通的。我不能在窗口显示后调用它,因为对话框是模态的。对话框类上没有类似于
setInitialFocusedComponent()的方法

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

如何在不重新组织元素的情况下实现对话框中的“回车确认”行为?

两件事:

  • 您是否尝试过使用setDefaultButton?:
    dialog.getRootPane().setDefaultButton(okButton)
  • <>你可以考虑在一个调用器中调用你的ReopestCopyWin()。 像这样:

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

    +1,我喜欢这个答案,默认按钮有多简单:-)。只是Java文档中的一个旁注-“默认按钮功能的确切实现取决于外观。例如,在Windows外观中,默认按钮将更改为具有焦点的按钮,以便按Enter键单击焦点按钮。当没有按钮具有焦点时,最初指定为默认按钮的按钮将再次成为默认按钮。“