Как заменить Jbutton клавишей Escape в java?

В моей программе есть кнопка Jbutton (с именем «Очистить»), которая очищает несколько текстовых полей в графическом интерфейсе. Я хочу заменить эту кнопку клавишей Escape, чтобы нажатие клавиши Escape было таким же, как нажатие этой кнопки. (Я не хочу, чтобы эта Jbutton была в моей программе)


person user2723764    schedule 12.09.2013    source источник
comment
возможный дубликат Swing: как закрыть диалоговое окно при нажатии клавиши ESC?   -  person Maroun    schedule 12.09.2013


Ответы (3)


По сути, вы хотите начать с использования привязки клавиш.

Лично я бы привязал вашу кнопку "Очистить", чтобы у использования было два варианта... например...

JButton clear = new JButton("Clear");

InputMap im = clear .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap am = clear .getActionMap();

im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "clear");
am.put("clear", new ClearFieldsAction());
person MadProgrammer    schedule 12.09.2013

Если вы хотите удалить кнопку и слушать ключевые события для приложения отверстия, вы можете создать

EventQueue

и зарегистрируйте эту очередь событий в

Toolkit.getDefaultToolkit().getSystemEventQueue().push(INSTANCE_EVENT_QUEUE);

Метод

защищенная недействительная диспетчеризацияEvent (AWTEvent e)

получите AWTEvent, с которым вы можете справиться. Нравится:

@Override
protected void dispatchEvent(AWTEvent e) {
    // handle event and/or
    super.dispatchEvent(e);
}

Ключевое событие, которое вы обрабатываете как

    private void handleAWTEvent(AWTEvent event) {

    if (event instanceof KeyEvent) {
        KeyEvent keyEvent = (KeyEvent)event;

        if (keyEvent.getID() != KeyEvent.KEY_PRESSED) {
            return;
        }

        if (keyEvent.isAltDown() ^ keyEvent.isControlDown() && !keyEvent.isShiftDown()) {
   ...
person Markus Lausberg    schedule 12.09.2013

попробуй это, у меня работает

InputMap im = clear.getRootPane().getInputMap(...
ActionMap am = clear.getRootPane().getActionMap(...
person Ico    schedule 24.04.2020