gpt4 book ai didi

Java:矩形二维和负尺寸

转载 作者:行者123 更新时间:2023-12-01 19:13:50 24 4
gpt4 key购买 nike

我有一个脚本,用户单击一次即可开始 Rectangle2D。当他移动鼠标时,矩形会使用新坐标进行更新。他再次点击结束。然后将其存储在 ArrayList 中,并绘制所有这些项目。这一切都很好;这不是问题。

但是,如果第二次点击小于第一次(即 getWidth() 为负数),则矩形不会显示(如 the documentation 中所述)。我的修复此问题的脚本不起作用。它应该检测负值,然后 1) 递减位置值,2) 使负值变为正值。相反,它只是将整个矩形向上或向左移动(取决于哪个轴为负)并将其保持在 1px。

出了什么问题?

private void resizeRectangle(final MouseEvent e) {
double x = rectangle.getX(), y = rectangle.getY(), w = e.getX() - x, h = e.getY() - y;
if (w < 0) {
x = e.getX();
w = -w;
}
if (h < 0) {
y = e.getY();
h = -h;
}
rectangle.setRect(x, y, w, h);
}

谢谢!

更新:这更接近,但仍然不太有效:

double x = rectangle.getX();
double y = rectangle.getY();
double w = e.getX() - x;
double h = e.getY() - y;

if (w < 0) {
x = e.getX();
w = originalClickPoint.getX() - e.getX();
}
if (h < 0) {
y = e.getY();
h = originalClickPoint.getY() - e.getY();
}
rectangle.setRect(x, y, w, h);

最佳答案

分配新矩形后,您还将原点(即最初按下鼠标按钮的位置)移动到当前点。您必须将此点保存在单独的字段中(而不是矩形本身)。

x = Math.min(e.getX(), originalClickPoint.getX());
w = Math.abs(originalClickPoint.getX() - e.getX());

y = Math.min(e.getY(), originalClickPoint.getY());
h = Math.abs(originalClickPoint.getY() - e.getY());

另一种方法是不修正矩形的负宽度/高度,而是在绘制矩形时创建一个新的(修正后的)矩形。

关于Java:矩形二维和负尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7540343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com