내 캔버스 구현이 계속 깜박이는 이유는 무엇입니까?
하지만 내 자신의 캔버스 구현을 만들려고 하면 계속 업데이트할 때 계속 깜박입니다. 그리고 업데이트하지 않으면 아무것도 표시되지 않습니다(흰색 화면만 표시됨).
클래스는 다음과 같습니다.
/**
* Calin Baenen's version of a canvas element.
*/
class CPane {
// Debug variables.
/**
* The canvas itself.
*/
private final JPanel canvas; // Canvas.
/**
* The buffer that adds data to the canvas.
*/
private BufferedImage buffer; // Buffer.
// Constructor.
public CPane(int width, int height) {
this(0, 0, width, height);
}
public CPane(int width, int height, Color initialColor) {
this(0, 0, width, height, initialColor);
}
public CPane(int x, int y, int width, int height) {
this(x, y, width, height, Color.WHITE);
}
public CPane(int x, int y, int width, int height, Color initialColor) {
this(x, y, width, height, initialColor, Color.WHITE);
}
public CPane(int x, int y, int width, int height, Color initialColor, Color baseColor) {
this.canvas = new JPanel(); // Make an element to display the drawing on.
canvas.setBounds(x, y, width, height); // Set the bounds of the canvas.
canvas.setBackground(baseColor); // Make the canvas white.
canvas.setDoubleBuffered(true); // Make the canvas double buffered.
buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); // Set the buffer.
Graphics ctx = buffer.getGraphics(); // Get the graphics for the buffer.
// Paint the image with an initisl color.
ctx.setColor(initialColor); // Set color.
ctx.drawRect(0, 0, width, height); // Draw.
ctx.dispose(); // Dispose.
}
/**
* Draws a rectangle to the screen by filling an area with color.
*/
public void drawRect(int x, int y, int width, int height, Color color) {
Graphics ctx = buffer.getGraphics(); // Get the graphics.
ctx.setColor(color); // Set the context's color.
ctx.fillRect(x, y, width, height); // Draw a rectangle.
ctx.dispose(); // Dispose the graphics.
this.update(); // Update the canvas.
}
/**
* Draw an image to the canvas.
*/
public void drawImage(Image image, int x, int y) {
this.drawImage(image, x, y, image.getWidth(null), image.getHeight(null));
}
/**
* Draw an image to the canvas.
*/
public void drawImage(Image image, int x, int y, int width, int height) {
Image shot = image.getScaledInstance(width, height, Image.SCALE_FAST); // Get the scaled image to draw.
Graphics ctx = buffer.getGraphics(); // Get the graphics.
ctx.drawImage(shot, x, y, null); // Draw the image.
ctx.dispose(); // Dispose.
this.update(); // Update the canvas.
}
/**
* Update the graphics.
*/
public void update() {
try {
Graphics display = canvas.getGraphics(); // Get the display graphics.
display.drawImage(buffer, 0, 0, null); // Draw the bufer.
display.dispose(); // Dispose the display.
} catch(Exception error) {}
}
}
update
메서드 자체에 있는 것으로 알고 있지만 이 버그를 어떻게 고칠 수 있습니까?고마워!건배!
Reference
이 문제에 관하여(내 캔버스 구현이 계속 깜박이는 이유는 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/baenencalin/why-does-my-canvas-implementation-keep-blinking-3be5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)