# KeyDown + Thread / deprecation



## Marcel_Handball (6. Mrz 2007)

Schönen guten Abend zusammen,
ich versuche zum ersten Mal einen KeyDown in meine Applets miteinzubinden, allerdings habe ich zwei probleme:

1) Es kommt eine Fehlermeldung (deprecation) bei folgendem Applet

```
import java.awt.*;
import java.applet.*;

public class Keys extends Applet {

    int x=50;

    public void init() {
        setBackground(Color.white);
        setLayout(null);
    }

    public boolean keyDown(Event evt, int key) {

        if (key == Event.LEFT){x--;}
        if (key == Event.RIGHT){x++;}
        repaint();
        
        return true;
    }
 
    
    public void paint(Graphics g) {
        g.drawRect(x,50,10,10);     
    }
}
```

und beim 2. funktioniert die KeyDown Methode gar nicht. (Während sich im Thread eine Linie ununterbrochen von Links nach Rechts bewegt und wieder zurück), soll man mit der Tastatur die Richtung ändern können:


```
import java.applet.*;
import java.awt.*;

public class mitkey extends Applet
{   int x=5;
    malen zeichenfeld = new malen();
    ersterthread eins = new ersterthread();
    boolean richtung=false;
    boolean weiter=false;

    
    public void init(){
        setBackground(Color.black); setLayout(null);
     
        zeichenfeld.setBackground(Color.black);
        zeichenfeld.setBounds(10,10,400,300);
        add(zeichenfeld);  
        
        eins.start();
        
    }

    public class ersterthread implements Runnable{
        Thread lauf;

        void start(){
            if(lauf==null){lauf= new Thread(this); lauf.start(); weiter=true;}
        }
    
        public void run(){
            while(weiter==true){
                if(richtung==false){x++;}
                  else{x--;}
                zeichenfeld.repaint();
                try{lauf.sleep(12);}catch(InterruptedException e){}
                if(x==200){richtung=true;}
                if(x==5){richtung=false;}
            }
        }

        void stop(){lauf=null; weiter=false;}
   
        
     public boolean keyDown(Event evt, int key) {

        if (key == Event.LEFT){richtung=true;}
        if (key == Event.RIGHT){richtung=false;}
        
        return true;
    }
    
}
    

    public class malen extends Canvas{
       public void paint(Graphics g){
           g.setColor(Color.red);
           
           g.drawLine(x,5,x,200);
           g.drawLine(x,5,x,200);
       }
    }

}
```

Woran liegt das? Kann mir jemand helfen oder sagen, was ich verändern soll?

Gruß Marcel


----------



## Wildcard (6. Mrz 2007)

OK, hier mal ein paar Dinge:
Lass dein Applet KeyListener implementieren.
In init() rufst du dann addKeyListener(this) auf.

Weiterhin werden Klassen immer groß geschrieben und ich würde dir einen Umstieg auf JApplet empfehlen, da AWT doch schon recht betagt ist.


----------



## Marcel_Handball (6. Mrz 2007)

Erst einmal danke für deine Antwort,
aber das bringt mich nicht sonderlich weiter, ich hab noch keine Erfahrung mit KeyDown und hab mich ausschließlich an folgendem Beispiel orientiert:

Link

Aber auch dort gibt es einen "deprecation". Wie krieg ich diesen nun weg?
Und, warum reagiert mein Thread nicht auf den KeyDown?

Vll könntest du mir zwei/drei CodeZeilen schenken.


----------



## Wildcard (6. Mrz 2007)

KeyDown ist (wie du ja schon erfahren hast) deprecated, also veraltet.
Der richtige Weg führt über die Verwendung von Listenern, in deinem Fall der KeyListener oder KeyAdapter.
Ist jetzt viel zu lesen, aber irgendwann muss es eh sein  :wink: 
http://www.galileocomputing.de/open...14_004.htm#mj26989b07f26cff8fcd19bbc3d06f6855
weiterhin lege ich dir das Swing Tutorial dieser Seite ans Herz:
http://www.gailer-net.de/tutorials/java/java-toc.html


----------

