Heim >Java >javaLernprogramm >Wie zeichnet man in Java dauerhafte Rechtecke ohne Leistungsprobleme?
Zeichnen von Rechtecken, die in Java bestehen bleiben
Problem:
In Java wird ein JPanel zum Zeichnen von Rechtecken erstellt die über einen einzigen Lackierzyklus hinaus bestehen bleiben, stellen Herausforderungen dar. Der übliche Ansatz, eine Liste von Rechtecken zu verwalten und bei jedem Malaufruf alles neu zu zeichnen, kann die Leistung verlangsamen, wenn die Anzahl der Rechtecke erheblich ist.
Traditioneller Ansatz:
Eine traditionelle Lösung beinhaltet die Verwendung repaint(x, y, height, width), um nur den Bereich neu zu zeichnen, in dem das neue Rechteck gezeichnet wird. Dies schlägt jedoch häufig fehl, da das JPanel immer wieder vorherige Rechtecke löscht.
Alternative Lösung – Verwendung eines BufferedImage:
Ein alternativer Ansatz besteht darin, ein BufferedImage als Malfläche zu verwenden. So funktioniert es:
Vorteile der Verwendung eines BufferedImage:
Die Verwendung eines BufferedImage zum Zeichnen bietet mehrere Vorteile:
Beispielimplementierung:
Betrachten Sie den folgenden Codeausschnitt, der den oben genannten Ansatz demonstriert:
<code class="java">import java.awt.Graphics2D; import java.awt.image.BufferedImage; public class RectangleDrawer { private BufferedImage canvas; private BufferedImage originalCanvas; public void drawRectangle(int x, int y, int width, int height, Color color) { Graphics2D g = canvas.createGraphics(); g.setColor(color); g.fillRect(x, y, width, height); g.dispose(); } public void repaint() { g.drawImage(canvas, 0, 0, null); } // Other methods for drawing, selecting, and manipulating the image // would go here. }</code>
In diesem Beispiel verwendet die Klasse „RectangleDrawer“ ein BufferedImage namens „canvas“, um Rechtecke zu zeichnen. Die originalCanvas wird verwendet, um bei Bedarf das Originalbild wiederherzustellen.
Die Methode drawRectangle verwendet ein Graphics2D-Objekt, um das Rechteck auf der Leinwand zu zeichnen, und die Methode repaint verwendet die Methode drawImage, um die Anzeige der Komponente basierend auf der geänderten Leinwand zu aktualisieren.
Durch die Verwendung eines BufferedImage auf diese Weise können Rechtecke gezeichnet und angezeigt werden, ohne dass sie in nachfolgenden Malzyklen gelöscht werden, wodurch das ursprüngliche Problem behoben wird.
Das obige ist der detaillierte Inhalt vonWie zeichnet man in Java dauerhafte Rechtecke ohne Leistungsprobleme?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!