2009-03-26 26 views
0

Sagen wir, ich habe eine GUI, und ich möchte das Programm tatsächlich ausgeführt werden, wenn die Leertaste gedrückt wird, aber wenn die Leertaste erneut gedrückt wird, möchte ich das Programm beenden. Würde so etwas funktionieren?Umgang mit KeyEvents in Java

public class MouseClicker extends JApplet implements KeyListener{ 
int counter = 0; 
MouseClicker m1 = new MouseClicker(); 

//all of the other methods 

public void keyPressed(KeyEvent e) { 
int keyCode = e.getKeyCode(); 
if(keyCode==KeyEvent.VK_SPACE){ 
m1.click(); 
counter ++; 
if(counter%2==0) 
    System.exit(0); 
} 
//other methods needed for KeyListener 
} 
+0

Beachten Sie, dass Zähler wirklich flüchtig sein muss. – Eddie

Antwort

2

Probieren Sie es aus und obwohl ;-)

Im Ernst, was meinst du, du willst programmieren laufen, wenn die Leertaste gedrückt wird sehen? Wenn das Programm nicht bereits läuft, wie erhalten Sie die KeyEvent?

Wie für die andere Hälfte Ihrer Frage, sollte der Code, den Sie haben, im Allgemeinen Java beenden, wenn die Leertaste gedrückt wird. Beachten Sie, dass es keinen Sinn macht, einen Counter zu verwenden, da der Wert des Counters verloren geht, sobald Java beendet wird. Beachten Sie auch, dass JApplet eine Ausnahme von "im Allgemeinen" ist ... Normalerweise können Sie System.exit nicht über ein Applet aufrufen, da das Applet unter der Kontrolle eines Browsers ausgeführt wird und Java nur beendet werden soll, wenn der Benutzer den Browser schließt nicht, wenn dein Applet fertig ist. Es könnte andere Applets geben, die in derselben JVM laufen, und sie sind möglicherweise noch nicht mit dem fertig, was sie gerade tun.

+0

Ich habe meine Frage schrecklich formuliert, tut mir leid. Mit dem Ausführen wollte ich die click() -Methode ausführen, die immer wieder auf denselben Bereich klickt und dabei Zeitintervalle zwischen den Klicks bis zum Drücken der Leertaste anzeigt. Das würde Threads erfordern, richtig? – Azreal

+0

Auch bedeutete ich für dieses Programm nicht auf einer Webseite zu sein, sondern eine Anwendung sein. Java ist meine einzige Sprache, und das einzige, was ich davon weiß, ist, das Programm direkt vom Compiler auszuführen. Gibt es eine Möglichkeit, das Programm als App laufen zu lassen? – Azreal

+0

Ja; Sie starten es mit einer public static void main-Methode (String [] args), und Sie verwenden einen JFrame anstelle eines JApplet als Container für Ihre GUI. Stellen Sie eine andere Frage, wenn Sie mehr Details zu diesem Punkt benötigen. –

0

Wahrscheinlich, ich denke, die AWT-Code korrekt ist, aber der Rest ist schrecklich kryptische (Nicht, dass ich es nicht verstehen, aber es drückt nicht, was Sie eigentlich tun, sehr gut, nicht wahr?)

Wie wäre:

boolean running=false; 

... 
if(running) 
    System.exit(0); 
else 
    running=true; 

statt?

Update: Nachdem Sie Ihre Diskussion auf dem anderen Beitrag gelesen haben, werden Sie ein wenig Fremdheit haben.

Es gibt dieses Konzept des AWT-Threads. Alles, was mit dem AWT gemacht wird, muss in diesem Thread erledigt werden. Wenn Sie die Leertaste drücken, erhalten Sie dieses Ereignis im AWT-Thread. Sie möchten es wahrscheinlich nicht behalten, denn solange Sie daran festhalten, werden andere Grafik-Updates verhindert.

Ich schlage vor, SwingTimer zu betrachten Stellen Sie einen Swing-Timer ein, um Sie alle paar ms zu benachrichtigen, und diese Benachrichtigung wird auf dem AWT-Thread kommen, so dass Sie auf Ihre Schaltfläche klicken können, dann beenden Sie und warten auf den nächsten Timer Veranstaltung.

Wenn sie die Leertaste erneut drücken, sollte system.exit() funktionieren.

+0

Wird in Java ein vordefinierter boolescher Wert ausgeführt? – Azreal

+0

Nein, die erste Codezeile wurde an meinen Text angehängt: Text. –

Verwandte Themen