我有一些鼠标事件,正在使用它们在画布上绘制框。我创建了一个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中),因为将来我将绘制多个框,这意味着我将不得不保存许多坐标。非常感谢您的帮助,谢谢!
答案 0 :(得分:0)
我不确定您以后如何使用它们,但是您可以将它们存储在父类的变量中(即在其中添加侦听器的位置)。像这样:
List<Element> results = new ArrayList<>();
// ...
element.addEventListener("mousedown", event -> { // Create a Div on Click
Element boundingBoxResult = ElementFactory.createDiv();
results.add(boundingBoxResult)
// ...
}
然后,该列表与您的父实例(也是div?)的寿命一样长。请记住,如果您要自己记录这样的元素,则可能还需要在某些时候清除它。