Как сохранить результаты eventListener как объект? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть несколько событий мыши, которые я использую для рисования рамок на холсте.Я создал класс BoundingBox, который содержит методы constructer и get-set, содержащие координаты x и y, ширину и высоту блоков, которые нужно нарисовать на холсте.Однако, поскольку у меня есть несколько событий мыши (я только сделал mouseDown), я не знаю, как их хранить.Мое событие mouseDown до сих пор создает Div по щелчку, содержащий координаты xy, но без ширины и высоты, так как я еще не смог нарисовать прямоугольники.Обратите внимание, что я использую фреймворк Vaadin, спасибо!

Вот мой mouseLown 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 голосов
/ 27 ноября 2018

Я не уверен, как вы используете их позже, но вы можете просто сохранить их в переменной в родительском классе (то есть, где вы добавляете слушателя).Что-то вроде:

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

// ...

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

        // ...
}

Тогда список живет столько же, сколько и ваш родительский экземпляр (также div?).Помните, что если вы ведете собственный учет таких элементов, возможно, вам также понадобится очистить их в какой-то момент.

...