Heim  >  Artikel  >  Java  >  Wie zeichnet man Rechtecke, die auf einem JPanel nicht verschwinden?

Wie zeichnet man Rechtecke, die auf einem JPanel nicht verschwinden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 06:23:01681Durchsuche

How to Draw Rectangles That Won't Disappear on a JPanel?

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:

  • Dieser Ansatz erstellt ein BufferedImage als Zeichenoberfläche, das über Repaint-Aufrufe hinweg bestehen bleibt. Dadurch können Sie Rechtecke zeichnen, die nicht verschwinden.
  • Denken Sie daran, vor dem Zeichnen zu überprüfen, ob „canvasImage“ null ist, und es zu initialisieren, um das Zeichnen auf einer leeren Leinwand zu vermeiden.
  • Zeichnen Sie „canvasImage“ in Farbe auf die Panel, um die Rechtecke anzuzeigen.

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!

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