简单草图的代码效果不佳

code for simple sketching doesnot work well

我是 java 和 java 图形方面的新手。我写了一个简单的草图代码,但效果不佳。当我快速拖动鼠标时,一些像素会丢失。这是我的代码..

package test;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;

public class testdraw extends JPanel{
    public int x1;
    public int y1;
    public int x2;
    public int y2;
    public testdraw(){
    addMouseMotionListener(new MouseAdapter() {

        public void mouseDragged(MouseEvent e){
            x2=e.getX();
            y2=e.getY();
            repaint();
            x1=x2;
            y1=y2;

        }


    });

}
    public void paintComponent(Graphics g){

        Graphics2D g2=(Graphics2D)g;
        g2.drawLine(this.x1, this.y1,this.x2,this.y2);;

    }
}   

主要class..

package test;

import javax.swing.JFrame;
public class testdrawmain {

    public static void main(String args[]){
        JFrame frame=new JFrame();
        testdraw td=new testdraw();
        frame.add(td);
        frame.setSize(350, 350);
        frame.setVisible(true);

   }

}

谁能告诉我哪里出了问题。请建议我。提前致谢。

        x2=e.getX();
        y2=e.getY();
        repaint();
        x1=x2;
        y1=y2;

x1 和 x2 将是 same,无论您在哪里调用 repaint() -- 不是很有用。

而是在获取鼠标位置之前执行分配。

        x1=x2;
        y1=y2;
        x2=e.getX();
        y2=e.getY();
        repaint();

如果要绘制所有点,则创建一个 ArrayList<Point>,添加到鼠标运动侦听器中的列表,并在 paintComponent 中遍历列表。

还有:

  • paintComponent应该被保护,而不是public。
  • 必须在您自己的覆盖中调用超级的paintComponent方法。
  • 请看this example

编辑
您的评论:

My application can draw like paint...so when drag mouse every time start and end coordinate will change

那么您有两个选择:使用 ArrayList<ArrayList<Point>> 或在 BufferedImage 上绘图并在您的 paintComponent 方法中显示 BufferedImage。