我实现了一个使用鼠标点击动态创建折线的程序。每次单击鼠标都会在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());
}
答案 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;
}