2016-05-18 2 views
0

マウスクリックを使用してポリラインを動的に作成するプログラムを実装します。マウスをクリックするごとに、新しいPointがArrayListに追加され、すべてが描画されます。同じPointをクリックすると同じ値が返され、リストに追加されますが、新しい行が0になります。理由は何ですか?あなたは配列のインデックスを検索しindexOfを使用しているためdrawPolyline()が正しくペイントしない

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

答えて

3

それはあります。そのための方法Point implements equals(Object)

、あなたは正確に同じポイントをクリックした場合、indexOfは最初Pointのマッチングではなく、第二(またはそれ以降)に現れるインデックスを返します。したがって、2番目(またはそれ以降)のオカレンスに対応する配列要素は、デフォルト値の0のままです。ループ内

代わりに、単にループ外abを宣言し、インクリメント:

int ab = 0; 
for(Point pot : liste){ 
    xn[ab] = pot.x; 
    yn[ab] = pot.y; 
    ++ab; 
} 
関連する問題