2012-03-24 7 views
0

In meinem Programm habe ich KeyListener auf meiner Leinwand festgelegt. Es funktioniert großartig, aber wenn ich Thread.sleep (1000) tue, hört keyListener immer noch zu, Tasten zu lesen und zu lesen, aber das Ergebnis wird nur angezeigt, wenn die Schlafzeit abgelaufen ist. Wie kann der keyListener Schlüssel in der Schlafperiode nicht lesen oder hören?Deaktivieren Keylistener in Java

+0

Mit "Leinwand" meinst du eine 'java.awt.Canvas'? Bitte seien Sie spezifisch und verwenden Sie den korrekten Fall für J2SE-Klassennamen. Auch, um besser zu helfen, eher ein [SSCCE] (http://sscce.org/). –

Antwort

4

Tun Sie nicht Thread.sleep() mit Swing. Aus der Frage, ich ziehe ab, dass du alles bei EDT (Event Dispatch Thread) machst. Wenn Sie also EDT in den Ruhezustand versetzen, wird Swing nicht deaktiviert, sondern nur für eine Sekunde angehalten.

Sie können einen Timer für eine Sekunde einrichten, und wenn Sie keine Schlüsselereignisse mehr empfangen möchten, deaktivieren Sie einfach die Komponente durch setEnabled(false), dann starten Sie den Timer, und wenn er abgelaufen ist, rufen Sie setEnabled(true).

+0

Ich habe bereits versucht, setEnabled (false) im Canvas vor und setEnabled (true) nach, aber keylistener liest noch Schlüssel. –

+0

Deaktiviert ein Komponentenblock Mausereignisse? Ich weiß, dass es einen 'ActionListener' vom Feuern blockiert, erwarte, dass es keinen Effekt auf einen' MouseMotionListener' hätte (der Listener würde immer noch Ereignisse auslösen), bin mir aber über 'MouseListener' nicht sicher. –

+0

@YanIvanEvdokimov Haben Sie einige benutzerdefinierte KeyListener dort? Soweit ich weiß, hat Canvas selbst keine KeyListener. Kannst du nicht einfach deinen KeyListener aktualisieren, um Dinge für eine Sekunde zu ignorieren? –