keyListener will nicht hören
-
Hi!
Ich habe eine Anwendung, die aus mehreren JComponents besteht, von denen eine das Interface KeyListener implementiert. Diese Komponente soll bitte eine bestimmte Ausgebe hervorufen, wenn die Taste 'A' auf der Tastatur gedrückt wird. Aber leider funktioniert das nicht so, wie ich mir das wünsche: obwohl ich die mehtode public void keyPressed(KeyEvent keyE) überschrieben habe (und die gewünschte Ausgabe darin mache), bekomme ich keine Ausgabe
Kann es sein, dass ein KeyListener nur bei Textfeldern usw funktioniert?Bitte helft mir!
-
haste auch der komponente den keylistener hinzugefügt??
wenn nicht das geht folgendermaßen:
component.addKeyListener( "klasse mit dem keylistener interface" );
-
Ja, hab ich. Der JFrame, der die JComponents beinhaltet (und selber kein KeyListener ist), enthält folgendes:
keyListeningJComponent.addKeyListener(keyListeningJComponent)
wobei keyListeningJComponent diejenige von JComponent abgeleitete Klasse ist, die das keyListener Interface implementiert.
Danke schonmal!
-
hm im prinzip haste alles richtig gemacht...
aber eins verstehe ich nicht, für was benutzt du jcomponents?
was hast du damit vor?
-
hm im prinzip haste alles richtig gemacht...
Sag das mal meinem Programm...
Ich benutz die JComponents um einen besseren Überblick über meine Anwendung zu behalten, die aus mehreren Komponenten besteht. Jede Komponente hat eine bestimmte Funktion (Steuerung, Ausgabe, ...)
-
Hat die Komponente, die beim Drücken der Taste A eine bestimmte Ausgabe machen soll, auch den Focus?
Den muss sie nämlich haben, soweit ich weiß. Du kannst versuchen ihr den Focus per requestFocus() zu geben.
Vielleicht solltest du den KeyListener der deinen JComponents übergeordneten Component hinzufügen.
-
Ist echt zum Verrücktwerden! Ich hab jetzt das KeyListener Interface aus der Komponente herausgenommen und in das Hauptwidget, ein JFrame, getan. Dann hab ich brav die Methoden überschrieben:
public void keyPressed(KeyEvent e) { System.out.println("keyPressed"); } public void keyReleased(KeyEvent e) { System.out.println("keyReleased"); } public void keyTyped(KeyEvent e) { System.out.println("keyTyped"); }
und in den Konstruktor folgendes eingefügt:
requestFocus(); addKeyListener(this);
Ich drück die "A" Taste - nix passiert
-
Schau mal ob das bei dir funktioniert.
import javax.swing.*; import java.awt.event.*; public class KeyEventFrame extends JFrame implements KeyListener { public KeyEventFrame() { super("KeyEventFrame"); addKeyListener(this); } public void keyPressed(KeyEvent e) { System.out.println("keyPressed: "+e.getKeyCode()); } public void keyReleased(KeyEvent e) { System.out.println("keyReleased: "+e.getKeyCode()); } public void keyTyped(KeyEvent e) { System.out.println("keyTyped: "+e.getKeyCode()); } public static void main (String args[]) { new KeyEventFrame().setVisible(true); } }
-
Ja, Cengiz, das tut
-
post doch bitte mal den ganzen Quelltext der JComponent (oder der JFrame)
-
Okay, ich konnte den Fehler jetzt eingrenzen: Das Problem war, dass mit Eclipse nix funktioniert hat, was mit Tastendrücken zu tun hat, wenn ich das Programm aber aus der Konsole gestartet habe, hats getan, wie ich später gemerkt hab...
Also im JFrame wird zum Content Pane eine Instanz einer von JComponent abgeleiteten Klasse "Controls" hinzugefügt, die das Problem ist (denn wenn ich sie auskommentiere, tuts).
Diese Klasse Controls implementiert nämlich das Interface ActionListener und überschreibt die Methode public void actionPerformed(ActionEvent ae). Aber wenn ich in der Methode eine Ausgabe reinhaue, erscheint diese nicht, wenn man eine Taste drückt (nur, wenn man einen Button aus Controls anklickt).Habt ihr noch Ideen?