【问题标题】:Calling a function using key events使用按键事件调用函数
【发布时间】:2018-04-17 23:06:51
【问题描述】:

我是键事件的新手,正在尝试弄清楚按下空格键时如何调用函数。我为我正在尝试做的事情添加了一些伪代码。

public class scrap implements KeyListener {
  
    jump() {
        ///////////
        ///code////
        ///////////
    }
  
	   @Override
	   public void keyPressed(KeyEvent e) {
		      if(e == Space) {
            jump()
		      }
	   }

	   @Override
	   public void keyReleased(KeyEvent e) {
		      // TODO Auto-generated method stub
   	}

	   @Override
	   public void keyTyped(KeyEvent e) {
		      // TODO Auto-generated method stub
	   }
}

【问题讨论】:

标签: java


【解决方案1】:

你可以写一个 Key Listener:

public class KeyEventDemo ...  implements KeyListener ... {
...//where initialization occurs:
    typingArea = new JTextField(20);
    typingArea.addKeyListener(this);

    //Uncomment this if you wish to turn off focus
    //traversal.  The focus subsystem consumes
    //focus traversal keys, such as Tab and Shift Tab.
    //If you uncomment the following line of code, this
    //disables focus traversal and the Tab events 
    //become available to the key event listener.
    //typingArea.setFocusTraversalKeysEnabled(false);
...
/** Handle the key typed event from the text field. */
public void keyTyped(KeyEvent e) {
    displayInfo(e, "KEY TYPED: ");
}

/** Handle the key-pressed event from the text field. */
public void keyPressed(KeyEvent e) {
    displayInfo(e, "KEY PRESSED: ");
}

/** Handle the key-released event from the text field. */
public void keyReleased(KeyEvent e) {
    displayInfo(e, "KEY RELEASED: ");
}
...
private void displayInfo(KeyEvent e, String keyStatus){

    //You should only rely on the key char if the event
    //is a key typed event.
    int id = e.getID();
    String keyString;
    if (id == KeyEvent.KEY_TYPED) {
        char c = e.getKeyChar();
        keyString = "key character = '" + c + "'";
    } else {
        int keyCode = e.getKeyCode();
        keyString = "key code = " + keyCode
                + " ("
                + KeyEvent.getKeyText(keyCode)
                + ")";
    }

    int modifiersEx = e.getModifiersEx();
    String modString = "extended modifiers = " + modifiersEx;
    String tmpString = KeyEvent.getModifiersExText(modifiersEx);
    if (tmpString.length() > 0) {
        modString += " (" + tmpString + ")";
    } else {
        modString += " (no extended modifiers)";
    }

    String actionString = "action key? ";
    if (e.isActionKey()) {
        actionString += "YES";
    } else {
        actionString += "NO";
    }

    String locationString = "key location: ";
    int location = e.getKeyLocation();
    if (location == KeyEvent.KEY_LOCATION_STANDARD) {
        locationString += "standard";
    } else if (location == KeyEvent.KEY_LOCATION_LEFT) {
        locationString += "left";
    } else if (location == KeyEvent.KEY_LOCATION_RIGHT) {
        locationString += "right";
    } else if (location == KeyEvent.KEY_LOCATION_NUMPAD) {
        locationString += "numpad";
    } else { // (location == KeyEvent.KEY_LOCATION_UNKNOWN)
        locationString += "unknown";
    }

    ...//Display information about the KeyEvent...
  }
}

我发现这可能对你有帮助Complete Documentation

【讨论】:

    【解决方案2】:

    键盘上的每个键都有唯一的键码。所以你可以检查按下的键,如果等于32(空格键的键码)你可以调用该方法。

    像这样:

    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == 32){
            jump();
        }
    }
    public void jump(){
        System.out.println("Jump");
    }
    

    或者您可以通过VK_SPACE查看:

    if(e.getKeyCode() == KeyEvent.VK_SPACE){
        jump();
    }
    

    然后您可以向按钮添加操作,例如:

    scrap s = new scrap();
    buttonVar.addKeyListener(s);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2012-07-28
      相关资源
      最近更新 更多