2012-11-01 42 views
0

我必須在JFRame中通過鼠標畫線。 這裏是我的方法的paintComponent:Swing中的免費手機 - 擺脫bug「索引超出限制例外」

public void paintComponent(Graphics g){ 
Graphics2D g2d = (Graphics2D) g; 
if(pointCollection.get(0)!=null && pointCollection.get(pointCollection.size())!=null){ 
    g2d.setPaint(Color.BLUE); 
    g2d.setStroke(new BasicStroke(1.5f)); 
    g2d.draw(line2d); 
} 
} 

這是基於我實現的方法我從接口的MouseMotionListener和MouseListener的都有。

public void mouseDragged(MouseEvent arg0) { 

pointCollection = new ArrayList<Point>(50); 
pointCollection.add(arg0.getPoint()); 
    for (int index = 0; index < pointCollection.size(); index++){ 
    line2d=new Line2D.Double(pointCollection.get(index), pointCollection.get(index+1)); 
    //repaint(); 
    } 
} 

這個想法是收集點,而不是在它們之間畫線,以便得到一條曲線而不是一條直線。你能幫我找出我正在做的邏輯錯誤嗎?

謝謝!

回答

1

您將要通過集合的結尾。

public void mouseDragged(MouseEvent arg0) { 

    for (int index = 0; index < (pointCollection.size() - 1); index++){ 
    line2d=new Line2D.Double(pointCollection.get(index), 
     pointCollection.get(index + 1)); 
    //repaint(); 
    } 

}

+0

謝謝吉爾伯特爲您的答案! –