Этот этап моей программы имеет карту, которая нарисована на холсте, и пользователю предлагается выбрать местоположение, в котором они хотели бы разместить объект.Как удалить обработчик событий?
Я установил обработчик события для записи координат 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);
Но это не может быть записано в если заявление на, так что я не уверен в том, как я бы вызвать Это.
После й, у значения было записано, я планирую иметь подобный блок кода для другого элемента, и мне нужно убедиться, что:
- Правильный объект помещается
- х, у значения для этого элемента, а не предыдущего пункта
Edit: Это линия, которую я использовал, чтобы добавить свой EventHandler
canvas.addEventHandler(MouseEvent.MOUSE_PRESSED, boatHandler);
Следует отметить, что это не работает с лямбдой-выражением. Однако в этом случае нет такой проблемы ... – fabian
Отлично, сработал сразу спасибо – Dan
@fabian, у меня нет большого опыта работы с лямбдами в java 8, так что вы могли бы объяснить мне, почему это не сработает? – user902383