我有四个单选按钮,它们都是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();
答案 0 :(得分:4)
使用KeyListener - 您可以将它们附加到Swing中的任何组件。
您可能要做的是将KeyListener附加到应用程序中的主JFrame以捕获所有按键,然后根据按下的键,您将相应地触发UI中的更改(例如,选择给定的无线电按钮)。
将KeyListener附加到几乎始终具有keybaord焦点的容器非常重要。在这种情况下,您不能将KeyListener附加到单选按钮本身,因为KeyListeners只能看到它们具有焦点的事件。当KeyEvent没有被给定对象吸收时,KeyEvent随后被传递给它的父组件,以查看它是否想要对事件做任何事情,并且一直到应用程序的窗口。如果没有KeyListener对事件执行任何操作,并且您已经一直到组件层次结构的根目录,那么响应按键时没有任何反应,事件基本上被丢弃。
答案 1 :(得分:3)
同样,您可以使用ActionMap和KeyStroke。一些粗略的片段,修改它:
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);
}
答案 2 :(得分:0)