Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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 如何仅关闭JDialog并使JFrame仍然可用_Java_Swing_Jframe_Jpanel_Jdialog - Fatal编程技术网

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工作得很好!