微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有人可以帮助我了解ACCELERATOR_KEY在Java中如何工作吗?

如何解决有人可以帮助我了解ACCELERATOR_KEY在Java中如何工作吗?

我正在尝试了解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");
      }
    }

解决方法

如果我不得不猜测,似乎ACCELERATOR_KEY允许用户将键盘命令分配给某些东西

正确。

但是,如果您阅读Action API,则会看到ACCELERATOR_KEY仅用于扩展JMenuItem的组件(JMenu除外)。

如果您想使用“ A”作为KeyStroke来为Action调用JCheckBox,则需要使用Key Bindings来手动进行绑定使用复选框的InputMapActionMap

有关更多信息,请阅读How to Use Key Bindings上的Swing教程中的部分。

请注意,本教程在How to Use Menus上也有一节,该节中的演示代码演示了如何使用加速器。

您也可以尝试How to Use Actions部分。该演示中使用的动作同时被菜单项和按钮使用。您可以尝试在Action中添加加速器,以查看两个组件之间的区别。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。