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

Make a JDialog always on top of parent (JFrame) but user still can interact with parent

我正在开发一个像 NotePad 这样的文本编辑器程序。 我想让 FindDialog 始终位于 MainFrame 之上,但用户仍然可以像记事本一样在 MainFrame 中的 JTextArea 编辑文本。

请帮帮我!!!

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

编辑:方法 setAlwaysOnTop() 在所有 windows 之上创建对话框(包括浏览器、其他程序..)所以我不能使用它

支持(可以)多种模态类型。使用 JDialog.setModalityType 方法并选择相关的模态类型。有关详细信息,请在此处查看 javadoc:https://docs.oracle.com/javase/7/docs/api/java/awt/Dialog.html#setModalityType(java.awt.Dialog.ModalityType)

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

所以你可以试试:

setModalityType(Dialog.ModalityType.DOCUMENT_MODAL)

或者在您创建 JDialog 时传递模态

new JDialog(parent, "Title", Dialog.ModalityType.DOCUMENT_MODAL);

还有这个关于 Oracle 模态的有用教程: https://docs.oracle.com/javase/tutorial/uiswing/misc/modality.html

请注意,文档模式和应用程序模式之间存在细微差别。 选择适合您的情况。

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

class MyDialog extends JDialog {

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

    /* Other codes */

}