java绘制矩形是单向的,而不是双向的
大家好,我有一些java代码可以画一个矩形,我曾经只向右拖动,即使我向左拖动,也会向右拖动,这是代码,我有什么帮助吗java绘制矩形是单向的,而不是双向的,java,Java,大家好,我有一些java代码可以画一个矩形,我曾经只向右拖动,即使我向左拖动,也会向右拖动,这是代码,我有什么帮助吗 public void mouseDragged(MouseEvent e) { Point p = e.getPoint(); int width = Math.max(selection.x - e.getX(), e.getX() - selection.x);
public void mouseDragged(MouseEvent e) {
Point p = e.getPoint();
int width = Math.max(selection.x - e.getX(), e.getX() - selection.x);
int height = Math.max(selection.y - e.getY(), e.getY() - selection.y);
selection.setSize(width, height);
repaint();
让我们做一些简单的代数
selection.x - e.getX()
与
- (e.getX() - selection.x)
所以你的表达是:
Math.max(- (e.getX() - selection.x), e.getX() - selection.x)
因为正数总是更大,所以它总是选择正数,因此你永远不会得到宽度/高度为负的矩形。让我们做一些简单的代数
selection.x - e.getX()
与
- (e.getX() - selection.x)
所以你的表达是:
Math.max(- (e.getX() - selection.x), e.getX() - selection.x)
由于正面版本总是更大,它总是选择正面答案,因此你永远不会得到宽度/高度为负的矩形。记住,
矩形
(和图形#填充矩形
和图形#绘制矩形
)不会渲染宽度/高度为负的矩形
你需要两件事
鼠标按下事件中获取锚点
public void mousePressed(MouseEvent e) {
clickPoint = new Point(e.getPoint());
}
然后,您需要确定哪一点最小,并将其作为起点,哪一点最大,并将其用于标注
public void mouseDragged(MouseEvent e) {
int minX = Math.min(e.getX(), clickPoint.x);
int minY = Math.min(e.getY(), clickPoint.y);
int maxX = Math.max(e.getX(), clickPoint.x);
int maxY = Math.max(e.getY(), clickPoint.y);
selection.x = minX;
selection.y = minY;
selection.width = maxX - minX;
selection.height = maxY - minY;
repaint();
}
请记住,Rectangle
(和Graphics#fillRect
和Graphics#drawRect
)不会渲染宽度/高度为负的矩形
你需要两件事
当前鼠标点(或案例中的拖动点)
第一次按下鼠标的点(定位点或原点)
您应该从鼠标按下事件中获取锚点
public void mousePressed(MouseEvent e) {
clickPoint = new Point(e.getPoint());
}
然后,您需要确定哪一点最小,并将其作为起点,哪一点最大,并将其用于标注
public void mouseDragged(MouseEvent e) {
int minX = Math.min(e.getX(), clickPoint.x);
int minY = Math.min(e.getY(), clickPoint.y);
int maxX = Math.max(e.getX(), clickPoint.x);
int maxY = Math.max(e.getY(), clickPoint.y);
selection.x = minX;
selection.y = minY;
selection.width = maxX - minX;
selection.height = maxY - minY;
repaint();
}
用代数!数学会给你答案用代数!数学会给你答案的谢谢,它目前在mousedrag活动中,我尝试过这个,但是我应该为int x和int y添加什么?非常感谢,一般来说,你不应该添加任何内容。你需要做的是确定maxX和minX,然后宽度变为maxX-minX,x点变为minX,然后,很明显,对于Y来说,同样的事情要绘制我选择的矩形。设置大小(宽度,高度);,好的,那么,看看我是如何计算位置和大小的,你需要用这些值替换选择的绘画…hm iv完成了你所说的,它现在在我单击时绘制一个矩形,但不会拖动,我会继续尝试使用你提供的信息,谢谢!谢谢,它目前在mousedrag事件中,我尝试过这个,但是我应该为int x和int y添加什么呢?非常感谢,一般来说,你不应该添加任何内容。你需要做的是确定maxX和minX,然后宽度变为maxX-minX,x点变为minX,然后,很明显,对于Y来说,同样的事情要绘制我选择的矩形。设置大小(宽度,高度);,好的,那么,看看我是如何计算位置和大小的,你需要用这些值替换选择的绘画…hm iv完成了你所说的,它现在在我单击时绘制一个矩形,但不会拖动,我会继续尝试使用你提供的信息,谢谢!