Java Swing Linien zeichnen mit Mausklick und ziehen

Ich möchte eine Frage zurückbringen, die zuvor gestellt wurde:Java Linie zeichnen, während die Maus bewegt wird

"Ich möchte meiner Anwendung eine Funktion hinzufügen, mit der der Benutzer eine gerade Linie zeichnen kann, indem er mit der Maus auf die Startposition klickt und diese an der Endposition loslässt. Die Linie sollte sich bewegen, während sich die Maus bewegt, bis sie endgültig losgelassen wird Ähnlich wie mit der Microsoft Paint-Anwendung eine Linie gezeichnet werden kann.

Wie kann dies implementiert werden, damit die Linie während der Bewegung neu gestrichen wird, ohne dass andere Elemente neu gestrichen werden, die möglicherweise bereits in diesem rechteckigen Bereich gezeichnet wurden? "

Frage ist: Wie kann ich mehrere Linien zeichnen, wobei die alten Linien noch vorhanden sind?

Dies ist der Code, der für mich funktioniert, aber die vorherige Zeile wird gelöscht, sobald Sie eine neue zeichnen:

public static void main(String args[]) throws Exception {
    JFrame f = new JFrame("Draw a Red Line");
    f.setSize(300, 300);
    f.setLocation(300, 300);
    f.setResizable(false);
    JPanel p = new JPanel() {
        Point pointStart = null;
        Point pointEnd   = null;
        {
            addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    pointStart = e.getPoint();
                }

                public void mouseReleased(MouseEvent e) {
                    pointStart = null;
                }
            });
            addMouseMotionListener(new MouseMotionAdapter() {
                public void mouseMoved(MouseEvent e) {
                    pointEnd = e.getPoint();
                }

                public void mouseDragged(MouseEvent e) {
                    pointEnd = e.getPoint();
                    repaint();
                }
            });
        }
        public void paint(Graphics g) {
            super.paint(g);
            if (pointStart != null) {
                g.setColor(Color.RED);
                g.drawLine(pointStart.x, pointStart.y, pointEnd.x, pointEnd.y);
            }
        }
    };
    f.add(p);
    f.setVisible(true); 
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage