如何用鼠标绘制正方形

时间:2014-02-27 21:24:55

标签: java jframe draw

我正在尝试做的事情基本上就是当您单击并拖动鼠标制作正方形时,您可以在桌面上执行的操作。问题是我不知道如何让它“向后”绘制,或者当你开始一个新的方块时如何清理以前的参数。这是整个代码:

public void paint (Graphics j){
 super.paint(j);
   j.drawRect(x,y,z,w);

}

private void formMousePressed(java.awt.event.MouseEvent evt) {                                  
    x=evt.getX();
    y=evt.getY();

    repaint();       
} 

 private void formMouseDragged(java.awt.event.MouseEvent evt) {                                  
    z=evt.getX();
    w=evt.getY();

     repaint();
}

2 个答案:

答案 0 :(得分:1)

drawRect的签名是:drawRect(int x, int y, int width, int height)。您需要计算正方形的左上角以及宽度和高度。

左上角是(min(x, z), min(y, w)) 宽度为abs(x-z),高度为abs(y-w)

把它们放在一起我们得到了

尝试

j.drawRect(Math.min(x, z), Math.min(y, w), Math.abs(x - z), Math.abs(y - w));

为什么这样做?那么你得到2分。众所周知,2点可以确定一个正方形(对角)。第一个问题是你必须将你给出的点转换成java喜欢的输入。在这种情况下,您首先需要左上角。你不知道你在哪个角落,或实际上它们都不是。

那么我们知道左上角的做什么?我们知道它的x值是正方形中存在的最小x值。我们也知道,至少有两个点在同一个边缘上。使用此信息,我们可以确定左上角的x坐标是我们2个点的最小x值。或min(x, z)。我们使用相同的程序来找到y坐标。

现在宽度和高度都很容易。宽度是右边缘 - 左边缘。我们不知道哪一点是右侧,哪一侧是左侧,但无关紧要。如果我们取差值的绝对值总会给你积分之间的积极差异。在这种情况下abs(x-z)。高度过程相同。

关于重置方块,尝试添加formMouseReleased方法并将x,y,z,w设置为0.

答案 1 :(得分:0)

我认为你可能会创建一个重置参数的方法 类似于:在您的Mouse类中使用void modifyMouse() //你的参数= 0

如果你澄清你的问题,我可能会尝试给你一个更好的帮助,现在尝试一下。