Передача нажатий клавиш ускорения в главное меню на Java - PullRequest
1 голос
/ 16 февраля 2011

Я добавил несколько ускорителей в главное меню, используя MenuItem.setAccelerator ().Просто базовые вещи, такие как Ctrl-C для копирования и т. Д.

Это работает нормально.Но приложение немного похоже на IDE, оно имеет несколько панелей, содержащих JTables.Если ячейка таблицы имеет фокус, она поглощает клавишу ускорения, что означает, что главное меню ее никогда не видит.

Ясно, что если редактируемая ячейка таблицы активна, я бы хотел, чтобы клавиши вырезать и вставить работали нормально, нов любом другом случае я бы хотел, чтобы ответило главное меню.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

KeyStrokes переходят к компоненту, который имеет фокус в первую очередь. Поскольку JTable связывает Ctrl + C с действием, это действие вызывается.

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

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

1 голос
/ 16 февраля 2011

Спасибо, это привело меня на правильный путь.

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

Однако добавление этого в саму таблицу работало нормально:

    component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK), "copy");
    component.getActionMap().put("copy", actions.copyAction);

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

...