KeyListener funktioniert nicht

Status
Nicht offen für weitere Antworten.

Dr.Kolm

Mitglied
Hi,

mein Problem ist das der KeyListerner nicht zu funktionieren scheint. Also ich habe mir ein Beispielprogramm heruntergeladen dort öffnet sich ein Fenster welches man mit ESC schließen kann. Dann habe ich mein Programm dementsprechend erweitert durch implements KeyListener, den 3 Klassen keypressed, keyreleased und keyTyped, und natürlich addKeyListener(this) (das mit addKeyListener(this) habe ich dort stehen wo ich auch addWindowListener(this) stehen habe und das funktioniert). In der Klasse keypressed habe ich den Code stehen das das Program sich schließt wenn man auf ESC drückt (habe ich so aus dem Beispielprogramm übernommen).
Wenn ich das Programm dann kompiliere und starten will läuft alles ganz normal und wenn ich auf ESC drücke passiert gar nichts.

Mein Programm ist ein bisschen wie eine Website aufgebaut ich habe für jeden Frame eine eigene Klasse und meine Hauptplasse ist Index. Von dort aus starte ich das Hauptmenu wo ich den Keylistener Unterbringen will. In jeder Unterklasse also auch Hauptmenu habe ich stehen extends Index (also die Hauptklasse) liegt da vielleicht mein Problem?

Ich hoffe mir kann jemand helfen

mfg
Timo Völker
 

Dr.Kolm

Mitglied
Natürlich ich bin mir nur nicht sicher was relevant ist. Also das ist meine Hauptmenu Klasse

Code:
public class Hauptmenu extends XonaIndex implements ActionListener, WindowListener, KeyListener
{
	public Hauptmenu()
	{
		setTitle("Xona: Hauptmenü");
		
		add(new JLabel(new ImageIcon("images/hauptmenu.jpg"))); 

		Button b1 = new Button("Kundenstamm");
		b1.addActionListener(this);
		b1.setActionCommand("kunde");
		Button b2 = new Button("Artikelstamm");
		b2.addActionListener(this);
		b2.setActionCommand("artikel");
		Button b3 = new Button("Auftrag");
		b3.addActionListener(this);
		b3.setActionCommand("auftrag");
		Button b4 = new Button("Beenden");
		b4.addActionListener(this);
		
		add(b1);
		add(b2);
		add(b3);
		add(b4);
		
		
		addWindowListener(this);
		setVisible(true);
                                addKeyListener(this);
	}
	
	public void actionPerformed (ActionEvent e)
	{
		String s = e.getActionCommand();
		if (s.equals("kunde")) new Kunde();
		if (s.equals("artikel")) new Artikel();
		if (s.equals("auftrag")) new Auftrag();
		if (s.equals("Beenden")) System.exit(0);
	}

	public void keyPressed(KeyEvent event)
	{
		if (event.getKeyCode() == KeyEvent.VK_ESCAPE) 
		{
			setVisible(false);
			dispose();
			System.exit(0);
    	}
	}
	public void keyReleased(KeyEvent event) { }
	public void keyTyped(KeyEvent event) { }
	
	public void windowClosing (WindowEvent e)
	{
		dispose();
		System.exit(0);
	}
	public void windowClosed (WindowEvent e) { }
	public void windowOpened (WindowEvent e) { }
	public void windowIconified (WindowEvent e) { }
	public void windowDeiconified (WindowEvent e) { }
	public void windowActivated (WindowEvent e) { }
	public void windowDeactivated (WindowEvent e) { }	
}

In der Hauptklasse XonaIndex steht extends Frame und solche sachen wie Farbe größe der Frames usw. Aber ich glaube die ist nicht so wichtig bei meinem Problem oder?
 

mic_checker

Top Contributor
Wie gesagt: Poste doch mal deinen Code.

In der Klasse keypressed habe ich den Code stehen das das Program sich schließt wenn man auf ESC drückt (habe ich so aus dem Beispielprogramm übernommen).
Wenn ich das Programm dann kompiliere und starten will läuft alles ganz normal und wenn ich auf ESC drücke passiert gar nichts.

keyPressed ist eine Methode des Interfaces KeyListener:
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/KeyListener.html

Der Listener müsste irgendwie so aussehen:

Code:
	class KeyLauscher implements KeyListener
	{
		public void keyPressed(KeyEvent e)
		{
			int keycode = e.getKeyCode();

        //wenn ich mich recht erinnere ist ESC == 27
      	if(keycode == 27)
      	{
             //mach was du willst..
			}
		}

		public void keyTyped(KeyEvent e)
		{
			//....
	 	}

		public void keyReleased(KeyEvent e)
		{
			//....
		}
	}


edit:
etwas zu langsam .....
 

Dr.Kolm

Mitglied
Erstmal danke für deine Antworten. So wie du mir das geschrieben hast funktioniert das leider auch nicht.

Ich bin ja kein Experte aber müsste das Programm nicht wenigstens einmal die Klasse keypressed durchlaufen wenn man auf eine Taste drückt? Ich habe nämlich jetzt ein System.out.print("test") mit reingeschrieben aber auf der Konsole erscheint gar nichts völlig egal welche Taste ich drücke. Das unten ist der Quellcode meiner Hauptklasse kann es was damit zu tun haben?

Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;

public class XonaIndex extends Frame 
{	
	FlowLayout myLayout = new FlowLayout();
	
	
	public XonaIndex()
	{
		super();
		setLayout(myLayout);
		setSize(800,575);
		
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation( (d.getSize().width - 800) / 2, (d.getSize().height - 575) / 2 );
		setResizable(false);

		setForeground(Color.black);
		setBackground(Color.lightGray);
		//setBackground(Color.decode("#ECE9D8"));
		setFont(new Font("Arial", Font.PLAIN, 12));
	}
	
	public static void main (String args[]) 
	{
		new Hauptmenu();

	}
}
 

Wildcard

Top Contributor
Das Problem ist einfach das der Frame nicht den Focus hat, und deshalb auch keine KeyEvents bekommt.
mit
Code:
requestFocus();
kannst du das zwar erreichen, aber nur solange der Benutzer keiner anderen Komponente den Focus gibt.
Wenn du das unbedingt so haben möchtest müstest du wohl jeder komponente den KeyListener anhängen.
Empfehle dir übrings dringend den Umstieg auf Swing. Ist einfach besser!
 

Dr.Kolm

Mitglied
Hi,

danke für deine Antwort das werde ich gleich mal ausprobieren. Wie meinst du das mit dem Umstieg? Meinst du nur von AWT auf SWING, die ganze Programmierart oder das mit dem KeyListener?

mfg
Timo

Jetzt verstehe ich erst das Problem. Ich müsste dann also für jeder Komponenten einen KeyEvent programmieren das ist aber ganz schön umständlich. Wie wird das denn üblicherweise gemacht? Kann man sich die Programmierarbeit bei SWING sparen?
 

Wildcard

Top Contributor
Dr.Kolm hat gesagt.:
Wie meinst du das mit dem Umstieg? Meinst du nur von AWT auf SWING oder die ganze Programmierart?
Eignetlich nur den Umstieg auf das Swing Paket, da es einfach mächtiger als AWT ist.
Zur Programmierung vieleicht noch ein Hinweis:
Gerade für Listener eignen sich Annonyme innere Klassen, also statt

Code:
public class Hauptmenu extends XonaIndex implements ActionListener, WindowListener, KeyListener

bspw. sowas:

Code:
public class Hauptmenu extends JFrame
{

    public Hauptmenu()
    {
        //statt des Window-Listeners
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //und für Buttons etc. annonyme innere Klassen
        JButton button = new JButton();
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                // TODO Auto-generated method stub

            }
        });
    }

}

Dadurch wird die Kapselung besser, man braucht keine Actioncommands mehr usw.

Dr.Kolm hat gesagt.:
Jetzt verstehe ich erst das Problem. Ich müsste dann also für jeder Komponenten einen KeyEvent programmieren das ist aber ganz schön umständlich. Wie wird das denn üblicherweise gemacht? Kann man sich die Programmierarbeit bei SWING sparen?
Auch in Swing wird dir das nicht erspart bleiben. Du müsstest in deiner Klasse KeyListener implementieren und diese dann bei jeder eingefügten Komponente als KeyListener implementieren. Alternativ kannst du auch ein Superklasse erstellen, die die add() Methode überschreibt, und sich dabei automatisch
als Listener registriert.
 

Dr.Kolm

Mitglied
Danke nochmal. Das mit dem überschreiben der add() Methode lasse ich mal lieber ist mein erstes GUI in Java.

Jetzt habe ich aber schon ein neues Problem und zwar will ich wenn ich in ein Textfeld bin eine Aktion ausführen wenn ich auf TAB drücke. Nur wenn ich in einem Textfeld auf TAB klicke geht der mal wieder nicht in die Keypressed Klasse. Wenn ich auf irgendeine andere Taste drücke klappt das nur bei TAB nicht. Kann mir vielleicht da auch noch jemand weiterhelfen?

mfg
Timo
 

Wildcard

Top Contributor
So müsste es gehen:
Code:
        JTextField field = new JTextField();
        field.setFocusTraversalKeysEnabled(false);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
A KeyListener funktioniert nicht Java Basics - Anfänger-Themen 7
E Keylistener funktioniert nicht richtig. Java Basics - Anfänger-Themen 17
G Applet mit Keylistener funktioniert nicht Java Basics - Anfänger-Themen 3
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
T KeyListener Java Basics - Anfänger-Themen 2
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
A Wie KeyListener adden? Java Basics - Anfänger-Themen 15
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
Luk10 KeyListener Java Basics - Anfänger-Themen 13
S KeyListener aus anderer Klasse hinzufügen Java Basics - Anfänger-Themen 19
P KeyListener im Applet Java Basics - Anfänger-Themen 2
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M problem mit keylistener Java Basics - Anfänger-Themen 2
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
F Keylistener Java Basics - Anfänger-Themen 12
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
G Keylistener nur besimmte Zeichen zulassen Java Basics - Anfänger-Themen 8
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
D KeyListener Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben