这段代码非常适合我通过以下调用来使键绑定更加愉快:
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);
密钥名称的目的是什么?我是否应该在程序中的某个地方使用它而不是定义键绑定?
答案 0 :(得分:1)
如果您只有一个事件监听器,则使用密钥名称。
一般:
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中的实际Object名称。