Linien zeichnen mit der Maus auf Leinwand: Java awt

Der Versuch ist, das Zeichnen von Figuren (vorerst eine Linie) mit der Maus auf der AWT-Leinwand zu ermöglichen. Ich probiere zum ersten Mal Java-Grafiken aus. Ich bin mir also nicht sicher, wie ich vorgehen soll. Dies ist mein erster Versuch:

<code>package def.grafi;

import java.awt.Canvas;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

  public class Dra {
  Frame f = new Frame();

public void disp() {
    f.setBounds(100, 100, 200, 200);
    MosL ml = new MosL();
    Can c = new Can();
    f.add(c);
    c.addMouseListener(ml);
    c.addMouseMotionListener(ml);
    f.setVisible(true);
}

public static void main(String[] args) {
    Dra d = new Dra();
    d.disp();
}

public class MosL extends MouseAdapter {
    int sx = 0;
    int sy = 0;
    boolean onDrag = false;

    @Override
    public void mouseDragged(MouseEvent e) {
        if (onDrag) {
            int x = e.getX();
            int y = e.getY();

            Canvas comp = (Canvas) e.getSource();
            Graphics g = comp.getGraphics();
                            // comp.repaint(); << for cleaning up the intermediate lines : doesnt work :(
            g.drawLine(sx, sy, x, y);
            return;
        }
        onDrag = true;
        sx = e.getX();
        sy = e.getY();

        System.out.println("Draggg");
    }

    @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("Pressed");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        System.out.println("Released");
        if (onDrag)
            onDrag = false;
    }
}

public class Can extends Canvas {
    @Override
    public void paint(Graphics g) {

    }
}
}
</code>

Probleme: 1) Wenn das Fenster verkleinert und wiederhergestellt ist, ist die gezeichnete Linie verschwunden (aufgrund von Repaint). 2) Ich möchte, dass die Linie der Maus folgt (wenn sie gezogen wird). Die letzte Linie sollte sich vom Druckpunkt bis zum Auslösepunkt der Maus erstrecken. Rite now, wenn sich die Maus bewegt, werden neue Linien gezeichnet. Ich bin nicht sicher, wie ich die Zwischenzeilen von der Leinwand entfernen soll.

Kann mir jemand bei diesen Problemen helfen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage