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



我正在构建一个像记事本这样的文本编辑器程序。我想使FindDialog始终位于大型机之上,但用户仍然可以在大型机的JTextArea上编辑文本作为记事本。

请帮助我!!

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

编辑:方法setAlwaysOnTop((在所有窗口(包括浏览器,其他程序.(的顶部制作对话框,所以我不能使用它

我检测到我们可以使用 super(parent( 来实现这一点。

class MyDialog extends JDialog {
    public MyDialog(JFrame parent) {
        super(parent);
    }
    /* Other codes */
}

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

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

最新更新