2 Tasten Gleichzeitig regestrieren

TheSorm

Bekanntes Mitglied
also ich habe ein frame mit folgendem KeyEventDispatcher :

Java:
	private class KeyDispatcher implements KeyEventDispatcher {
		
		@Override
		public boolean dispatchKeyEvent(KeyEvent e) {
			
			System.out.println(e);
			
			if(e.getID() == KeyEvent.KEY_PRESSED) {
				
				if(e.getKeyCode() == 90 && e.getKeyCode() == 17) {
					System.out.println("ja");
					
				}
			}
				return false;
		}
	}

Ich will jetzt das wenn beide Tasten zusammengedrüclt werden der if block ausgelöst wirt aber klarerweiße kann e nicht beides gleichzeitig sein also wie mach ich das ?
 
Frage am Rande , warum kein switch wenn du schon mit der Id, also Integern arbeitest ? 🙂

hab es jetzt nicht probiert aber dann könntest du denke ich auch

folgenden case definieren

Java:
case 90 && 17:
  //Do your thing
break;
 
Zuletzt bearbeitet:
Moin,

es geht hier die Tastenkombination <Crtl><Z>, richtig?

Da könntest Du eine Accelerator setzen:
Java:
myButton.setAccelerator( javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK) );
Das geht aber natürlich nur in Verbindung mit den Tasten <CTRL>, <ALT> und <SHIFT> !!

Gruß
Klaus
 
Und wie macht man das für einen KeyListener? Also dann, wenn es nicht um einen Button, sondern um einen x-beliebigen anderen Befehl geht!
 
Das ist eine Methode mit array wo die einzelnen Tasten dann auf true gesetzt werden wenn sie gedrückt sind.

Java:
package Handlers;

import java.awt.event.KeyEvent;

// this class contains a boolean array of current and previous key states
// for the 10 keys that are used for this game.
// a key k is down when keyState[k] is true.

public class Keys {
  
  public static final int NUM_KEYS = 16;
  
  public static boolean keyState[] = new boolean[NUM_KEYS];
  public static boolean prevKeyState[] = new boolean[NUM_KEYS];
  
  public static int UP = 0;
  public static int LEFT = 1;
  public static int DOWN = 2;
  public static int RIGHT = 3;
  public static int BUTTON1 = 4;
  public static int BUTTON2 = 5;
  public static int BUTTON3 = 6;
  public static int BUTTON4 = 7;
  public static int ENTER = 8;
  public static int ESCAPE = 9;
  
  public static void keySet(int i, boolean b) {
    if(i == KeyEvent.VK_W) keyState[UP] = b;
    else if(i == KeyEvent.VK_A) keyState[LEFT] = b;
    else if(i == KeyEvent.VK_S) keyState[DOWN] = b;
    else if(i == KeyEvent.VK_D) keyState[RIGHT] = b;
    else if(i == KeyEvent.VK_SPACE) keyState[BUTTON1] = b;
    else if(i == KeyEvent.VK_SHIFT) keyState[BUTTON2] = b;
    else if(i == KeyEvent.VK_E) keyState[BUTTON3] = b;
    else if(i == KeyEvent.VK_F) keyState[BUTTON4] = b;
    else if(i == KeyEvent.VK_ENTER) keyState[ENTER] = b;
    else if(i == KeyEvent.VK_ESCAPE) keyState[ESCAPE] = b;
  }
  
  public static void update() {
    for(int i = 0; i < NUM_KEYS; i++) {
      prevKeyState[i] = keyState[i];
    }
  }
  
  public static boolean isPressed(int i) {
    return keyState[i] && !prevKeyState[i];
  }
  
  public static boolean anyKeyPress() {
    for(int i = 0; i < NUM_KEYS; i++) {
      if(keyState[i]) return true;
    }
    return false;
  }
  
}
 
Zuletzt bearbeitet:

Zurück
Oben