JAVA FX 每一个结点绑定各自的处理事件

在 通常的 Java Fx 的教程中, 都只是用一个普通的结点来绑定一个处理事件, 如建立一个圆,再在圆上绑定一个鼠标处理事件。可当程序复杂性提升,一个场景中的结点数不少的时候,再一个一个去绑定,那不得把程序员小哥哥给累死啊。怎么办了?能够用数组啊,但是数组元素的事件绑定和普通元素的事件绑定同样吗?java

踩坑

Pane pane = new Pane();
Circle[][] circles = new Circle[6][6];
for(int i = 1; i <= 5; i++){
    for(int j = 1; j <= 5; j++){
        circles[i][j] = new Circle(i * 100 + 50, j * 100 + 50, 45 );
        circles[i][j].setFill(new Color(1,1,1,0));
        circles[i][j].setStroke(Color.BLACK);
        int finalI = i;
        int finalJ = j;
        circles[i][j].setOnMousePressed(e -> {
            System.out.println(finalI + " " + finalJ);
        });
        pane.getChildren().add(circles[i][j]);
    }
}
  • 上述代码时好时坏, 有时不管点击那个圆,都输出5 5
  • 这多是JVM处理的锅
  • 因而。。。

最基本方法--处理类

class myHandler implements EventHandler<MouseEvent> {

    private int x;
    private int y;

    @Override
    public void handle(MouseEvent mouseEvent) {
        System.out.printf("the circle position is (%d,%d)\n", x, y);
    }

    myHandler(int _x, int _y){
        x = _x;
        y = _y;
    }
}
  • setOnMousePressed 方法须要实现了 EventHandler接口的类实例做为参数
  • 系统已经建立 Handler 类(一个实现了Eventhandler接口的类),因为该类只是单纯地实现了Eventhandler接口,而没有其余功能,因此咱们要实现一个本身的handler类
  • 测试了一下,若是将myHandler类中的x,y的访问权限设为public, 会致使点击全部的结点都会输出(5,5),不懂, 甩锅给JVM吧git

    完整代码

    multiNodeMultiEventHandler程序员

Note

  • 之后外部类用不到的成员都设置为private吧
相关文章
相关标签/搜索