Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中将热键链接到按钮?_Java_Swing_Hotkeys_Jradiobutton - Fatal编程技术网

如何在java中将热键链接到按钮?

如何在java中将热键链接到按钮?,java,swing,hotkeys,jradiobutton,Java,Swing,Hotkeys,Jradiobutton,我有四个单选按钮,它们都是放射组的一部分。如何将热键链接到每个按钮?我要做的是将“1”、“2”、“3”和“4”键链接到每个相应的单选按钮 buttonGroup1 = new javax.swing.ButtonGroup(); quizBut1 = new javax.swing.JRadioButton(); quizBut2 = new javax.swing.JRadioButton(); quizBut4 = new javax.swing.JRadioButton(); quizBu

我有四个单选按钮,它们都是放射组的一部分。如何将热键链接到每个按钮?我要做的是将“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();
使用-您可以将它们连接到Swing中的几乎任何组件

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

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

使用-您可以将它们连接到Swing中的任何组件

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

将KeyListener附加到一个容器上非常重要,该容器几乎一直都有keybaord焦点。在这种情况下,您不能将KeyListener附加到单选按钮本身,因为KeyListener只查看其具有焦点的事件。当一个KeyEvent没有被一个给定的对象吸收时,KeyEvent会被传递到它的父组件,以查看它是否想对该事件做任何事情,并一直传递到应用程序的窗口。如果没有KeyListener对该事件执行任何操作,并且您已经找到了组件层次结构的根,则不会对按键做出任何响应,并且该事件基本上被丢弃。

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

    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);
}
此外,您还可以使用和。一些粗略的片段,请修改它:

    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);
}

您也可以使用此方法

您也可以使用此方法

否,在Swing中keyListener是错误的方法(因为有更高的抽象可用)-使用keyBindings代替。否,在Swing中keyListener是错误的方法(因为有更高的抽象可用)-改为使用keyBindings