Rechtecke zeichnen, die nicht verschwinden
In Ihrem Code haben Sie eine MyPanel-Klasse erstellt, die JPanel erweitert. Innerhalb dieser Klasse definieren Sie eine Methode DrawRect, die mehrere Argumente benötigt, um ein Rechteck zu zeichnen. Wenn Sie jedoch repaint() aufrufen, wird das gesamte Panel, einschließlich der vorherigen Rechtecke, neu gezeichnet.
Um dies zu verhindern, können Sie stattdessen Graphics2D.drawImage() verwenden, um Ihr Rechteck über der vorhandenen Leinwand zu zeichnen. So können Sie Ihren Code ändern:
<code class="java">class MyPanel extends JPanel { private BufferedImage canvasImage; // Create a BufferedImage to store the canvas public void DrawRect(int x, int y, int size, Color c) { if (canvasImage == null) { canvasImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g = canvasImage.createGraphics(); g.setColor(getBackground()); g.fillRect(0, 0, getWidth(), getHeight()); g.dispose(); } Graphics2D g = canvasImage.createGraphics(); g.setColor(c); g.fillRect(x, y, size, size); g.dispose(); repaint(); } @Override public void paint(Graphics g) { super.paint(g); g.drawImage(canvasImage, 0, 0, null); // Draw the canvasImage onto the panel } }</code>
Hinweis:
Das obige ist der detaillierte Inhalt vonWie zeichnet man Rechtecke, die auf einem JPanel nicht verschwinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!