Есть ли элемент Swing с F6 в качестве ускорителя по умолчанию? - PullRequest
7 голосов
/ 23 ноября 2011

У меня есть приложение с панелью с вкладками и различными компонентами.Я установил MenuItem как Действие с Ускорителем:

private final Action focusDefaultCommandsAction = new AbstractAction()
{
    {
        putValue(NAME, "Fokusiere Kommandoliste");
        putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0));
    }

    @Override
    public void actionPerformed(final ActionEvent e)
    {
        invokeShowCommandsList();
    }
};

Я знаю, что есть одна вкладка, где Ускоритель для клавиши F6 не работает.клавиша F7 работает.

Возможно, на элементе Swing есть ускоритель по умолчанию, который имеет приоритет над моим ускорителем?

1 Ответ

10 голосов
/ 23 ноября 2011

Вы можете найти это в BasicLookAndFeel.java (или подобном классе в зависимости от используемого вами L & F), поиск по F6.

Похоже, что F6 используется JSplitPane для переключения фокуса между контентом и разделителями. Чтобы удалить его, вы можете использовать что-то вроде (не проверено, я думаю, что удалить фактическое действие сложнее, потому что это может быть в родительской карте ввода):

splitPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
  .put(KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0), "none");
...