使 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 */
}
我正在开发一个像 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 */
}