Java에서 지속되는 직사각형 그리기
문제:
Java에서 JPanel을 생성하여 직사각형을 그립니다. 단일 페인트 주기 이후에도 지속되는 문제는 문제를 야기합니다. 직사각형 목록을 유지 관리하고 모든 페인트 호출에서 모두 다시 그리는 일반적인 접근 방식은 직사각형 수가 많은 경우 성능을 저하시킬 수 있습니다.
기존 접근 방식:
기존 솔루션에는 다음을 사용하는 것이 포함됩니다. repaint(x, y, height, width) 를 사용하면 새 직사각형이 그려지는 영역만 다시 칠할 수 있습니다. 그러나 JPanel이 이전 직사각형을 계속 지우기 때문에 이는 종종 실패합니다.
대체 솔루션 - BufferedImage 사용:
대체 접근 방식은 BufferedImage를 페인팅 표면으로 사용하는 것입니다. 작동 방식은 다음과 같습니다.
이점 버퍼링된 이미지 사용:
그리기 위해 버퍼링된 이미지를 사용하면 여러 가지 이점을 얻을 수 있습니다.
구현 예:
앞서 언급한 접근 방식을 보여주는 다음 코드 조각을 고려하세요.
<code class="java">import java.awt.Graphics2D; import java.awt.image.BufferedImage; public class RectangleDrawer { private BufferedImage canvas; private BufferedImage originalCanvas; public void drawRectangle(int x, int y, int width, int height, Color color) { Graphics2D g = canvas.createGraphics(); g.setColor(color); g.fillRect(x, y, width, height); g.dispose(); } public void repaint() { g.drawImage(canvas, 0, 0, null); } // Other methods for drawing, selecting, and manipulating the image // would go here. }</code>
이 예에서 RectangleDrawer 클래스는 canvas라는 BufferedImage를 사용하여 직사각형을 그립니다. 필요한 경우 원본 이미지를 복원하는 데 원본 캔버스가 사용됩니다.
drawRectangle 메서드는 Graphics2D 개체를 사용하여 캔버스에 직사각형을 그리고 repaint 메서드는 drawImage 메서드를 사용하여 수정된 캔버스를 기반으로 구성 요소의 디스플레이를 업데이트합니다.
이러한 방식으로 BufferedImage를 활용하면 후속 페인트 주기에서 지워지지 않고 직사각형을 그리고 표시할 수 있어 원래 문제를 해결할 수 있습니다.
위 내용은 성능 문제 없이 Java에서 영구 사각형을 그리는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!