您好我一直试图摆脱JFrame应用程序上的闪烁。已经搜索过并看到setDoubleBuffered(true)可以用于Jpanel的paintComponent,但不能用于JFrame的paint方法,也不能用于applet。
通过在paint方法中引入this.createbufferstrategy(2)指令来管理减少但不消除闪烁,并使用指令this.setignorerepaint(true)在paint中进一步减少闪烁。
但是我终于找到了一个完全消除闪烁的代码示例,它通过在更新函数中绘制静态元素来实现。
在applet中的更新中测试了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的正常应用中它什么都不做。
在非applet常规应用程序环境中,允许fillRect或drawImage在更新中工作需要做些什么?
顺便说一句,如果图形对象通过调用fillRect进行自我修改,我对此有点新鲜,如何修改图像对象?因为drawImage是屏幕变蓝所必需的。PS我试过不同时使用createbufferedstrategy和setignorerepaint,没有任何改变。
答案 0 :(得分:1)
使用setIgnorePaint(true)
时,它不允许你搞乱图形。
我猜测你的更新(Graphics g)参数的外观,你在paint方法中调用它,使用paintMethod的图形g绘制(在paint方法中,你调用update(g))
如果忽略paint,它将不允许你使用paintComponent的Graphic参数。 发布包含图形的所有代码(您制定策略的位置,您调用此方法的位置,等等。)
闪烁是这个策略的一个非常主流的问题,我不能保证我能够解决它(我的朋友不久前把问题告诉了我,但我并不在乎尝试和弄清楚),但这至少应该解释为什么你的图形没有呈现