首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为按住的控制按钮生成KeyStroke

为按住的控制按钮生成KeyStroke
EN

Stack Overflow用户
提问于 2012-05-15 05:50:18
回答 1查看 1.5K关注 0票数 0

我在试着做键绑定。我想生成一个KeyStroke,它只在按住control键的情况下执行操作。我不知道我做错了什么我正在对我的其他键绑定(Control+up,Control+down,up,c,p和其他按钮)使用相同的技术,我尝试过使用CTRL_DOWN_MASK,CTRL_MASK,VK_CONTROL和"CONTROL“,但这些似乎都不起作用。我知道它不是我绑定它的方法,因为当我有另外两个键绑定到该操作(Control+Z)时,它才能工作,但我只想把它绑定到(Control)。这是我正在使用的代码。如果可以的话,请帮助我。

代码语言:javascript
复制
InputMap imap = leftPanel.getInputMap(mapName);
KeyStroke leftArrowKey = KeyStroke.getKeyStroke("LEFT");
imap.put(leftArrowKey, "left");
KeyStroke rightArrowKey = KeyStroke.getKeyStroke("RIGHT");
imap.put(rightArrowKey, "right");
KeyStroke upArrowKey = KeyStroke.getKeyStroke("UP");
imap.put(upArrowKey, "up");
KeyStroke cKey = KeyStroke.getKeyStroke('c');
imap.put(cKey, "c");
KeyStroke spaceKey = KeyStroke.getKeyStroke("SPACE");
imap.put(spaceKey, "space");
KeyStroke zoomInKeys = KeyStroke.getKeyStroke(VK_DOWN, CTRL_DOWN_MASK);
imap.put(zoomInKeys, "zoomin");
KeyStroke zoomOutKeys = KeyStroke.getKeyStroke(VK_UP, CTRL_DOWN_MASK);
imap.put(zoomOutKeys, "zoomout");
KeyStroke panKeys = KeyStroke.getKeyStroke("CONTROL");
imap.put(panKeys, "pan");

ActionMap amap = leftPanel.getActionMap();
amap.put("left", moveLeft);
amap.put("right", moveRight);
amap.put("up", increaseSpeed);
amap.put("c", changePaddleMode);
amap.put("space", nextBall);
amap.put("zoomin", zoomIn);
amap.put("zoomout", zoomOut);
amap.put("pan", pan);

这个问题出现在最后一个KeyStroke (panKeys)中,我不知道应该在getKeyStroke()方法中放入什么,才能使它对按下的控制键做出响应。

EN

回答 1

Stack Overflow用户

发布于 2012-05-15 06:09:40

这似乎对我很有效:

代码语言:javascript
复制
public static void main(String[] args) {

  JLabel label = new JLabel("Foo");
  int condition = JLabel.WHEN_IN_FOCUSED_WINDOW;
  InputMap inputmap = label.getInputMap(condition);
  ActionMap actionmap = label.getActionMap();

  // first to test that this works.
  final String xKeyPressed = "x key pressed";
  inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_X, 0), xKeyPressed );
  actionmap.put(xKeyPressed, new AbstractAction() {

     @Override
     public void actionPerformed(ActionEvent arg0) {
        System.out.println(xKeyPressed);
     }
  });

  // Next to try it with just the control key
  final String controlKeyPressed = "control key pressed";
  inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_CONTROL, 
          KeyEvent.CTRL_DOWN_MASK), controlKeyPressed );
  actionmap.put(controlKeyPressed, new AbstractAction() {

     @Override
     public void actionPerformed(ActionEvent arg0) {
        System.out.println(controlKeyPressed);
     }
  });
  JOptionPane.showMessageDialog(null, label);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10591566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档