Heim  >  Artikel  >  Java  >  Wie zeichnet man dauerhafte Rechtecke in einem JPanel ohne Leistungseinbußen?

Wie zeichnet man dauerhafte Rechtecke in einem JPanel ohne Leistungseinbußen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 05:24:02368Durchsuche

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

Rechtecke zeichnen, die bestehen bleiben

Problem:

Erstellen von Rechtecken in einem JPanel, die trotz Repaint-Aufrufen sichtbar bleiben, ohne das System durch übermäßiges Ausbremsen zu verlangsamen Neuzeichnen.

Lösung:

Verwenden Sie ein BufferedImage als Malfläche.

Ansatz:

  1. Erstellen Sie eine JPanel-Unterklasse mit einem BufferedImage als Leinwand zum Zeichnen.
  2. Implementieren Sie eine Malmethode, die Rechtecke auf das BufferedImage zeichnet.
  3. Machen Sie das JPanel nur bei Bedarf ungültig und zeichnen Sie es neu, z. B. beim Zeichnen neuer Rechtecke.
  4. Behalten eine Liste der gezeichneten Rechtecke, um wiederholtes Zeichnen zu vermeiden.

Beispiel:

<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>

Vorteile:

  • Rechtecke bleiben sichtbar, ohne bei nachfolgenden Neulackierungen zu verschwinden.
  • Zeichnungs- und Neumalvorgänge werden optimiert, wodurch Leistungsverzögerungen vermieden werden.

Das obige ist der detaillierte Inhalt vonWie zeichnet man dauerhafte Rechtecke in einem JPanel ohne Leistungseinbußen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn