我正在尝试做的事情基本上就是当您单击并拖动鼠标制作正方形时,您可以在桌面上执行的操作。问题是我不知道如何让它“向后”绘制,或者当你开始一个新的方块时如何清理以前的参数。这是整个代码:
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();
}
答案 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
如果你澄清你的问题,我可能会尝试给你一个更好的帮助,现在尝试一下。