Zeichnen Sie die Linie auf dem Jpanel, wenn Sie die Maus ziehen

Ich möchte 2 (oder mehr) Linien auf JPanel zeichnen, wenn die Maus zieht. Wenn ich benutzesuper.paintComponent(g) In meinem Code konnte ich keine 2 Linien auf dem Panel zeichnen, wenn ich es jedoch nicht benutzesuper.paintComponent(g)Das Ergebnis ist hässlich, wie auf dem Bild unten:

Ich verstehe, warum sich die Zeilen so verhielten.

Wie kann ich die Linien auf dem Jpanel zeichnen, wenn ich die Maus ziehe? Übrigens, die Linie vong2d.draw(line2d) manchmal ist es nicht die glatte Linie (Bild unten)

Meine Codes bisher:

<code>import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;


public class LineDrawing extends JPanel implements MouseMotionListener, MouseListener{
    Point point1;
    Point point2;
    Line2D line2d;

  public LineDrawing(){
       super();
       addMouseListener(this);
       addMouseMotionListener(this);
    }

 @Override
  public void paintComponent(Graphics g){

    //super.paintComponent(g);

       Graphics2D g2d = (Graphics2D) g;
       if(point1!=null && point2!=null){

          g2d.setPaint(Color.RED);
          g2d.setStroke(new BasicStroke(1.5f));
          g2d.draw(line2d);

         }
      }   


  @Override
  public void mouseDragged(MouseEvent e) {

    point2 = e.getPoint();
    line2d = new Line2D.Double(point1, point2); 
    repaint();

  }

   @Override
   public void mouseMoved(MouseEvent e) {

   }

   @Override
   public void mouseClicked(MouseEvent e) {

  }

   @Override
   public void mousePressed(MouseEvent e) {
     point1 = e.getPoint();

   }

  @Override
  public void mouseReleased(MouseEvent e) {

  }

 @Override
 public void mouseEntered(MouseEvent e) {

 }

 @Override
 public void mouseExited(MouseEvent e) {

}


public static void main(String a[]){
   EventQueue.invokeLater(new Runnable(){
        @Override
        public void run() {

         JFrame frame = new JFrame();
         LineDrawing linedraw= new LineDrawing();
         frame.add(linedraw);
         frame.setSize(500,500);
         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         frame.setVisible(true);   

                         }
                });
   }   
</code>

}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage