1

我有四个单选按钮,它们都是 radioGroup 的一部分。如何将热键链接到每个按钮?我想要做的是将键“1”、“2”、“3”和“4”链接到每个相应的单选按钮。

buttonGroup1 = new javax.swing.ButtonGroup();
quizBut1 = new javax.swing.JRadioButton();
quizBut2 = new javax.swing.JRadioButton();
quizBut4 = new javax.swing.JRadioButton();
quizBut3 = new javax.swing.JRadioButton();
4

3 回答 3

4

使用KeyListener - 您可以将它们附加到 Swing 中的任何组件。

您可能要做的是将 KeyListener 附加到应用程序中的主 JFrame 以捕获所有按键,然后根据按下的键,您将相应地触发 UI 中的更改(例如,选择给定的单选按钮)。

将 KeyListener 附加到几乎始终具有键盘焦点的容器非常重要。在这种情况下,您不能将 KeyListener 附加到单选按钮本身,因为 KeyListener 只能看到它们关注的事件。当给定对象没有吸收 KeyEvent 时,然后将 KeyEvent 传递给其父组件,以查看它是否要对事件执行任何操作,并一直持续到应用程序的窗口。如果没有 KeyListener 对事件执行任何操作,并且您一直到组件层次结构的根,那么响应按键没有任何反应,并且事件基本上被丢弃。

于 2012-09-08T14:18:01.797 回答
3

同样,您可以使用ActionMapKeyStroke。一些粗略的片段,修改它:

    class KeyAction extends AbstractAction {
        JRadioButton b;
        KeyAction(JRadioButton b) {
            super();
            this.b = b;
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            b.setSelected(true);
        }
    }

    b1.setAction(new KeyAction(b1));
    b2.setAction(new KeyAction(b2));
    b3.setAction(new KeyAction(b3));

    bindHotkey('1', "1", b1.getAction());
    bindHotkey('2', "2", b2.getAction());
    bindHotkey('3', "3", b3.getAction());
            ..............

void bindHotkey(char keyChar, String name, Action action) {
    KeyStroke ks = KeyStroke.getKeyStroke(keyChar);
    container.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ks, name);
    container.getActionMap().put(name, action);
}
于 2012-09-08T14:52:01.687 回答
0

您也可以使用它 http://pastebin.com/UvkjD0g5

于 2012-09-08T15:03:31.537 回答