我正在构建一个像记事本这样的文本编辑器程序。我想使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
请注意,文档和应用程序模式之间略有不同。为您的情况选择合适的一个。