Есть ли элемент Swing, который имеет F6 в качестве ускорителя по умолчанию?

У меня есть приложение с панелью с вкладками и различными компонентами. Я установил 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 Element есть ускоритель по умолчанию, который имеет приоритет над моим ускорителем?


person Neifen    schedule 23.11.2011    source источник


Ответы (1)


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

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

splitPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
  .put(KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0), "none");
person Walter Laan    schedule 23.11.2011
comment
Кто-нибудь знает место, где можно найти все ускорители, используемые компонентами Swing. Может быть полезно - person Tony Chemit; 29.03.2017
comment
Обратите внимание, что JSplitPane также использует ускоритель F8. - person Tony Chemit; 22.12.2017
comment
Я прибыл сюда, потому что, как оказалось, JTextPane где-то ломал мой ускоритель Ctrl+T из строки меню. Код для исправления в моем конкретном случае был: textPane.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke('T', CTRL_DOWN_MASK), "Nothing"); - person Dennis Soemers; 01.07.2019