# Wie funktionieren events auf Tastendruck?



## Dark-Wing-Duck (23. Feb 2005)

Hallo zusammen!
Ich will erstmal allge ganz herzlich grüßen weils mein erster beitrag ist. =)

Ich hab auch gleich mal ein Problem. Und zwar stehe ich noch ziemlich am Anfang der java-programmierung und versuche grade das bekannte spielchen "snake" als applet zu programmieren.
Ich bin jetzt so weit dass ich ein kleines quadrat mit einem anderen quadrat als schwanz per buttonclick (ein button für hoch, ein button für rechts usw.) stück für stück in einem fest vorgegebenen spielfeld bewegen kann.

Ich will jetzt allerdings dass ich die "schlange" per pfeiltasten und nicht per butoonclicks steuern kann.
Ich hab aber keine Ahnung wie das geht.

Könnt ihr mir da helfen und vielleicht eine beispielklasse oder so zeigen?


thx
Darkwing


----------



## Sky (23. Feb 2005)

Du musst einen entsprechenden Listener (KeyListener) einfügen.


----------



## Dark-Wing-Duck (23. Feb 2005)

ja danke. das hab ich schon getan. 
Aber ich weiß nicht wie s weitergeht. Also wie der syntax ist und wie die Pfeiltasten überhaupt definiert werden


----------



## Sky (23. Feb 2005)

Also, Du kannst Du zunächst mal deinen eigenen KeyListener schreiben, z.B.:

```
class SnakeKeyListener
    implements KeyListener {

  public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_UP) {
      System.out.println("UP");
    }
    else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
      System.out.println("DOWN");
    }
    else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
      System.out.println("LEFT");
    }
    else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
      System.out.println("RIGHT");
    }

  }

  public void keyReleased(KeyEvent e) {

  }

  public void keyTyped(KeyEvent e) {

  }
}
```

Und diesen dann einfach deinem Applet zuweisen:


```
SnakeKeyListener oSkl = new SnakeKeyListener();
    this.addKeyListener(oSkl);
```


----------



## Dark-Wing-Duck (25. Feb 2005)

Danke für den code. aber leider klappts trotzdem nicht. Er springt irgendwie nicht in meinen Keylistener rein...  

```
public void keyPressed(KeyEvent e)
	{
		if (e.getKeyCode() == KeyEvent.VK_UP)
		{
			i_neuHoch = 1;
		}
		else if (e.getKeyCode() == KeyEvent.VK_DOWN)
		{
			i_neuRunter = 1;
		}
		else if (e.getKeyCode() == KeyEvent.VK_LEFT)
		{
			i_neuLinks = 1;
		}
		else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
		{
			i_neuRechts = 1;
		}
	}
```
ich hab den keylistener natürlich implementiert:

```
public class Game extends Applet implements ActionListener, KeyListener
```
und in der init aufgerufen

```
addKeyListener(this);
```

Den Konstruktor brauche ich ja nicht da ich einfach alles in eine Klasse geschrieben habe.

Ich weiß echt nicht weiter. Habt ihr noch ne Idee?


----------



## Bleiglanz (25. Feb 2005)

i_neuRechts = 1; 

du änderst ja nur eine Variable, dann wird der Listener verlassen und auf dem Bildschirm tut sich natürlich NICHTS

=> du musst schon noch irgendeiene Aktion anstossen


----------



## Dark-Wing-Duck (29. Mrz 2005)

Ja aber durch den Wert der Variable rufe ich eine andere Methode auf.

Ich hab hier mal ein kleines Programm geschrieben wie ich den Keylistener auch in meinem snake-spiel angewandt habe: (klappt ebenfalls nicht)


```
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Taste extends Applet implements KeyListener
{
	boolean bool = false;

	public void init()
	{
		setBackground (Color.WHITE);
		setLayout (null);
	}
	
	public void paint(Graphics g)
	{
		if (bool == true)
		{
			g.drawString("Button pressed!", 20, 20);
		}
	}
	
	public void keyTyped(KeyEvent e) 
	{
		if (e.getKeyCode() == KeyEvent.VK_UP)
		{
			bool = true;
		}
	}

	public void keyPressed(KeyEvent e) 
	{
	}

	public void keyReleased(KeyEvent e) 
	{
	}
}
```

Wenn ihr mir sagen würdet was da falsch ist wäre mir schon viel gehoflen =)


----------



## Wildcard (29. Mrz 2005)

Ein KeyListener direkt auf einem Applet/Frame macht Probleme. Geh den Umweg über ein neues Panel:

```
public class Taste extends Applet 
{ 

    private MyPanel2 panel;
    
   public void init() 
   { 
      setBackground (Color.WHITE); 
      setLayout (null); 
      panel = new MyPanel2();
      panel.setSize(100,100);
      add(panel);
      panel.addKeyListener(new KeyAdapter()
    {
        public void keyPressed(KeyEvent e)
        {
           panel.setBool(true);
           panel.repaint();
            
        }
    });
      panel.requestFocus();
      
   } 
   
} 

class MyPanel2 extends Panel
{
    boolean bool = false; 
    public void paint(Graphics g) 
    { 
       if (bool) 
       { 
          g.drawString("Button pressed!", 20, 20); 
       } 
    } 
    
    public void setBool(boolean bool)
    {
        this.bool=bool;
    }
}
```


----------

