KeyListener funktioniert nicht in einem JWindow

Hallo zusammen,

ich habe eine KeyListener-Klasse, der auf bestimmte Tastaturereignisse im Programmfenster reagieren soll:

Code:
	private class TastaturListener implements KeyListener
	{
		public void keyTyped(KeyEvent arg0){}
		public void keyReleased(KeyEvent arg0){}

		public void keyPressed(KeyEvent arg0)
		{
			if(arg0.getKeyCode() == KeyEvent.VK_ESCAPE)
			{
				// mach was sinnvolles
			}

		}
	}

Wenn ich ein solches TastaturListener-Objekt mit
Code:
addKeyListener(new TastaturListener());
meinem JFrame zuweise, funktioniert alles, d.h. bei Druck auf die Escape-Taste wird das Ereignis ausgelöst.

Wenn ich das gleiche Listener-Objekt aber einem JWindow (bzw. dessen ContentPane bzw. GlassPane bzw. RootPane bzw. LayeredPane - hab alles durchprobiert) zuweise, passiert nichts.

Wie muss ich's anstellen, dass mein JWindow Tastaturereignisse fängt? Einfach JFrame zu benutzen ist in meinem Fall nicht möglich, weil die ganze Sache bildschirmfüllend sein soll.

Danke schonmal!

der Henning
 
Zuletzt bearbeitet:
Hallo,

Wie muss ich's anstellen, dass mein JWindow Tastaturereignisse fängt? Einfach JFrame zu benutzen ist in meinem Fall nicht möglich, weil die ganze Sache bildschirmfüllend sein soll.
Das kannst du auch mit einem JFrame -> setUndecorated(true). Dann schauts aus wie ein JWindow reagiert aber so wie ein JFrame.

Gruß Tom
 
Moin!
Ein JWindow allein ist nicht fokussierbar. Steht auch in der API doku drin:
public JWindow(JFrame owner):
Creates a window with the specified owner frame. If owner is null, the shared owner will be used and this window will not be focusable. Also, this window will not be focusable unless its owner is showing on the screen.
Da du ja wohl kein zusätzliches JFrame nutzen willst, musst du es so machen, wie Tom es vorgeschlagen hat...

*grüssle*
MeinerEiner
 
Du kannst doch auch wie Thomas schon sagte Bildschirmfüllend machen, und dies sogar auf zwei Weisen.
Erstens das sog. Undecorated full-screen JFrame, also ein JFrame auf Bildschirmgröße setzten:
Code:
 frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());

oder ein FullScreenExclusive Mode, der ist aber nicht überall verfügbar, hängt irgendwie von der Grafikkarte und dem OS ab.
Code:
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
setUndecorated(true); 
if (!gd.isFullScreenSupported()) {
  System.out.println("Geht net");
  System.exit(0);
}
gd.setFullScreenWindow(frame);

Mfg bigboombang
 
Zurück