# KeyAdapter/KeyListener zum laufen kriegen



## hajj0 (3. Sep 2006)

Nabend 

ich wollte gerade einen KeyAdapter bzw. KeyListener (ich weiß nich welches hier das passende wäre ) zum laufen zu bekommen.

Als Vorbild wollte ich meine bereits funktionierende Maussteuerung nehmen.

Die sieht so aus:

Im Konstruktor:

```
Maus meine_maus = new Maus();
                  bZahl7.addMouseListener(meine_maus);
```


Dann die Klasse "Maus":

```
class Maus extends MouseAdapter
    {
        public void mousePressed(MouseEvent event)
        {
           try {
               Object object = event.getSource();
               
                // Hier nun die Überprüfungen ob die Quelle mit einem der Buttons übereinstimmt
                }catch (java.lang.Exception e) {}
         }
   }
```


Da wo  der Kommentar steht stehen dann etliche abfragen zur Quelle, z.B. ob die Quelle "bZahl7" ist, was den Namen von einem Button darstellt.




So, das funktioniert soweit. Die Frage ist jetzt, wie ich das mit der Tastensteuerung hinbekomme.

Im groben wollte ich das eigentlich kopieren:


```
// Konstruktor
        Tastatur meine_tastatur = new Tastatur();
// Ende Konstruktor

    class Tastatur extends KeyAdapter
    {
        public void keyTyped(KeyEvent event)
        {
            // Sachen
            try {
                Object object = event.getSource();
                if(object == "VK_1")
                {
                    zahl(1);
                }
            }catch (java.lang.Exception e) {}
        }
    }
```

So, aber das funktioniert so noch nicht.
Bei der Maussteuerung habe ich ja den Button mit dem MouseListener verbunden.

Wie mache ich das mit dem KeyListener?

Wenn ich einfach "VK_1.addKeyListener(meine_tastatur);" eingebe, klappts nicht. 
Der sagt mir "variable VK_1" cannot be found, obwohl ich dachte dass VK_1 ne Konstante sei die ich schon durch die Klasse "java.awt.event.KeyEvent" definiert bekomme.

Kann mir das nochmal jemand erklären wie ich die benötigten Tasten mit meiner Tastensteuerung verbinde?

Aus dem API werde ich in der Hinsicht nicht wirklich schlau  ???:L


----------



## The_S (3. Sep 2006)

Du addest z. B. einer JTextArea deinen KeyAdapter. Was du jetzt mit VK_1 willst weiß ich net wirklich  ???:L


----------



## hajj0 (3. Sep 2006)

was ich damit wollte wusste ich selbst nicht wirklich   

Was ich möchte ist ansich genau das gleiche wie die Maussteuerung, nur für die Tastatur.

Ich drücke verschiedene Tasten (auf der Tastatur), und infolge dessen ruft das Programm die definierten Methoden auf.

Beispiel: Wenn man mit der Maus auf den Button "AC" klickt, wird die methode ac() aufgerufen.
Nun möchte ich: Wenn man auf der Tastatur auf die Taste "Entf" klickt, dass ebenfalls die methode ac() aufgerufen wird.

Genauso für den Button "Del" wo die methode del() aufgerufen wird.
Der Button "Enter" steht für sich.

Das wären einige Beispiele.

Ich möchte nun also, dass sobald das Programm läuft und man eine Taste drückt, eine bestimmte Methode aufgerufen wird.

Wie kann ich das realisieren?

Denn mit einer (J)TextArea hat das ja ansich nichts zu tun...


----------



## sayang (5. Sep 2006)

Mit if(object == "VK_1") stimmt ja schonmal was nicht. Du kannst nicht einfach das object (das ja ein KeyEvent ist) mit == "VK_1" checken. Du musst über den keyCode gehen. Siehe unten

Vorab: du willst also offenbar nicht nur auf die "1" hören, sondern auch auf Tasten, die kein Zeichen erzeugen (z. B. ENTF). Dann musst du keyPressed(KeyEvent) oder keyReleased(KeyEvent) statt keyTyped(KeyEvent) benutzen, denn 





> Key combinations which do not result in Unicode characters, such as action keys like F1 and the HELP key, do not generate KEY_TYPED events



Ich hab hier mal ein kleines Beispiel: 
	
	
	
	





```
import java.awt.Dimension;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;

public class KeyTest extends JFrame {

	public KeyTest() {
		super("RectTest");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setPreferredSize(new Dimension(200,200));
		addKeyListener(new KeyAdapter() {
			public void keyReleased(KeyEvent e) {
				switch(e.getKeyCode()) {
					case KeyEvent.VK_1: 
						System.out.println("'1' gedrückt"); 
						break;
					case KeyEvent.VK_DELETE: 
						System.out.println("'ENTF' gedrückt"); 
						break;
					default: 
						System.out.println("Etwas anderes gedrückt");
				}
			}
		});	
	}

	public static void main(String[] args) {
		KeyTest rt = new KeyTest();
		rt.pack();
		rt.setVisible(true);
	}
}
```

Beachte die switch-Anweisung... das ist das gleiche wie
	
	
	
	





```
if(e.getKeyCode() == KeyEvent.VK_1) {
   System.out.println("'1' gedrückt");
}
else if(e.getKeyCode() == KeyEvent.VK_DELETE) {
   System.out.println("'ENTF' gedrückt");
}
else {
   System.out.println("Etwas anderes gedrückt");
}
```

Lg
sayang


----------

