ich möchte gerne die Aktionen mit einem JButton auswerten.
Ich hätte gerne folgendes verhalten:
Solange der Button mit der Maus betätigt wird, soll eine Methode immer wieder aufgerufen werden.
Sobald die Maustaste losgelassen wird, wird eine andere Methode einmalig aufgerufen.
So sieht das ganze bei mir momentan aus:
Java:
btnVoraus.addMouseListener(newMouseAdapter(){@OverridepublicvoidmousePressed(MouseEvent arg0){// Setze vorausfahrtwhile(true)try{forward();}catch(Exception e){// TODO Auto-generated catch block
e.printStackTrace();}}@OverridepublicvoidmouseReleased(MouseEvent e){// Rücksetze vorausfahrttry{stop();}catch(Exception e1){// TODO Auto-generated catch block
e1.printStackTrace();}}});
Ich hänge momentan noch in der while Bedingung für "Setze vorausfahrt".
Welche Eigenschaft des Buttons oder des MouseEvents kann ich nutzen um meine while Bedingung solange durchlaufen zu lassen, wie der Button gedrückt ist?
Definiere dir Außerhalb ne boolische Variable "pressed" und frage in der while Schleife ab, ob Pressed True ist, vor der setzt du sie auf true. In der REaleased setzt du sie auf false.
Definiere dir Außerhalb ne boolische Variable "pressed" und frage in der while Schleife ab, ob Pressed True ist, vor der setzt du sie auf true. In der REaleased setzt du sie auf false.
Nehme an, dass ich in der while-Schleife stecken bleibe. Jedenfalls läuft meine Ausgabe fast mit der Meldung "voraus" über. Aber keine "Stop" Nachricht.
Hab ich nciht dran gedacht^^ Aber stimmt, wenn du alle sim EDT ausführst, friert das Frame dann ein. deine While-Schleife in nen neuen Thread gepackt schaut so aus:
Java:
newThread(()->{while(buttonStatus)try{System.out.println("Voraus");}catch(Exception e){// TODO Auto-generated catch block
e.printStackTrace();}}).start();
Hab ich nciht dran gedacht^^ Aber stimmt, wenn du alle sim EDT ausführst, friert das Frame dann ein. deine While-Schleife in nen neuen Thread gepackt schaut so aus:
Java:
newThread(()->{while(buttonStatus)try{System.out.println("Voraus");}catch(Exception e){// TODO Auto-generated catch block
e.printStackTrace();}}).start();
Genau das funktionier wie erhofft - besten Dank dafür.
Unter Eclipse für ein .jar Programm läuft das sehr gut.
Jedoch bekomme ich in Android Studio hierbei einen Fehler.
"Lambda Expressions are not supported at this language level"
Scheint also ein Feature von Java 8 zu sein?
Wie könnte man obigen Code Java 7 kompatibel umschreiben?