2013-11-24 86 views
2

我想創建一個程序,我可以畫一個徒手畫。 我創建了一個點數組,它保存了鼠標的當前點。 問題是當我釋放鼠標,然後在另一個位置再次按下它時,它會在釋放點與按下的點之間繪製線條。 我應該添加或更改什麼?FreeHand drawing Java


import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Mouse extends JPanel implements MouseListener, MouseMotionListener { 
    private int index = 0; 
    private Point[] arr = new Point[100000]; 

    public Mouse(String name) { 
     super(); 
     index = 0; 
     this.addMouseListener(this); 
     this.addMouseMotionListener(this); 
     JFrame fr = new JFrame(name); 
     fr.add(this); 
     fr.setSize(500, 500); 
     setBackground(Color.green); 
     fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     fr.setVisible(true); 

    } 
    public void paintComponent(Graphics g) { 
     super.paintComponents(g); 
     for (int i = 0; i < index - 1; i++) 
      g.drawLine(arr[i].x, arr[i].y, arr[i + 1].x, arr[i + 1].y); 
    } 

    public void mouseDragged(MouseEvent e) { 
     arr[index] = new Point(e.getX(), e.getY()); 
     index++; 
     System.out.println(index); 
     repaint(); 
    } 
    public void mousePressed(MouseEvent e) { 
     arr[index] = new Point(e.getX(), e.getY()); 
     index++; 
     System.out.println(index); 
     repaint(); 
    } 

    public void mouseExited(MouseEvent e) {} 
    public void mouseClicked(MouseEvent e) {} 
    public void mouseEntered(MouseEvent e) {} 
    public void mouseReleased(MouseEvent e) {} 
    public void mouseMoved(MouseEvent e) {} 

    public static void main(String[] args) { 
     Mouse mouse = new Mouse("Mouse"); 
    } 
} 
+3

有擡筆功能? – JFA

回答

2

實現方法的mouseReleased像這樣:

public void mouseReleased(MouseEvent e) 
{ 
    arr = new Point[100000]; 
    index = 0; 
} 

,這將導致它,你期望它的工作。

+0

非常感謝你! 這是如此簡單,我怎麼也沒有想通過我自己.. 無論如何thankssssss – shaiws

+0

沒問題,subash的代碼是一個更好的方式來做到這一點,但是我想修改你的代碼儘可能少,所以我堅持你的原創設計。 – Sean

1

試試這個..

public class Mouse extends JPanel implements MouseListener, MouseMotionListener { 
    private int x1 ; 
    private int y1 ; 
    private int cx,cy; 
    public Mouse(String name) { 
     super(); 
     this.addMouseListener(this); 
     this.addMouseMotionListener(this); 
     JFrame fr = new JFrame(name); 
     fr.add(this); 
     fr.setSize(500, 500); 
     setBackground(Color.green); 
     fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     fr.setVisible(true); 

    } 

    public void paintComponent(Graphics g) { 
     super.paintComponents(g); 
     g.drawLine(cx, cy, x1, y1); 
    } 

    public void mouseDragged(MouseEvent e) { 
     x1 = e.getX(); 
     y1 = e.getY(); 
     cx = x1; 
     cy = y1; 
     repaint(); 
    } 

    public void mousePressed(MouseEvent e) { 

     cx = e.getX(); 
     cy = e.getY(); 
    } 

    public void mouseExited(MouseEvent e) { 
    } 

    public void mouseClicked(MouseEvent e) { 
     cx = e.getX(); 
     cy = e.getY(); 
     repaint(); 
    } 

    public void mouseEntered(MouseEvent e) { 
    } 

    public void mouseReleased(MouseEvent e) { 

    } 

    public void mouseMoved(MouseEvent e) { 
    } 

    public static void main(String[] args) { 
     Mouse mouse = new Mouse("Mouse"); 

    } 
}