KeyListener geht nicht

Maxim6394

Bekanntes Mitglied
ich hab das schon einige male gemacht aber ich hab keine ahnung wieso es jetzt nicht geht. hier ist der code:
Code:
	protected Timer timer=new Timer(5,this);

	public Board()
	{
		Level=new Level();
		addKeyListener(new TAdapter());
                addMouseListener(new myMouseListener());
		timer.start();
	}


	private class TAdapter extends KeyAdapter
	{
		
		public void keyPressed(KeyEvent e)
		{
			System.out.println("keypressed");
			Level.Player.keyPressed(e);
		}
		public void keyReleased(KeyEvent e)
		{	System.out.println("keypressed");
			Level.Player.keyReleased(e);
		}
		
		public void keyTyped(KeyEvent e)
		{
			System.out.println("keypressed");
		}
		
		
	}

private class myMouseListener extends MouseAdapter
	{
		public void mouseClicked(MouseEvent e)
		{
			System.out.println("keypressed");
			//player.mouseClicked(e,playerRotation);
			
			
		}
		
		public void mousePressed(MouseEvent e)
		{
			
		}
		public void mouseReleased(MouseEvent e)
		{
			
		}
		
	}

auf einen mausklick reagiert das programm, auf tastendruck überhaupt nicht. ich weis nicht was ich falsch gemacht hab, hat jemand eine idee?
 
Was ist die Klasse? Evtl. im Konstruktor
setFocussable(true);
aufrufen und am Anfang einmal reinklicken (oder programmatisch schauen, dass man das mit requestFocusInWindow oder so hinkriegt)
 
Damit der KeyListener reagiert, muss die Komponente zu dem Zeitpunkt auch den Fokus besitzen. Eventuell sind da noch andere Komponenten auf dem GUI die den Fokus für sich beanspruchen?
 
egal welche taste ich drücke, es müsste etwas ausgegeben werden bei keyPressed. wird es aber nicht.

Ich mache es so

Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;

public class ListenerKeyboard extends JFrame {
	private static final long serialVersionUID = 1L;

class Listener implements KeyListener{
	@Override
	public void keyPressed(KeyEvent e) {
	}

	@Override
	public void keyReleased(KeyEvent e) {		
	}

	@Override
	public void keyTyped(KeyEvent e) {
		System.out.print(e.getKeyChar());
	}	
}

//Konstruktor
ListenerKeyboard(String titel){
	super(titel);
	Listener Listener=new Listener();
	addKeyListener(Listener);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setSize(300, 300);
	setVisible(true);
}
	
	public static void main(String[] args) {
		new ListenerKeyboard("ListenerKeyboard");		
	}
}

so lange das Programm laeuft und du auf die Tasten haust, spukt es dies in der Konsole aus
 
Zuletzt bearbeitet:
Wenn der Listener für den komplette JFrame gelten soll, dann wäre eher ein Fall für Key Bindings.
 
Wenn der Listener für den komplette JFrame gelten soll, dann wäre eher ein Fall für Key Bindings.

Der Listener geht wenn das Programm laeuft, JFrame ist nur ein Beispiel, ist somit ein lokaler KeyListener, global geht es nicht bei Java so viel ich weiss, nur mit Umbau von C++ Programm etc. wurde hier mal besprochen im Forum
 
Nein, der KeyListener geht nur wenn die Komponente der der KeyListener zugewiesen wurde den Fokus hat, in deinem Beispiel also der JFrame.
Mit Key Bindings kann man das besser steuern.
 
Man muss z.B. nicht darauf achten, dass eine bestimmte Komponente den Fokus hat. Man kann in einem aus mehreren fokussierbaren Komponenten bestehenden GUI Tastenkürzel verwenden, die generell reagieren, unabhängig wo der Fokus gerade liegt. Wie z.B in Office Dokumenten STRG+O, STRG+S usw.
 
Man muss z.B. nicht darauf achten, dass eine bestimmte Komponente den Fokus hat. Man kann in einem aus mehreren fokussierbaren Komponenten bestehenden GUI Tastenkürzel verwenden, die generell reagieren, unabhängig wo der Fokus gerade liegt. Wie z.B in Office Dokumenten STRG+O, STRG+S usw.

Und wenn der Fokus das Java-Programm verlaesst z.B. auf's Notpad, Firefox, Opera, was dann, ist es dann aus mit KeyListener, oder wird es auch dann aufgezeichnet?:bahnhof::bahnhof:
 
Key Bindings? Kenn ich noch gar nicht... 😳
Bisher gestalten sich meine GUIs so, dass ich jeder Komponente einen globalen KeyListener hinzufüge (eigentlich alles andere als sauber). Dieser KeyListener speichert diverse Keycodes in einem Boolean-Array und stellt nach aussen hin Methoden zur Verfügung, mit denen Tasten auf steigende (pressed) und fallende (released) Flanken sowie auf halten (down) abgefragt werden können. Diese Abfragen können während EDT (z.B. per FocusListener) oder in anderen Threads erfolgen.
 
Key Bindings? Kenn ich noch gar nicht... 😳
Bisher gestalten sich meine GUIs so, dass ich jeder Komponente einen globalen KeyListener hinzufüge (eigentlich alles andere als sauber). Dieser KeyListener speichert diverse Keycodes in einem Boolean-Array und stellt nach aussen hin Methoden zur Verfügung, mit denen Tasten auf steigende (pressed) und fallende (released) Flanken sowie auf halten (down) abgefragt werden können. Diese Abfragen können während EDT (z.B. per FocusListener) oder in anderen Threads erfolgen.

..einen globalen KeyListener ? Ein globaler KeyListener ist doch wenn z.B. dein Java-Programm aktiviert hast und dann das Fenster wechselst in ein anderes Programm wie Notepad, Opera etc. und was du dort eintippst, wird dann quasie in deinem Java-Programm aufgezeichnet, das geht bei dir? Kannst uns deinen Quelltext bitte posten wie es genau aussieht?:bahnhof: Oder ist es top secret? :bahnhof:
 
Sobald das Java Programm nicht mehr im Vordergrund läuft, bekommt man mit Java Mitteln nichts mehr von der Tastatur mit.
Sorry, ist bei mir genau so. Bei mir ist' lediglich egal, welche Java-Component den Fokus hat - sagen wir halt anwendungsglobal. Ist in anderen Programmen (MS-Office, Notepad usw.) ja nicht anders.
 

Neue Themen


Zurück
Oben