drawPolyline()无法正确绘制

时间:2016-05-18 08:46:05

标签: java swing arraylist polyline

我实现了一个使用鼠标点击动态创建折线的程序。每次单击鼠标都会在ArrayList中添加新Point并将其全部绘制出来。如果我点击相同的Point它返回相同的值并将其添加到列表但它将新行绘制为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

1 个答案:

答案 0 :(得分:3)

这是因为你使用indexOf来查找数组中的索引。

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

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

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