通过生成的鼠标单击在applet中绘制三角形和线条

时间:2018-04-12 17:21:20

标签: java

这是我老师的书面任务:在点击鼠标后生成的两点之间的小程序中画一条线。之后,当您第三次按下鼠标时,在这三个点之间生成一个三角形。 我已经到了这一点,我可以生成连接这两个点的线,除了它们首先从(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);

    }

}

}

1 个答案:

答案 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)想想当用户第四次点击时会发生什么......知道你是否要替换现有的点,或忽略输入,或者使其成为多边形......

祝你好运。