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

时间:2020-09-05 18:23:30

标签: java swing user-interface acceleratorkey

我正在尝试了解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 个答案:

答案 0 :(得分:1)

如果我不得不猜测,似乎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中添加加速器,以查看两个组件之间的区别。