KeyListener reagiert nicht? Wieso?

BeKos

Grünschnabel
Hallo!

Ich versuche mich gerade wieder in Java einzuarbeiten und hänge gerade beim Event Management. Ich habe ein Frame geöffnet, welches mir die Bildschirmgröße anzeigt, und dies soll sich beim drücken von Escape wieder schliessen. Tut es aber nicht, es bleibt einfach offen und ich kriege es gar nicht mehr weg. Hier ist der Code:


Code:
public class ScrnSize extends Window implements KeyListener {
	
	public ScrnSize() {
		super(new Frame());
		setBackground(Color.black);
		setLocation(new Point(0,0));
		setSize(getToolkit().getScreenSize());
		setVisible(true);
		this.addKeyListener(this);
	}
	
	public void paint(Graphics g) {
		g.setColor(Color.red);
		g.drawString("Die Bildschirmgroesse beträgt"+getSize().width+"*"+getSize().height,10,20);
		g.drawString("Escape Drücken zum beenden!",10,40);
		
	}
	
	public void keyPressed(KeyEvent event) {
		if (event.getKeyCode() == KeyEvent.VK_ESCAPE) {
			this.setVisible(false);
			this.dispose();
			System.exit(0);
		} 
	}

	/* (non-Javadoc)
	 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
	 */
	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}

	/* (non-Javadoc)
	 * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
	 */
	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}
}
Habe wirklich keinerlei erklärung, und bin für jede Hilfe dankbar.

Gruß
BeKos
 
Zuletzt bearbeitet:
hmmm... wahrscheinlich unterliege ich da wieder einem Verständnissproblem. Ich dachte, dass die keyPressed Methde ausgeführt wird sobald der Benutzer irgendeine Taste drückt. Dabei wird der Keycode generiert und wenn er mit dem von Escape übereinstimmt sollte abgebrochen werden. So zumindest die Theorie, aber irgendwie scheint er den KeyListener einfach zu ignorieren, obwohl er ja geadded wurde.
 
Ich habe dein Programm mal ausgeführt und nen bisschen rumprobiert. Bei mir wurde erst nichts angezeigt, deswegen habe ich einfach mal, weil ich es so gewohnt bin die Superklasse auf JFrame geändert und schon hat es funktioniert. Sieht dann so aus:

Code:
public class ScrnSize extends JFrame implements KeyListener {
    
    public ScrnSize() {
        super("KeyListenerTest");
.......
 
Zuletzt bearbeitet:
Ich habe dein Programm mal ausgeführt und nen bisschen rumprobiert. Bei mir wurde erst nichts angezeigt, deswegen habe ich einfach mal, weil ich es so gewohnt bin die Superklasse auf JFrame geändert und schon hat es funktioniert. Sieht dann so aus:

Code:
public class ScrnSize extends JFrame implements KeyListener {
    
    public ScrnSize() {
        super("KeyListenerTest");
.......

Danke!

Funktioniert einwandfrei mit dem JFrame. Ich habe ja mittlerweile auch verstanden, dass wenn ich das Testprogramm als Window laufen lassen will und nicht als Frame, dass ich dann den Focus auf dieses Fenster richten muss. Habe ich auch getan:

Code:
.......   
this.requestFocus()
.......

aber das scheint nicht zu klappen. In der Java API habe ich dazu auch nur die Aussage gefunden dass es in manchen Fällen einfach nicht möglich ist einem Window den Focus zu geben. Warum auch immer mit Frame funktioniert es ja. Geht es denn andersherum, dass ich bei nem Frame die Titelleiste nicht anzeigen lasse, also es quasi als Window "verkleide" ?
 
Zuletzt bearbeitet:
Zurück