JavaFX从lambda表达式中删除事件处理程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX从lambda表达式中删除事件处理程序相关的知识,希望对你有一定的参考价值。
我正在尝试向画布添加事件处理程序,当满足条件时,该画布将自身删除。
我尝试这样做,但出现错误,提示该变量可能尚未初始化。
EventHandler<MouseEvent> canvasHandler = e ->
double x = e.getX();
double y = e.getY();
boolean last = false;
if (Math.abs(x - lastX) < 20f) x = lastX;
if (Math.abs(y - lastY) < 20f) y = lastY;
if (points.size() > 2)
if (Math.abs(x - points.get(0).getKey()) < 20f && Math.abs(y - points.get(0).getValue()) < 20f)
x = points.get(0).getKey();
y = points.get(0).getValue();
last = true;
points.add(new Pair<Double, Double>(x, y));
lastX = x;
lastY = y;
gc.lineTo(x, y);
if (!last)
gc.strokeOval(x - 5f, y - 5f, 10f, 10f);
else
canvas.removeEventHandler(MouseEvent.MOUSE_CLICKED, canvasHandler);
gc.stroke();
;
canvas.addEventHandler(MouseEvent.MOUSE_CLICKED, canvasHandler);
答案
如果使用匿名类而不是lambda,则可以从EventHandler
方法内部使用this
引用handle
:
EventHandler<MouseEvent> canvasHandler = new EventHandler<>()
@Override public void handle(MouseEvent event)
// handle event...
if (/* condition */)
canvas.removeEventHandler(MouseEvent.MOUSE_CLICKED, this);
);
canvas.addEventHandler(MouseEvent.MOUSE_CLICKED, canvasHandler);
以上是关于JavaFX从lambda表达式中删除事件处理程序的主要内容,如果未能解决你的问题,请参考以下文章
如何对JavaFX lambda表达式进行反向工程并获取EventHandler和ActionListener的类定义