Dalam pelaksanaan JPanel anda, segi empat tepat hilang kerana kaedah paint() menimpa lukisan sebelumnya. Untuk mengelakkan ini, kami mengubah suai pendekatan kami:
Daripada melukis terus pada JPanel, kami menggunakan BufferedImage (canvasImage) sebagai permukaan lukisan kami. Ini membolehkan kami mengubah suai imej secara kekal tanpa menjejaskan lukisan sebelumnya.
Berikut ialah kaedah cat() diubah suai yang menggunakan canvasImage untuk lukisan:
<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>
Inisialisasikan canvasImage dalam pembina JPanel anda seperti:
<code class="java">canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);</code>
Dan tetapkan konteks grafiknya untuk lukisan:
<code class="java">Graphics2D cg = canvasImage.createGraphics(); cg.setColor(Color.WHITE); cg.fillRect(0, 0, width, height);</code>
Kini, kaedah DrawRect() anda boleh mengubah suai canvasImage terus:
<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>
Pendekatan ini memberikan beberapa faedah:
Atas ialah kandungan terperinci Cara Melukis Segi Empat Secara Kekal dalam JPanel: Menggunakan BufferedImages untuk Mengelakkan Penimpaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!