# KeyListener



## zerix (16. Oktober 2005)

Hallo!

Ich möchte in meinem Programm einen KeyListener implementieren. Das hab ich vor längerem schon mal gemacht, da musste ich den KeyListener allen Objekten hinzufügen müssen damit er funktioniert. gibt es da noch ne andere Möglichkeit?


----------



## Snape (17. Oktober 2005)

Moin,
wie "allen"? Füge den KeyListener doch einfach einer übergeordneten Komponenten hinzu, in der sich mehrere/alle Komponenten befinden.


----------



## zerix (17. Oktober 2005)

Also ich hab eine Klasse geschrieben und der wollte ich den KeyListener hinzufügen. Also habe ich implements KeyListener gemacht und im Konstruktor der Klasse this.addKeyListener(this);
Aber es funktioniert nicht. Die 3 methoden die ich brauche hab ich natürlich auch. Damals hat es halt nur funktioniert wenn ich den KeyListener allen Obejkten in der Klasse hinzugefügt hab. Mache ich irgendwas falsch?


----------



## sj41 (17. Oktober 2005)

hi,
was meinst du denn mit allen Objekten (Buttons, etc.. etwa?). kriegts du eine Fehlermeldung oder werden die events einfach nicht abgefangen?

gruss
sj41


----------



## zerix (17. Oktober 2005)

Ja, genau die meine ich. Die events werden nicht abgefangen.


----------



## sj41 (17. Oktober 2005)

wenn du nichts dagegen hast kannst du ja mal den Code-Teil posten, damit wir ihn klau.. äh die Problemstellung lösen können


----------



## zerix (17. Oktober 2005)

Hier hab ich einfach mal ne BeispielKlasse geschrieben, der andere Quelltext wäre ein wenig zu lang 


```
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class KeyLTest extends JFrame implements KeyListener{

	JButton but=new JButton("Keine Funktion");
	JLabel test=new JLabel("TEST");
	KeyLTest()
	{
		super("KeyListenerTest");
		setSize(200,200);
		setLayout(null);
		
		but.setBounds(10,10,100,25);
		add(but);
		
		
		test.setBounds(10,50,100,25);
		add(test);
		
		
		this.addKeyListener(this);
		setVisible(true);
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new KeyLTest();
	}

	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println("TEST1");
	}

	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println("TEST2");
	}

	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println("TEST3");
	}

}
```

Also so funktioniert es nicht. es funktioniert erst wenn ich den listener dem Button und dem Label auch hinzufüge.


----------



## zerix (17. Oktober 2005)

Ich muss mich korregieren. Es funktioniert wenn ich es dem Button hinzufüge, aber sonst nirgends. ich wollte es einer JTable hinzufügen die auf einer Scrollpane liegt, aber da reagiert er nicht.


----------



## sj41 (17. Oktober 2005)

hmm ich bin mir nicht sicher aber versuch mal but.setFocusable(false);


----------



## zerix (17. Oktober 2005)

Ok, so funktioniert das. Wie es aussieht es das dann von dem Focus abhängig, aber warum funktioniert das denn nicht bei einer JTable, wenn ich in der am arbeiten bin.


----------



## sj41 (17. Oktober 2005)

tja meiner Meinung nach müsste es eigentlich funktionieren wenn du table.addKeyListener(this); hast. aber was weiss ich schon bestimmt gibts hier noch jemand der sich damit besser auskennt.


----------



## illaX (17. Oktober 2005)

hast du es vllt. dem ScrollPane hinzugefügt und nicht der Tabelle?


----------



## zerix (17. Oktober 2005)

ich hab es beidem hinzugefügt und sogar dem viewport der scrollpane, weil es nicht funktioniert hat.


----------

