有人可以帮助我了解 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 似乎允许用户将键盘命令分配给某物

正确。

但是,如果您阅读ActionAPI,您会发现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 中的工作原理吗?的主要内容,如果未能解决你的问题,请参考以下文章

Opencv 代码 - 有人可以帮我理解代码在做啥吗

了解浮点问题

是否有任何实用程序可以帮助我重构 CSS [关闭]

PHP5中的高级OOP?

帮助弹出菜单

Tkinter - 了解如何切换帧