我正在尝试理解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");
}
}发布于 2020-09-06 03:23:47
如果我一定要猜的话,ACCELERATOR_KEY似乎允许用户将键盘命令分配给某些东西
对,是这样。
但是,如果您阅读了Action应用程序接口,您将看到ACCELERATOR_KEY仅用于扩展JMenuItem的组件(JMenu除外)。
如果要使用"A“作为KeyStroke来调用JCheckBox的Action,则需要使用Key Bindings通过复选框的InputMap和ActionMap手动执行绑定。
有关更多信息,请阅读How to Use Key Bindings上的Swing教程中的部分。
注本教程还有一个关于How to Use Menus的部分,该部分中的演示代码演示了如何使用加速器。
您也可以尝试How to Use Actions部分。该演示中使用的操作由菜单项和按钮使用。您可以尝试在Action中添加一个加速器,以查看两个组件之间的差异。
https://stackoverflow.com/questions/63757206
复制相似问题