0

我试图了解如何使用 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");
      }
    }
4

1 回答 1

1

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

正确的。

但是,如果您阅读ActionAPI,您会发现ACCELERATOR_KEY仅用于扩展的组件JMenuItem(JMenu 除外)。

如果您想使用 "A" 作为 aKeyStroke来为 调用 an ActionJCheckBox那么您需要使用复选框的andKey Bindings手动进行绑定。InputMapActionMap

阅读 Swing 教程中有关如何使用键绑定的部分以获取更多信息。

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

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

于 2020-09-05T19:23:46.603 回答