# Warten auf Tastendruck



## Bruegge (24. Mrz 2005)

Hallo,

ich möchte in meinem Applet folgendes machen:
An einer bestimmten Stelle soll auf einen Tastendruck gewartet werden, mehr nicht.
Aber ich bekomme das einfach nicht hin


----------



## Beni (24. Mrz 2005)

Und was hast du bisher gemacht?

Grundsätzlich musst du einen KeyListener implementieren und dem Applet hinzufügen. Dann musst du das Applet "abschliessen" (alle Buttons etc. auf enabled=false setzen), damit keine Benutzereingaben verarbeitet werden, und naja, warten... bis die keyPressed-Methode angesprochen wird.


----------



## Bruegge (24. Mrz 2005)

Bislang habe ich noch nicht viel gemacht, aber ist es wirklich notwendig das applet "abzuschliessen" ? Denn nachdem ein Tastendruck erfolgt ist, soll das Applet eigetnlich weitergehen ...
Wie würde die keyPressed-Methode denn aussehen?


----------



## Wildcard (24. Mrz 2005)

Bruegge hat gesagt.:
			
		

> Bislang habe ich noch nicht viel gemacht, aber ist es wirklich notwendig das applet "abzuschliessen" ? Denn nachdem ein Tastendruck erfolgt ist, soll das Applet eigetnlich weitergehen ...
> Wie würde die keyPressed-Methode denn aussehen?


Wenn du nicht willst das der Benutzer in der zwischenzeit irgendwas machen kann, ja.
Beispiel für KeyListener:


```
class MyApplet extends JApplet
{
    public void init()
    {
        addKeyListener(new KeyListener()
        {
            public void keyTyped(KeyEvent e)
            {
                // TODO Auto-generated method stub
                doSomething();

            }

            public void keyPressed(KeyEvent e)
            {
                // TODO Auto-generated method stub

            }

            public void keyReleased(KeyEvent e)
            {
                // TODO Auto-generated method stub

            }
        });
    }
}
```


----------



## L-ectron-X (24. Mrz 2005)

Wenn Du nur die keyPressed()-Methode, bzw. nicht alle Methoden des KeyListeners überschreiben musst, kann der Code auch abgekürzt werden.

```
import javax.swing.*;
import java.awt.event.*;

public class MyApplet extends JApplet 
{ 
    public void init() { 
        addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) { 
                // Wenn eine Taste gedrückt wurde
            } 
        }); 
    } 
}
```


----------



## Bruegge (24. Mrz 2005)

Also im Prinzip will ich die keyPressed-Menthode garnicht überschreiben, sondern nur, dass eine schleife so lange ausgeführt wird, bis eine Taste gedrückt wird (also keyPressed). Ist das nicht einfacher möglich?


----------



## Wildcard (24. Mrz 2005)

Dann wirds sogar komplizierter! Du musst mit Threads arbeiten  :wink:


----------



## Bruegge (24. Mrz 2005)

stimmt.. mir fällt gerade auf das der ja schlecht gleichzeitig eine schleife durchlaufen kann UND auf einen tastendruck warten .. ach mist, ich mach das jetzt so, dass der einfach nur 10 sekunden wartet, anstatt auf nen Tastendruck *aufgib* 
Trotzdem vielen Dank für die Hilfe!!


----------



## Wildcard (24. Mrz 2005)

Bruegge hat gesagt.:
			
		

> stimmt.. mir fällt gerade auf das der ja schlecht gleichzeitig eine schleife durchlaufen kann UND auf einen tastendruck warten .. ach mist, ich mach das jetzt so, dass der einfach nur 10 sekunden wartet, anstatt auf nen Tastendruck *aufgib*


Falsche Einstellung! Irgendwann musst du's sowieso lernen  :wink:


----------



## Bruegge (24. Mrz 2005)

Ja... das stimmt schon aber ich glaube für mein Problem reicht es, wenn ich ein delay von 10 Sekunden mache, und fertig 

Gibt es irgendwo ein Tutorial zu dem Thema?


----------



## Hansdampf (27. Mrz 2005)

ungefähr so:

```
while(!keyhit){try{Thread.sleep(100);}catch(Exception e){}}
```
dann im KeyListener beim Tastendruck keyhit auf true setzen,fertsch. Der AWT Thread wird nicht unterbrochen, der läuft extra.


----------



## Bruegge (28. Mrz 2005)

hmm also das funktioniert nicht so richtig, der kommt aus dieser while-schleife nicht raus, also reagiert nicht auf einen tastendruck. Ich habe den keylistener geändert und eigetnlich müsste es gehen...


----------



## Guest (29. Mrz 2005)

rufst du das aus einem AWT Tread auf? Darf nämlich nich, sonst wird der blockiert. Poste mal deinen Code auschnittsweise.


----------



## Gast (31. Mrz 2005)

Hallo,

setz doch einfach eine GlassPane ein. Also wenn der Event startet, GlassPane setzen, dann wenn einer ne Taste drückt, GlassPane wieder wegnehmen.


----------



## bruegge (31. Mrz 2005)

ich hab das jetzt erstmal so gemacht, dass ich einfach nur nen delay hab. Das reicht für mein Problem aus. Trotzdem danke!!


----------

