我正在尝试了解ACCELERATOR_KEY的用法和用途。我在网上找到了一个代码示例,说明了如何使用它,但是当我运行代码时,似乎什么也没发生。
如果我不得不猜测ACCELERATOR_KEY似乎允许用户将键盘命令分配给某些内容,但是在此示例中,当我按“ A”键时,什么也没发生。任何想法或解释将不胜感激!谢谢!
// w w w . java 2 s .c o m
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
public class Main {
public static void main(String[] a) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Action action = new ShowAction();
JCheckBox button = new JCheckBox(action);
frame.add(button, BorderLayout.CENTER);
frame.setSize(350, 150);
frame.setVisible(true);
}
}
class ShowAction extends AbstractAction {
public ShowAction() {
super("About");
putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("A"));
putValue(Action.NAME, "Go to number ");
}
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("About Swing");
}
}
答案 0 :(得分:1)
如果我不得不猜测,似乎ACCELERATOR_KEY允许用户将键盘命令分配给某些东西
正确。
但是,如果您阅读Action
API,则会看到ACCELERATOR_KEY
仅用于扩展JMenuItem
的组件(JMenu除外)。
如果您想使用“ A”作为KeyStroke
来为Action
调用JCheckBox
,则需要使用Key Bindings
来手动进行绑定使用复选框的InputMap
和ActionMap
。
有关更多信息,请阅读How to Use Key Bindings上的Swing教程中的部分。
请注意,本教程在How to Use Menus
上也有一节,该节中的演示代码演示了如何使用加速器。
您也可以尝试How to Use Actions
部分。该演示中使用的动作同时被菜单项和按钮使用。您可以尝试在Action中添加加速器,以查看两个组件之间的区别。