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