Java Swing desenha linhas com o clique do mouse e arraste

Quero trazer de volta uma pergunta que foi feita antes:java desenhar linha como o mouse é movido

"Gostaria de adicionar um recurso ao meu aplicativo que permita ao usuário desenhar uma linha reta clicando com o mouse no local inicial e liberando-o no local final. A linha deve se mover conforme o mouse se move até que seja finalmente liberado; semelhante à maneira como uma linha pode ser desenhada usando o aplicativo Microsoft Paint.

Como implementar isso para que a linha seja repintada à medida que se move sem repintar outras coisas que já podem ser desenhadas nessa área retangular? "

A pergunta é: Como posso desenhar várias linhas com as linhas antigas ainda lá?

Este é o código que funciona para mim, mas a linha anterior é apagada assim que você desenha uma nova:

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); 
}

questionAnswers(1)

yourAnswerToTheQuestion