Heim > Java > javaLernprogramm > 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?

Susan Sarandon
Freigeben: 2024-10-29 04:58:02
Original
730 Leute haben es durchsucht

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:

<code class="java">@Override
public void paint(Graphics g) {
    super.paint(g); // Handle inherited painting tasks

    Graphics2D bg = (Graphics2D) g;
    bg.drawImage(canvasImage, 0, 0, this);
}</code>
Nach dem Login kopieren

Erstellen und Einrichten des BufferedImage

Initialisieren Sie „canvasImage“ in Ihrem JPanel-Konstruktor wie folgt:

<code class="java">canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);</code>
Nach dem Login kopieren

Und legen Sie seinen Grafikkontext zum Zeichnen fest:

<code class="java">Graphics2D cg = canvasImage.createGraphics();
cg.setColor(Color.WHITE);
cg.fillRect(0, 0, width, height);</code>
Nach dem Login kopieren

Zeichnen von Rechtecken auf dem BufferedImage

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

<code class="java">public void DrawRect(int x, int y, int size, Color c) {
    Graphics2D cg = canvasImage.createGraphics();
    cg.setColor(c);
    cg.fillRect(x, y, size, size);
}</code>
Nach dem Login kopieren

Zusätzliche Funktionen

Dieser Ansatz bietet mehrere Vorteile:

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

Das obige ist der detaillierte Inhalt vonWie zeichnet man Rechtecke dauerhaft in einem JPanel: Verwenden von BufferedImages, um ein Überschreiben zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage