我有一个 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"
);
在某些情况下,例如,当从 FocusListener
的 onLostFocus
实现运行此命令时,您需要在处理所有当前事件后运行此命令。这可以通过在事件队列末尾发布事件来完成。使用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/