使JDialog始终位于父级(JFrame)的顶部,但用户仍可以与父级交互

时间:2019-06-20 05:01:23

标签: java swing jframe jdialog

我正在构建诸如NotePad之类的文本编辑器程序。 我想使FindDialog始终位于MainFrame的顶部,但用户仍然可以将NoteFrame中MainFrame的JTextArea上的文本进行编辑。

请帮助我!

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

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

2 个答案:

答案 0 :(得分:1)

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

class MyDialog extends JDialog {

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

    /* Other codes */

}

答案 1 :(得分:0)

(可以)支持多种模式类型。使用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

请注意,“文档”和“应用程序”模式之间略有不同。 选择适合您的情况的