>Java >java지도 시간 >JPanel에서 사라지지 않는 직사각형을 그리는 방법은 무엇입니까?

JPanel에서 사라지지 않는 직사각형을 그리는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-05 06:23:01734검색

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

사라지지 않는 직사각형 그리기

코드에서 JPanel을 확장하는 MyPanel 클래스를 만들었습니다. 이 클래스 내에서 사각형을 그리는 데 여러 인수를 사용하는 DrawRect 메서드를 정의합니다. 그러나 repaint()를 호출하면 이전 직사각형을 포함하여 전체 패널을 다시 그립니다.

이를 방지하려면 대신 Graphics2D.drawImage()를 사용하여 기존 캔버스 위에 직사각형을 그릴 수 있습니다. 코드를 수정하는 방법은 다음과 같습니다.

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

참고:

  • 이 접근 방식은 BufferedImage를 그리기 표면으로 생성하여 다시 그리기 호출에도 지속됩니다. 사라지지 않는 직사각형을 그릴 수 있습니다.
  • canvasImage가 null인지 확인하고 초기화하는 것을 잊지 마세요. 빈 캔버스에 그리는 것을 피하기 위해 그리기 전에.
  • 페인트에서 캔버스 이미지를 패널에 그려 직사각형을 표시합니다.

위 내용은 JPanel에서 사라지지 않는 직사각형을 그리는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.