In Ihrer JPanel-Implementierung verschwinden Rechtecke, weil die Methode paint() frühere Zeichnungen überschreibt. Um dies zu verhindern, ändern wir unseren Ansatz:
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.
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>
Initialisieren Sie „canvasImage“ in Ihrem JPanel-Konstruktor wie folgt:
<code class="java">canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);</code>
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>
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>
Dieser Ansatz bietet mehrere Vorteile:
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!