2011-05-18 20 views
0

我正在實現一個擴展了JPanel的類,並且這個類被添加到一個JTabPane中,並且你可以在繪製程序的區域上繪製東西,但是當繪製一個新的它會加入前面的繪圖點,爲什麼會這樣呢? 並在for循環中有一個-2的arrayList的大小,我可以知道爲什麼它需要?我試圖刪除它,它會導致錯誤。 enter image description here劃線連接在一起而不是自己的

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.util.ArrayList; 
import javax.swing.BorderFactory; 
import javax.swing.JPanel; 

public class STDrawingArea extends JPanel{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    ArrayList<Point> Points = new ArrayList<Point>(); 

    public STDrawingArea() 
    { 

     setBorder(BorderFactory.createLineBorder(Color.black)); 
     setBackground(Color.WHITE); 
     addMouseMotionListener(new MouseAdapter() { 
      public void mouseDragged(MouseEvent e) { 
       Points.add(e.getPoint()); 
       System.out.println("Dragged"); 
       repaint(); 

       } 

      }); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(700,600); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     for(int i = 0 ; i < Points.size()-2;i++) 
     { 
      Point p1 = Points.get(i); 
      Point p2 = Points.get(i+1); 
      g.drawLine(p1.x, p1.y, p2.x, p2.y); 

     } 

    } 

    public void clearDrawings() 
    { 
     Points.clear(); 
     repaint(); 
    } 
} 

回答

1

是有一個-2列表大小檢查,但我認爲你有2個單位遞增我:

i += 2; 

達到你想要的結果。 試試這個:

for(int i = 0 ; i < Points.size()-2;i+=2) 
     { 
      Point p1 = Points.get(i); 
      Point p2 = Points.get(i+1); 
      g.drawLine(p1.x, p1.y, p2.x, p2.y); 

     } 

編輯:

看着你的照片不能似乎線路連接。我看到你的線條之間有空白。 可能mouseDragged不是正確的使用方法。它引發了很多MouseEvent事件,使得你的代碼繪製了很多不連續的行,其中一行接近其他行。 嘗試使用MousePressed或MouseClicked方法做同樣的事情。我想你會看到你現在的代碼是正確的。

小費: 在Java約定,現場和變量應該有低的情況下的第一個字母開始,所以改變你點聲明是這樣的:

ArrayList<Point> points = new ArrayList<Point>(); 
+0

什麼是,你能解釋一下檢查? – sutoL 2011-05-18 09:23:46

+0

@kyrouge:抱歉我的英文不好。我的意思是你正在檢查我 Heisenbug 2011-05-18 09:33:17

+0

嘗試過,但它不工作 – sutoL 2011-05-19 03:00:52

相關問題