Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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_Jdialog - Fatal编程技术网

Java 使JDialog始终位于父级(JFrame)之上,但用户仍然可以与父级交互

Java 使JDialog始终位于父级(JFrame)之上,但用户仍然可以与父级交互,java,swing,jframe,jdialog,Java,Swing,Jframe,Jdialog,我正在开发一个文本编辑器程序,比如记事本。 我想让FindDialog始终位于大型机之上,但用户仍然可以在大型机的JTextArea中编辑文本作为记事本 请帮帮我 我使用了方法jdialog.setModal(true)。它使对话框始终位于父级的顶部,但用户无法编辑父级的文本 编辑:方法setAlwaysOnTop()在所有窗口(包括浏览器、其他程序..)顶部创建对话框,因此我无法使用它支持各种模态类型。使用JDialog.setModalityType方法并选择相关的模态类型。有关更多信息,请

我正在开发一个文本编辑器程序,比如记事本。 我想让FindDialog始终位于大型机之上,但用户仍然可以在大型机的JTextArea中编辑文本作为记事本

请帮帮我

我使用了方法jdialog.setModal(true)。它使对话框始终位于父级的顶部,但用户无法编辑父级的文本


编辑:方法setAlwaysOnTop()在所有窗口(包括浏览器、其他程序..)顶部创建对话框,因此我无法使用它

支持各种模态类型。使用
JDialog.setModalityType
方法并选择相关的模态类型。有关更多信息,请查看此处的javadoc:

顺便说一句,调用
setModal(true)
相当于
setModalityType(Dialog.ModalityType.MODELESS)
。在这种情况下,用户可以编辑父项

因此,您可以尝试:

setModalityType(Dialog.ModalityType.DOCUMENT_MODAL)
或者在您创建JDialog时,传递模态

new JDialog(parent, "Title", Dialog.ModalityType.DOCUMENT_MODAL);
还有一个关于Oracle的模态的有用教程:

请注意,文档模式和应用程序模式之间有细微的区别。
根据您的情况选择合适的解决方案。

我发现我们可以使用super(家长)来实现这一点

class MyDialog extends JDialog {

    public MyDialog(JFrame parent) {
        super(parent);
    }

    /* Other codes */

}

SetAlwaysOnTopMake对话框位于所有窗口(包括浏览器、其他程序…)之上,因此我无法使用iti。我尝试了您的建议,但结果与使用setModal相同(true)。我的建议基本上是使用设置器或通过JDialog的构造函数设置模态类型。不使用setModal。