gpt4 book ai didi

java - 如何访问 Java 键绑定(bind)中定义的操作名称?

转载 作者:行者123 更新时间:2023-12-01 11:24:02 24 4
gpt4 key购买 nike

这段代码对我来说效果很好,可以通过如下调用使按键绑定(bind)更加愉快:

import java.awt.event.ActionEvent;
import javax.swing.*;
import static javax.swing.KeyStroke.getKeyStroke;

public abstract class KeyBoundButton extends JButton{

public abstract void action(ActionEvent e);

public KeyBoundButton(String actionMapKey, int key, int mask)
{
Action myAction = new AbstractAction()
{
@Override public void actionPerformed(ActionEvent e)
{
action(e);
}
};

setAction(myAction);

getInputMap(WHEN_IN_FOCUSED_WINDOW)
.put(getKeyStroke(key, mask),actionMapKey);
getActionMap().put( actionMapKey, myAction);

}
}

典型调用:

button = new KeyBoundButton("WHATEVER", VK_X, CTRL_DOWN_MASK) 
{
@Override
public void action(ActionEvent e)
{
JOptionPane.showMessageDialog(null,"Ctrl-X was pressed");
}
};

但是我不知道如何在程序的其他地方智能地或以其他方式使用操作名称,WHATEVER。 (除了文档之外,我看不出它有任何用途。)

我想知道 button.getActionCommand() 但它返回 null,即使我在 action(e) 之后插入此行类定义:

    setActionCommand(actionMapKey);

如何在程序中的某个位置访问操作名称?

最佳答案

您必须将 setActionCommand(actionMapKey); 放在构造函数内的 setAction 之后,而不是执行的操作内。然后您可以使用 getActionCommand( 访问该值)

 public KeyBoundButton(String actionMapKey, int key, int mask)
{
Action myAction = new AbstractAction()
{
@Override public void actionPerformed(ActionEvent e)
{
action(e);
}
};

setAction(myAction);
setActionCommand(actionMapKey);//like this
System.out.println(getActionCommand());
getInputMap(WHEN_IN_FOCUSED_WINDOW)
.put(getKeyStroke(key, mask),actionMapKey);
getActionMap().put( actionMapKey, myAction);

}

关于java - 如何访问 Java 键绑定(bind)中定义的操作名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30967709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com