Сочетания клавиш JButton - PullRequest
       27

Сочетания клавиш JButton

2 голосов
/ 28 апреля 2010

У меня есть два JButton с, и я хотел бы разрешить их использование клавишами со стрелками на клавиатуре всякий раз, когда JFrame имеет фокус.

Кто-нибудь может указать мне правильное направление по этому поводу?

Ответы [ 3 ]

3 голосов
/ 28 апреля 2010

Модифицировано из Swing's Действие Демо.

Инициализация вашей кнопки:

// Sets the mnemonic to down, with no hint display
JButton down = new JButton(new DownAction("Down", null, "This is the down button", new Integer(KeyEvent.VK_DOWN));

Действие:

class DownAction extends AbstractAction {
    public DownAction(String text, ImageIcon icon,
                  String desc, Integer mnemonic) {
        super(text, icon);
        putValue(SHORT_DESCRIPTION, desc);
        putValue(MNEMONIC_KEY, mnemonic);
    }
    public void actionPerformed(ActionEvent e) {
        displayResult("Action for first button/menu item", e);
    }
}
2 голосов
/ 28 апреля 2010

Для перехвата клавиш (не беспокоясь, находится ли конкретный компонент в фокусе), вы должны использовать InputMap. Читайте, например:

http://java.sun.com/docs/books/tutorial/uiswing/misc/keybinding.html

И перейдите к константе WHEN_IN_FOCUSED_WINDOW.

Если рассматриваемая кнопка просто не вызывает единственный метод, лучший способ сделать "то, что когда-либо делает кнопка", это сделать:

SwingUtilities.invokeAndWait(new Runnable() {
    public void run() {
        ((AbstractButton) c).doClick();
    }
});
0 голосов
/ 28 апреля 2010

Ну, когда вы говорите, что хотите разрешить им использовать «клавиши со стрелками», я предполагаю, что вы хотите иметь возможность передавать фокус. Если это так, то прочитайте раздел из учебника по Swing на Как использовать подсистему Focus . Это дает пример того, как вы можете использовать клавишу Enter для этого.

...