嗨,我一直在努力摆脱 JFrame 应用程序上的闪烁问题。搜索了一下,发现setDoubleBuffered(true)可以用于Jpanel的paintComponent,但不能用于JFrame的paint方法,也不能用于applet。
通过在 paint 方法中引入指令 this.createbufferstrategy(2) 来减少但不能消除闪烁,并在 paint 中使用指令 this.setignorerepaint(true) 进一步减少闪烁。
但我终于找到了一个完全消除闪烁的代码示例,它通过在更新函数中绘制静态元素来工作。
在小程序的更新中测试了 fillRect 并且它可以工作,但是当复制粘贴到常规的 Java 应用程序中时,它在 jframe 的更新函数中不起作用。
这是代码
Graphics graphics;
Image image;
public void update(Graphics g)
{
if (image == null) {
image = createImage(this.getWidth(), this.getHeight());
graphics = image.getGraphics(); }
graphics.setColor(Color.blue);
graphics.fillRect(0, 0, this.getWidth(), this.getHeight());
g.drawImage(image, 0, 0, this);//}
使用一个空的绘图功能,它可以在小程序中绘制到屏幕并用蓝色填充它,它还可以消除闪烁。但在 jframe 的正常应用程序中,它什么也不做。
需要做什么才能允许 fillRect 或 drawImage 在非 applet 常规应用程序环境的更新中工作?
顺便说一句,如果图形对象通过调用fillRect自行修改,我对此有点陌生,那如何修改图像对象?因为 drawImage 是屏幕变蓝所必需的。
PS我试过不同时使用createbufferedstrategy和setignorerepaint,没有任何改变。