java - JFrame 在关闭 JOptionPane 后失去焦点并且无法将其设置回来

标签 java swing focus joptionpane

我有一个 JOptionPane,它显示带有 JTextField 的输入对话框。当此对话框关闭时,它返回插入的文本。

但是,当按下任何按钮(确认/取消)并关闭对话框时,主窗口将失去焦点,我无法再次对其进行设置。

String menuName = (String) JOptionPane.showInputDialog (
    new JFrame(), 
    "Insert new Menu Name"
);

当此对话框关闭时,如何将焦点设置在主窗口上?

最佳答案

您应该将父组件作为第一个参数传递,而不是您创建的随机新框架。

假设您从 JFrame 方法中启动它,您可以运行

String menuName = (String) JOptionPane.showInputDialog (
    this, // parent component is the JFrame you are launching this from
    "Insert new Menu Name"
);

在某些情况下,例如,当从 FocusListeneronLostFocus 实现运行此命令时,您需要在处理所有当前事件后运行此命令。这可以通过在事件队列末尾发布事件来完成。使用SwingUtilities.invokeLater要做到这一点。

因此,如果您遇到这种情况,请按如下方式启动对话框。假设您运行该框架的框架类名为 MyFrame:

SwingUtilities.invokeLater(new Runnable(){
    @Override
    public void run() {
        String menuName = (String) JOptionPane.showInputDialog (
            MyFrame.this, // parent component is the JFrame you are launching this from
            "Insert new Menu Name"
        );
        // do stuff with menuName
    }
});

关于java - JFrame 在关闭 JOptionPane 后失去焦点并且无法将其设置回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34674961/

相关文章:

java - 在 Swing 的 EDT 中实现线程?

java - 取消匿名SwingWorker

java - 两行代码之间的延迟 - 图形

java - 在 main 方法中访问变量

java - 为什么 Twitter 应用程序不共享动画 gif?

java - Mono#then 和 Mono#and 之间的区别?

java - 如何使用swing类Java绘制网格并在单击和拖动时检测鼠标位置

iOS画外音: Focus selected cell and not the first row

javascript - 输入字段在焦点后立即模糊

java - 单元格编辑器中组件内的焦点遍历