„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie zeichnet man Rechtecke dauerhaft in einem JPanel: Verwenden von BufferedImages, um ein Überschreiben zu vermeiden?

Wie zeichnet man Rechtecke dauerhaft in einem JPanel: Verwenden von BufferedImages, um ein Überschreiben zu vermeiden?

Veröffentlicht am 11.11.2024
Durchsuche:884

How to Draw Rectangles Permanently in a JPanel: Using BufferedImages to Avoid Overwriting?

Rechtecke dauerhaft zeichnen

In Ihrer JPanel-Implementierung verschwinden Rechtecke, weil die Methode paint() frühere Zeichnungen überschreibt. Um dies zu verhindern, ändern wir unseren Ansatz:

Ein BufferedImage als Malfläche verwenden

Anstatt direkt auf dem JPanel zu zeichnen, verwenden wir ein BufferedImage (canvasImage) als unsere Malfläche. Dadurch können wir das Bild dauerhaft ändern, ohne vorherige Zeichnungen zu beeinflussen.

Benutzerdefinierte paint()-Methode

Hier ist eine modifizierte paint()-Methode, die canvasImage zum Zeichnen verwendet:

@Override
public void paint(Graphics g) {
    super.paint(g); // Handle inherited painting tasks

    Graphics2D bg = (Graphics2D) g;
    bg.drawImage(canvasImage, 0, 0, this);
}

Erstellen und Einrichten des BufferedImage

Initialisieren Sie canvasImage in Ihrem JPanel-Konstruktor wie folgt:

canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Und legen Sie den Grafikkontext fest Zeichnung:

Graphics2D cg = canvasImage.createGraphics();
cg.setColor(Color.WHITE);
cg.fillRect(0, 0, width, height);

Zeichnen von Rechtecken auf dem BufferedImage

Jetzt kann Ihre DrawRect()-Methode das CanvasImage direkt ändern:

public void DrawRect(int x, int y, int size, Color c) {
    Graphics2D cg = canvasImage.createGraphics();
    cg.setColor(c);
    cg.fillRect(x, y, size, size);
}

Zusätzliche Funktionen

Dieser Ansatz bietet mehrere Vorteile:

  • Persistentes Zeichnen: Rechtecke werden dauerhaft auf dem BufferedImage gezeichnet.
  • Optimierte Zeichnung: Anstatt das gesamte JPanel neu zu zeichnen, werden nur die geänderten Teile des Bildes neu gezeichnet aktualisiert.
  • Unterstützt Rückgängig/Wiederherstellen (Potential): Indem Sie Änderungen am Bild verfolgen, können Sie die Funktion „Rückgängig/Wiederherstellen“ implementieren.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3