Java 如何仅关闭JDialog并使JFrame仍然可用
我有一个Java 如何仅关闭JDialog并使JFrame仍然可用,java,swing,jframe,jpanel,jdialog,Java,Swing,Jframe,Jpanel,Jdialog,我有一个JFrame和一个JPanel。单击面板中的某个按钮时,会出现一个JDialog(名为choiceDialog)。当我单击对话框上的某个特定按钮时,我只希望它关闭 我希望对话框关闭,框架可用。可能吗 我试图用setVisible(false)隐藏对话框,但它同时隐藏了对话框和框架。然后我尝试执行choiceDialog.dispose(),但我再次丢失了这两个元素。在这一点上,我找到了一种方法,设置帧再次可见,但不可用 有人能帮我吗?我真的不知道该怎么办 以下是相关代码: if (dim
JFrame
和一个JPanel
。单击面板中的某个按钮时,会出现一个JDialog
(名为choiceDialog
)。当我单击对话框上的某个特定按钮时,我只希望它关闭
我希望对话框关闭,框架可用。可能吗
我试图用setVisible(false)
隐藏对话框,但它同时隐藏了对话框和框架。然后我尝试执行choiceDialog.dispose()
,但我再次丢失了这两个元素。在这一点上,我找到了一种方法,设置帧再次可见,但不可用
有人能帮我吗?我真的不知道该怎么办
以下是相关代码:
if (dimField.isEnabled()){
String dimFieldText = dimField.getText();
if (dimFieldText.equals("") || !isNumeric(dimFieldText)){ //if there's an error when filling the options in the JDialog
errorLabel = new JLabel(noDim, SwingConstants.CENTER);
/*other stuff
...
*/
}else{ //if it's all ok: I want the JDialog close but the JFrame to be usable
JFrame topFrame = (JFrame) SwingUtilities.getWindowAncestor(this); //to catch the JFrame istance
choiceDialog.dispose();
topFrame.setVisible(true); //to make the JFrame visible again
//choiceDialog.setVisible(false);
}
您将topFrame设置为按钮的窗口祖先,即对话框本身。您需要获取对话框的窗口祖先。假设在创建对话框时,您将主框架指定为其父框架,而不是使用无参数JDialog构造函数。
topFrame.setVisible(true)//要使JFrame再次可见
为什么将顶部框架设置为不可见?我将使对话框成为模态,并将框架指定为父对象。这样,用户可以看到框架,但在对话框关闭之前不会与其交互。一般提示:为了更快地获得更好的帮助,可以添加or。我看到您添加了“感兴趣的代码”(大多数人称之为“相关代码”),但MRE/SSCCE更有用。创建一个只需要20-40行代码。@andrewhompson是的,我的意思是“相关代码”。第二件事:我已经将对话框设置为模态(在我设置JDialog的方法中)。如何将帧指定为父帧?我只找到了getParent()方法。@AndrewThompson这是我用来设置JDialog的代码:public void setChoiceDialog(String currentFile){choiceDialog=new JDialog();choiceDialog.setTitle(“Impostazioni”);choiceDialog.setVisible(true);choiceDialog.setModal(true);choiceDialog.setLocationRelativeTo(null);choiceDialog.setLayout(新的GridLayout(0,4));choiceDialog.pack();}
@AndrewThompson我找到了问题所在。它是setModal()属性。我刚刚删除了它,现在JDialog工作得很好!谢谢你的建议。我将在下一个问题中利用它们。现在我在方法中声明了topFrame来设置JDialog,并将其作为JDialog构造函数的参数。我要做的是选择Dialog.getParent()代码>?我找到了问题所在。它是setModal()属性。我刚刚删除了它,现在JDialog工作得很好!