java - 如何将参数传递给 KeyBinding 中的 AbstractAction?

标签 java swing key-bindings action-mapping

我有以下键绑定(bind):

    InputMap iMap = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    ActionMap aMap = component.getActionMap();
    
    iMap.put(KeyStroke.getKeyStroke("shift LEFT"), "MOVE_LONG_LEFT");
    iMap.put(KeyStroke.getKeyStroke("LEFT"), "MOVE_LEFT");
    aMap.put("MOVE_LONG_LEFT", moveLeft);   // I WANT moveLeft TO RECEIVE 10 AS PARAMETER
    aMap.put("MOVE_LEFT", moveLeft);        // I WANT moveLeft TO RECEIVE 1 AS PARAMETER

我想在 ActionMap 中向 moveLeft 添加一个参数,例如(伪代码):

aMap.put("MOVE_LONG_LEFT", moveLeft, 10);
aMap.put("MOVE_LEFT", moveLeft, 1);

...

Action moveLeft = new AbstractAction(int steps) {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("moved Left " + steps + " steps");
    }
};

是否可以在 KeyBindings 中传递参数?

最佳答案

How do I pass an arguments to an AbstractAction

将您的 Action 创建为内部类,然后您可以将参数保存为类的实例变量中:

class MoveAction extends AbstractAction 
{
    private int steps;

    public MoveAction(int steps)
    {
        this.steps = steps;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("moved Left " + steps + " steps");
    }
};

然后你使用这样的类:

aMap.put("MOVE_LONG_LEFT", new MoveAction(10)); 
aMap.put("MOVE_LEFT", new MoveAction(1));  

参见; Motion Using the KeyboardMotionWithKeyBindings 示例演示了这种方法。

关于java - 如何将参数传递给 KeyBinding 中的 AbstractAction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65052866/

相关文章:

java - 在 Spring 中将属性文件中的所有键和值作为 Map 注入(inject)

java - 正则表达式删除除关键字周围和引号之间的所有空格

java - 按下箭头时按键绑定(bind)没有响应

java - MySql 连接器 j 允许用户变量

java - 创建一个简单的加密程序

java - 如何在 JButton 上的较大 imageIcon 上设置较小的 ImageIcon ?虽然我希望两个图像都可见

java - 将行插入 JTable 时出现重复值

java - 如何为 JButton 指定首选大小?

vim - 在 gVim 上使用 Alt-Space 组合键

java - 使用 Alt 键设置绑定(bind) - Java