我使用paint()方法将许多bufferedImage绘制到JFrame上,
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(bufferedImg, x, y, layeredPane);
...More images
}
问题是它重新绘制了所有图像,因此屏幕将变为空白,然后显示图像。我需要重绘单个图像,而不是绘制方法中的所有内容。 所以我尝试将另一个方法与paint方法分开,然后调用它......
public void drawImage(){
Graphics2D g2d = (Graphics2D) getGraphics();
if (condition == true) g2d.drawImage(bufferedImg, x, y, layeredPane);
}
这适用于绘制图像,但是一旦布尔值设置为false并调用,它仍然会将图像保留在屏幕上。 对不起,如果以前发布过,我看过很多关于用Java重新绘制图像的帖子,但我找不到专门重绘单个图像的帖子。
答案 0 :(得分:2)
paintComponent(...)
。repaint(Rectangle r)
来限制重绘区域的位置,矩形的边界是您想要更改的区域的边界。getGraphics()
来获取Graphics上下文,因为这将只为您提供一个短暂的Graphics对象,并且使用它绘制的任何内容都将在重绘中丢失。paintComponent(...)
方法中绘制一个。如需更多帮助,请考虑创建并发布minimal, compilable, runnable example program。
修改强>
关于你的新帖子:
我使用paint()方法将许多bufferedImage绘制到JFrame上
不,永远不要直接绘制到JFrame,因为你失去了Swing图形的许多好处,包括双缓冲,并且有可能弄乱边框和子组件的绘制。您需要阅读Swing custom painting tutorial以了解有关如何正确绘制的更多信息。