这是我老师的书面任务:在点击鼠标后生成的两点之间的小程序中画一条线。之后,当您第三次按下鼠标时,在这三个点之间生成一个三角形。 我已经到了这一点,我可以生成连接这两个点的线,除了它们首先从(0,0)开始到第一次鼠标点击,而不是第一次鼠标点击到第二次,它不会生成一个三角形使用绘制多边形函数时。
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Crtac2 extends Applet {
private int lastX;
private int lastY;
public int getLastX() {
return lastX;
}
public void setLastX(int lastX) {
this.lastX = lastX;
}
public int getLastY() {
return lastY;
}
public void setLastY(int lastY) {
this.lastY = lastY;
}
public void init() {
this.setForeground(Color.BLACK);
this.addMouseListener(new ClickListener());
}
private class PositionRecorder extends MouseAdapter {
public void mousePressed(MouseEvent e) {
setLastX(e.getX());
setLastY(e.getY());
}
}
private class ClickListener extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
int iks [] = new int[3];
int ips[]=new int[3];
int x= e.getX();
int y= e.getY();
Graphics g;
g=getGraphics();
for(int i = 0; i<3;i++) {
g.drawLine(lastX, lastY, x, y);
iks[i]=x;
ips[i]=y;
setLastX(x);
setLastY(y);
}
g.fillPolygon(iks, ips, 3);
}
}
}
答案 0 :(得分:0)
以下是我看到的问题:
1)您有两个鼠标侦听器,但只添加一个。 PositionRecorder没有被添加,因此它不会被调用。这永远不会设置lastX或lastY,这意味着它们默认为0,因此您的第一个点看起来像0,0。 想想你是否真的需要两个。我怀疑你可以将它们合并为一个。
2)拥有一个&#39; lastX&#39;或者&#39; lastY&#39;是不够的,只存储1点击的信息。您需要能够存储3次点击信息。所以你需要一个数组或一个列表。例如列出lastX = new ArrayList&lt;&gt;(); (列表将允许您稍后支持更多点击次数...) 当用户点击时,您需要知道他们是否已经点击过,因此您可以存储在正确的位置[0],[1],[2]。你应该考虑存储一个&#39;索引&#39;或者&#39; clickCount&#39;跟踪此列表中位置的类型变量。
3)想想当用户第四次点击时会发生什么......知道你是否要替换现有的点,或忽略输入,或者使其成为多边形......
祝你好运。