java中的动作地图

java中的动作地图,java,swing,Java,Swing,是否有一种方法可以使用ActionMap查找在不按“F4”的情况下执行调用的动作XXXAction() 非常感谢 我可以提出两种可能的方法: 使用组件注册您的操作,例如JButton。这样,当您用鼠标手动单击按钮时,将调用操作 在类XXX上定义调用动作的方法invokeAction(),方法是通过键从ActionMap检索动作,或者保留对动作的显式实例变量引用并将其放置在ActionMap中 一般守则是: public class XXX { public static void ma

是否有一种方法可以使用ActionMap查找在不按“F4”的情况下执行调用的动作XXXAction()


非常感谢

我可以提出两种可能的方法:

  • 使用
    组件
    注册您的操作,例如
    JButton
    。这样,当您用鼠标手动单击按钮时,将调用
    操作
  • 在类
    XXX
    上定义调用动作的方法
    invokeAction()
    ,方法是通过键从
    ActionMap
    检索动作,或者保留对动作的显式实例变量引用并将其放置在
    ActionMap
  • 一般守则是:

    public class XXX 
    {
        public static void main(String args[]) {
            JComponent comp = new JTable(); // some panel or table
            comp.getInputMap().put(KeyStroke.getKeyStroke("F4"), "xxxaction");
            comp..getActionMap().put("xxxaction", new XXXAction());
        }
    
        public class XXXAction extends AbstractAction
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                 // Something;
            }
        }
    }
    

    您需要知道ActionEvent是否需要字符串值。

    但是。。有一件事。。ActionEvent(..)中的“命令字符串”是什么意思??现在,我给出了一个空字符串,事情似乎在运行。让它空着好吗?通常它是空的。但是,某些操作可能需要参数。例如,我认为编辑器工具包中的默认FontSize操作需要一个字符串,该字符串可以转换为整数值(8、10、12…)用作字体大小。如果要创建自定义操作,则可以控制是否需要字符串值。噢。。现在我明白了。。非常感谢。
    Action action = component.getActionMap().get("...");
    
    if (action != null)
    {
        ActionEvent ae = new ActionEvent(component, ActionEvent.ACTION_PERFORMED, "");
        action.actionPerformed( ae );
    }