[英]How do I use key name in key bindings?
这段代码对我来说非常有效,可以通过以下调用使键绑定更加令人愉悦:
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);
密钥名称的目的是什么? 除了定义键绑定之外,我是否应该在程序中的其他地方使用它?
如果您只有一个事件侦听器,则使用键名。
通常:
setOnKeyListener(new OnKeyListener(){
void onKeyPressed(KeyEvent k){
if(k.getKey() == KeyEvent.VK_ENTER)
//Handle ENTER key
if(k.getKey() == KeyEvent.VK_ESCAPE)
//Handle ESC key
}
);
这段代码是从我的记忆中写入的,可能不是Java API中的实际对象名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.