JAVA双缓冲问题

publicvoidpaint(Graphicsg){super.paint(g);Graphics2Dg2=(Graphics2D)(g);inti,j;for(i=0... public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2 = (Graphics2D)(g);
int i, j ;
for( i = 0 ; i < FRAME_WIDTH ; i++)
for(j = 0 ; j < FRAME_HEIGHT ; j ++)
{
if(map[i][j] == 0)
continue;
else if(map[i][j] == -1)
g2.setColor(Color.cyan);
else
g2.setColor(color[Math.abs(map[i][j]) - 2]);
g2.fill3DRect(i * BLOCK_SIZE, j * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE , true);
}
g2.setColor(Color.black);
g2.setFont(new Font("Serif" , Font.BOLD , 35));
g2.drawString(String.format("Score:%5d" , SCORE), (WIDTH) * BLOCK_SIZE, 14 * BLOCK_SIZE);
}
求问如何写update函数来实现双缓冲避免屏幕闪烁
我把下面这段代码加到了paint中,但是还是不行,而且有错误
if(iBuffer==null)
{
iBuffer=new BufferedImage(this.getSize().width,this.getSize().height, BLOCK_SIZE);
gBuffer=iBuffer.createGraphics();
}
gBuffer.fillRect(0,0,this.getSize().width,this.getSize().height);
paint(gBuffer);
g2.drawImage(iBuffer,0,0,this);
super.paint(g2);
展开
 我来答
302652034_bai
2014-12-24 · TA获得超过4145个赞
知道大有可为答主
回答量:2206
采纳率:66%
帮助的人:1545万
展开全部
JPanel自己已经实现了双缓冲了。
如果需要自己写双缓冲的话。

BufferedImage br=new BufferedImage(w,h,type);//创建一张指定大小(一般为窗口的大小),与类型,缓冲图片。
Graphics2D g2d=br.createGraphics();
用g2d进行绘图。
之后再一次性拷贝到JPanel的上下文上就好了。
更多追问追答
追问
我是在JFrame上绘图的,没用到JPanel
能不能再给出写更具体的代码呢,麻烦了
追答
JFrame的话,吧双缓冲的代码直接放置到paint方法中,然后再最后调用super.paint(g2d)

JFrame update方法是不会被系统调用。你再update中输出一下就知道了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式