Как установить мнемонику для JTree / JList / JTable - PullRequest
1 голос
/ 26 февраля 2011

У них нет setMnemonic (), как у кнопок.

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

Хотя я не могу понять, как установить мнемонику для вышеуказанных компонентов.Существуют способы грубой форсировки навигации по клавиатуре, вкладки между элементами или ручная регистрация глобальных ускорителей.Но если бы мне пришлось пойти так далеко, я бы, по крайней мере, хотел бы высказать несколько мнений о наилучшей практике для этого.Я просто должен был расслабиться и закончить читать документы по этому вопросу.тогда это стало довольно просто.Вот окончательный результат для любого, кто выполняет поиск.

treeWidget                                     
  .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
  .put(KeyStroke.getKeyStroke(LIST_MN,InputEvent.ALT_DOWN_MASK), "focus_jtree");

treeWidget   
  .getActionMap()                        
  .put("focus_jtree", new AbstractAction() {
    @Override                    
    public void actionPerformed(ActionEvent event) {
      treeWidget.requestFocusInWindow();
  }});

Ответы [ 2 ]

3 голосов
/ 26 февраля 2011

См. Учебник по Swing в Как использовать привязки клавиш .

Но я не могу понять, как установить фокус на один из этих компонентов, используя только клавиатуруСобытия.

Не уверен, что вы подразумеваете под этим.Вы можете перейти на любой из этих компонентов.

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

Мое текущее решение -

JLabel jLabel = new JLabel("List");
  jLabel.setDisplayedMnemonic(LIST_MN);
  jLabel.setLabelFor(treeWidget);
  add(jLabel);
  add(treeWidget);

Кажется, что делает работу, но мои виджеты не всегда имеют ярлыки. Поэтому я просто добавляю ярлыки, чтобы дать им легкую мнемонику. И ярлыки часто не содержат мнемонический символ.

...