使用键事件调用函数

时间:2017-06-03 04:53:57

标签: java

我是关键事件的新手,我正试图找出在按下空格键时如何调用函数。我为我想做的事包括了一些伪代码。



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
	   }
}




2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

键盘上的每个键都有唯一的键码。所以你可以检查按下的键,如果它等于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);