собственно код программы:
| Код | // MaskingEvents.java // Маскирование событий import java.awt.*; import javax.swing.*;
public class MaskingEvents extends JFrame { public MaskingEvents() { super("MaskingEvents"); // при закрытии окна - выход setDefaultCloseOperation(EXIT_ON_CLOSE); // отключим события от окна disableEvents(AWTEvent.WINDOW_EVENT_MASK); // добавим особую кнопку JPanel contents = new JPanel(); contents.add(new CustomButton("Привет!")); setContentPane(contents); // выведем окно на экран setSize(400, 300); setVisible(true); }
// особая кнопка class CustomButton extends JButton { public CustomButton(String label) { super(label); // отключаем события с клавиатуры disableEvents(AWTEvent.KEY_EVENT_MASK); } }
public static void main(String[] args) { new MaskingEvents(); } }
|
и цитата из книги:
| Цитата | Здесь мы создаем небольшое окно с рамкой J Frame и сразу же указываем ему, что при закрытии окна нужно будет завершить работу приложения. Когда мы вызываем для этого метод setDefaultQoseOperation(), он включает в маску события от окна, так что окно начинает проверять (в методе processWindowEventQ), когда пользователь закрывает его, чтобы завершить работу приложения. Но в на- шем примере все меняется: мы властно приказываем компоненту (методом disableEvents(), он нам доступен, потому что класс в примере унаследован от окна JFrame) исключить из маски события от окна, и после запуска примера вы убеди- тесь, что сколько бы вы ни пытались закрыть окно и выйти из приложения, сделать это вам не удастся, потому что события до окна не дойдут (придется за- вершать работу программы грубой силой, к примеру, нажав в консольном окне сочетание клавиш Ctrl+C).
|
Пишет, что окно не должно закрываться, а оно закрывается. Также благополучно отлавливаются другие оконные события, чего быть не должно. Как так получается? В случае с кнопкой всё гуд, тоесть ею нельзя управлять с клавиатуры.
Добавлено через 2 минуты и 5 секунд В цитате есть опечатки в силу слабости файнридера, но, думаю, вполне читабельно |