Rumah >Java >javaTutorial >Bagaimana untuk Melukis Segi Empat Berterusan dalam JPanel Tanpa Kemerosotan Prestasi?

Bagaimana untuk Melukis Segi Empat Berterusan dalam JPanel Tanpa Kemerosotan Prestasi?

Barbara Streisand
Barbara Streisandasal
2024-10-30 05:24:02432semak imbas

How to Draw Persistent Rectangles in a JPanel Without Performance Degradation?

Melukis Segi Empat Yang Berkekalan

Masalah:

Mencipta segi empat tepat dalam JPanel yang kekal kelihatan walaupun mengecat semula panggilan, tanpa memperlahankan sistem akibat berlebihan melukis semula.

Penyelesaian:

Gunakan BufferedImage sebagai permukaan lukisan.

Pendekatan:

  1. Buat subkelas JPanel dengan BufferedImage sebagai kanvas untuk lukisan.
  2. Laksanakan kaedah cat yang melukis segi empat tepat pada BufferedImage.
  3. Batalkan dan cat semula JPanel hanya apabila perlu, seperti semasa melukis segi empat tepat baharu.
  4. Simpan senarai segi empat tepat yang dilukis untuk mengelakkan lukisan berulang.

Contoh:

<code class="java">// Relevant JPanel subclass
class MyPanel extends JPanel {

    private BufferedImage canvasImage; // Image for drawing rectangles

    // Draw a rectangle
    public void drawRect(int x, int y, int width, int height) {
        Graphics2D g = canvasImage.createGraphics();
        g.setColor(Color.RED);
        g.fillRect(x, y, width, height);
        g.dispose();
        repaint(); // Redraw the panel with updated canvasImage
    }

    // Update view
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(canvasImage, 0, 0, null); // Draw the canvasImage on the panel
    }
}</code>

Kelebihan:

  • Segi empat tepat kekal kelihatan tanpa hilang dalam cat semula berikutnya.
  • Operasi melukis dan mengecat semula dioptimumkan, menghapuskan ketinggalan prestasi.

Atas ialah kandungan terperinci Bagaimana untuk Melukis Segi Empat Berterusan dalam JPanel Tanpa Kemerosotan Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn