2016-12-07 3 views
1

Этот этап моей программы имеет карту, которая нарисована на холсте, и пользователю предлагается выбрать местоположение, в котором они хотели бы разместить объект.Как удалить обработчик событий?

Я установил обработчик события для записи координат x, y щелчка мыши, но это то, что мне нужно только записать один раз.

Это мой обработчик событий в данный момент:

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); 
      } 
     } 
    }; 

Я хотел бы обработчик события, чтобы остановить прослушивание, как только я извлек х, у значения, но я не уверен в том, как. С вопросами чтения друга я обнаружил, что я мог потенциально удалить обработчик событий с помощью:

canvas.removeEventHandler(MouseEvent.MOUSE_PRESSED, boatHandler); 

Но это не может быть записано в если заявление на, так что я не уверен в том, как я бы вызвать Это.

После й, у значения было записано, я планирую иметь подобный блок кода для другого элемента, и мне нужно убедиться, что:

  1. Правильный объект помещается
  2. х, у значения для этого элемента, а не предыдущего пункта

Edit: Это линия, которую я использовал, чтобы добавить свой EventHandler

canvas.addEventHandler(MouseEvent.MOUSE_PRESSED, boatHandler); 

ответ

4

вы можете запустить его в обработчик событий

это будет что-то подобное

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

Следует отметить, что это не работает с лямбдой-выражением. Однако в этом случае нет такой проблемы ... – fabian

+0

Отлично, сработал сразу спасибо – Dan

+0

@fabian, у меня нет большого опыта работы с лямбдами в java 8, так что вы могли бы объяснить мне, почему это не сработает? – user902383

Смежные вопросы