繁体   English   中英

如何在按键绑定中使用按键名称?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM