2013-11-24 35 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"); 

    } 
}