Сделать JDialog всегда поверх родительского (JFrame), но пользователь все еще может взаимодействовать с родительским - PullRequest
0 голосов
/ 20 июня 2019

Я работаю над созданием программы текстового редактора, такой как NotePad.Я хочу сделать FindDialog всегда поверх MainFrame, но пользователь по-прежнему может редактировать текст в JTextArea в MainFrame как NotePad.

Пожалуйста, помогите мне !!!

Я использовал метод jdialog.setModal (правда).Это делает диалог всегда поверх родительского, но пользователь не может редактировать текст в родительском.

Редактировать: метод setAlwaysOnTop () создает диалог поверх всех окон (включая браузеры, другие программы ..), поэтому я могуНе используйте это

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Я обнаружил, что мы можем использовать super (parent) для достижения этой цели.

class MyDialog extends JDialog {

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

    /* Other codes */

}
0 голосов
/ 20 июня 2019

Существуют различные типы модальностей (которые могут поддерживаться).Используйте метод 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

Обратите внимание, что существует небольшая разница между модалом Document и Application.Выберите подходящий для вашего случая.

...