JDialog: Как отключить клавишу ESC моего модального диалога? - PullRequest
2 голосов
/ 23 октября 2010

Итак, есть рамка (основное приложение).Отсюда я открываю модальный JDialog и запускаю фоновый поток, работающий во время отображения прогресса (записей журнала) в таблице.Этот процесс является критическим и должен , а не быть останавливаемым / скрываемым / закрываемым, поэтому кнопка закрытия диалога отключается до тех пор, пока все не будет завершено.Однако пользователь может в любое время нажать клавишу ESC, и мой onCanceled () вызывается, вызывая this.dispose ().

РЕДАКТИРОВАТЬ: я унаследовал этот проект и наблюдал, насколько глубокоКроличья дыра наследования прошла, таким образом, уже наблюдая за обработкой ESC, а затем e.consume (), поэтому мои решения не работали!

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Однако пользователь может в любой момент нажать клавишу ESC, и мой метод onCanceled () называется

Это звучит как пользовательский код, добавленный в приложение, так как большинство LAF по умолчанию не используют клавишу Escape. Поэтому я бы удалил пользовательский код.

Однако, если это поведение по умолчанию для вашего LAF, то правильным способом перехватить клавишу Escape является использование Key Bindings . В учебнике показано, как переопределить / удалить привязку.

2 голосов
/ 23 октября 2010

Вы должны игнорировать штрихи от клавиши ESC. Вы можете сделать это, прослушивая ключевые события из вашего диалога следующим образом (предположим, что переменная jDialog является вашим объектом диалога).

jDialog.addKeyListener(new KeyListener() {
    @Override
    public void keyPressed(KeyEvent e) {
        // Catch ESC key stroke.
        if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
            // TODO ignore or warn user here.
            // or call e.consume();
        }
    }

    // Other overriden methods here.
});
...