2016-12-07 7 views
1

Dieser Abschnitt meines Programms enthält eine Karte, die auf eine Leinwand gezeichnet wird, und der Benutzer wird aufgefordert, den Ort auszuwählen, an dem ein Artikel platziert werden soll.Wie entferne ich einen Event-Handler?

Ich habe einen Event-Handler eingerichtet, um die x, y-Koordinaten des Mausklicks aufzuzeichnen, aber das muss ich nur einmal aufzeichnen.

Das ist mein Event-Handler zur Zeit:

EventHandler boatHandler = new EventHandler<javafx.scene.input.MouseEvent>(){ 
     public void handle(javafx.scene.input.MouseEvent event){ 
      newX = event.getSceneX(); 
      newY = event.getSceneY(); 
      System.out.printf("setOnMouseClicked X = %f, Y = %f\n", newX, newY); 
      newX = Math.round(newX/16) *16; 
      newY = Math.round(newY/16) *16; 
      System.out.printf("Rounded to multiple of 16 X = %f, Y = %f\n", newX, newY); 
      if(newX > 0 || newY > 0){ 
       gc.drawImage(wItemset[0], newX, newY); 
      } 
     } 
    }; 

Ich würde den Event-Handler möchte einmal stoppen Hören ich die x abgerufen haben, y-Werte, aber ich bin nicht sicher, wie. Aus der Lektüre Fragen des andere habe ich festgestellt, dass ich möglicherweise mit dem Event-Handler entfernen konnte:

canvas.removeEventHandler(MouseEvent.MOUSE_PRESSED, boatHandler); 

Aber dies nicht innerhalb der wenn Anweisung geschrieben werden kann, so dass ich bin mir nicht sicher, wie ich auslösen würde, es.

Nach dem x haben y-Werte aufgezeichnet worden ist, plane ich für einen anderen Eintrag einen ähnlichen Code-Block haben, und ich brauche, um sicherzustellen,

  1. Der richtige Element platziert wird
  2. Die x, y-Werte sind für dieses Element und nicht das vorherige Element

Edit: das ist die Linie, die ich verwendet, um meine Eventhandler

hinzufügen
canvas.addEventHandler(MouseEvent.MOUSE_PRESSED, boatHandler); 

Antwort

4

Sie es in Ihren Event-Handler auslösen könnten

wird es etwas wie die

EventHandler boatHandler = new EventHandler<javafx.scene.input.MouseEvent>(){ 
     public void handle(javafx.scene.input.MouseEvent event){ 
     //code used for retrieving x,y values 
     canvas.removeEventHandler(MouseEvent.MOUSE_PRESSED, this); 

     } 
} 
+2

sein Es sollte beachtet werden, dass dies nicht mit Lambda-Ausdrücke nicht funktioniert. Jedoch gibt es kein solches Problem in diesem Fall ... – fabian

+0

Perfekt, arbeitete sofort dank – Dan

+0

@fabian, ich habe nicht viel Erfahrung mit Lambdas in Java 8, also könnten Sie mir erklären, warum das nicht funktioniert? – user902383

Verwandte Themen