drawPolyline() 绘制不正确

drawPolyline() does not paint correctly

我实现了一个使用鼠标点击动态创建折线的程序。每次单击鼠标都会在 ArrayList 中添加新的 Point 并将其全部绘制出来。如果我单击相同的点 returns 相同的值并将其添加到列表但它会在 0、0 处绘制新行。我想知道是什么原因。

private ArrayList<Point> liste;

public void paintComponent (Graphics page)
{
    super.paintComponent(page);

    int xn[] = new int[liste.size()];
    int yn[] = new int[liste.size()];
    for(Point pot : liste){
        int ab = liste.indexOf(pot);
        xn[ab] = pot.x;
        yn[ab] = pot.y;

    }
    page.setColor (Color.red);

    page.drawPolyline(xn, yn, xn.length);
}

public void mousePressed(MouseEvent arg0) {
    liste.add(arg0.getPoint());
    repaint();
    System.out.println(arg0.getPoint());

}

http://i.hizliresim.com/r9YgkM.png

因为你用indexOf在数组中找索引

由于Point implements equals(Object)的方式,如果您点击了完全相同的点,indexOf将return第一个匹配Point的索引,而不是第二个(或后续)发生。因此,对应于第二次(或后续)出现的数组元素将保持其默认值零。

相反,只需在循环外声明 ab,并在循环内递增:

int ab = 0;
for(Point pot : liste){
    xn[ab] = pot.x;
    yn[ab] = pot.y;
    ++ab;
}