如何将eventListener的结果存储为对象?

时间:2018-11-26 06:24:46

标签: java canvas arraylist vaadin

我有一些鼠标事件,正在使用它们在画布上绘制框。我创建了一个BoundingBox类,其中包含一个构造函数和get-set方法,该方法包含要在画布上绘制的框的x和y坐标,宽度和高度。但是,由于我有几个鼠标事件(到目前为止,我只完成了mouseDown),所以我不知道如何存储它们。到目前为止,我的mouseDown事件在单击时创建了一个Div,其中包含x-y coordi,但由于我尚未能够绘制框,所以还没有宽度和高度。请注意,我正在使用Vaadin框架,谢谢!

这是我的mouseDown eventListener:

element.addEventListener("mousedown", event -> {  // Create a Div on Click

            Element boundingBoxResult = ElementFactory.createDiv();
            element.appendChild(boundingBoxResult);

            JsonObject evtData = event.getEventData();

            double xcoordi = evtData.getNumber("event.x");
            double ycoordi = evtData.getNumber("event.y");
            boundingBoxResult.setAttribute("data-x", String.format("%f", xcoordi));
            boundingBoxResult.setAttribute("data-y", String.format("%f", ycoordi));

BoundingBox类:

package com.vaadin.starter.beveragebuddy.ui.components;

public class BoundingBox {

    private double xcoordi;
    private double ycoordi;
    private double width;
    private double height;

    public BoundingBox(double xcoordi, double ycoordi, double width, double height) {
        this.xcoordi = xcoordi;
        this.ycoordi = ycoordi;
        this.width = width;
        this.height = height;
    }


    public double getXcoordi() {
        return xcoordi;
    }

    public void setXcoordi(double xcoordi) {
        this.xcoordi = xcoordi;
    }

    public double getYcoordi() {
        return ycoordi;
    }

    public void setYcoordi(double ycoordi) {
        this.ycoordi = ycoordi;
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }
}

会有更好的选择(例如将它们存储在ArrayLists中),因为将来我将绘制多个框,这意味着我将不得不保存许多坐标。非常感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定您以后如何使用它们,但是您可以将它们存储在父类的变量中(即在其中添加侦听器的位置)。像这样:

List<Element> results = new ArrayList<>();

// ...

element.addEventListener("mousedown", event -> {  // Create a Div on Click
        Element boundingBoxResult = ElementFactory.createDiv();
        results.add(boundingBoxResult)

        // ...
}

然后,该列表与您的父实例(也是div?)的寿命一样长。请记住,如果您要自己记录这样的元素,则可能还需要在某些时候清除它。