有人可以帮助我了解 ACCELERATOR_KEY 在 Java 中的工作原理吗?
Posted
技术标签:
【中文标题】有人可以帮助我了解 ACCELERATOR_KEY 在 Java 中的工作原理吗?【英文标题】:Could someone help me understand how the ACCELERATOR_KEY works in Java? 【发布时间】:2020-09-05 18:23:30 【问题描述】:我正在尝试了解 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");
【问题讨论】:
【参考方案1】:如果我不得不猜测的话,ACCELERATOR_KEY 似乎允许用户将键盘命令分配给某物
正确。
但是,如果您阅读Action
API,您会发现ACCELERATOR_KEY
仅用于扩展JMenuItem
的组件(JMenu 除外)。
如果您想使用“A”作为KeyStroke
来为JCheckBox
调用Action
,那么您需要使用Key Bindings
通过使用InputMap
和@987654330 手动进行绑定复选框的@。
阅读 How to Use Key Bindings 上的 Swing 教程部分了解更多信息。
请注意,本教程还有一个关于 How to Use Menus
的部分,该部分中的演示代码演示了如何使用加速器。
您也可以尝试How to Use Actions
部分。该演示中使用的操作由菜单项和按钮使用。您可以尝试在 Action 中添加一个加速器,看看这两个组件之间的区别。
【讨论】:
很高兴它有帮助。不要忘记通过单击复选标记(答案旁边)来“接受”答案,这样人们就知道问题已经解决了。以上是关于有人可以帮助我了解 ACCELERATOR_KEY 在 Java 中的工作原理吗?的主要内容,如果未能解决你的问题,请参考以下文章