g如何用双缓冲解决java swing图像移动闪烁

我写一个小球的移动,但是在移动过程图像会闪烁,但网上查到有双缓冲技术可以解决,但不知代码怎么写,请各位帮帮忙,谢谢了!publicclassTestextendsJFra... 我写一个小球的移动,但是在移动过程图像会闪烁,但网上查到有双缓冲技术可以解决,但不知代码怎么写,请各位帮帮忙,谢谢了!
public class Test extends JFrame {
private static final long serialVersionUID = 1L;
private static int x = 100,y = 100;
public Test() {
setTitle("图片");

setSize(600, 600);

new t1().start();
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.red);
g.drawOval(x, y, 20, 20);
}

class t1 extends Thread {
public void run() {
do {
x+=1;
y+=1;
repaint();

try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
} while(x!=400 && y!=400);
}
}

public static void main(String[] args) {
new Test().setVisible(true);
}
}
展开
 我来答
朴素守中
2009-10-22 · TA获得超过239个赞
知道小有建树答主
回答量:216
采纳率:81%
帮助的人:81.1万
展开全部
双缓存:缓存区是绘图绘图时使用的屏外内存区。使用双缓存不是直接绘制屏幕,而是绘制到后缓存区,然后将整个缓存区复制到屏幕上,这样就可以同时更新整个屏幕,游戏者只看到要看到的东西了。后缓存区可能只是普通java图像。可以用Component类的createImage(int w,int h)方法生成后缓存区,如果是不使用活动绘制的小程序使用双缓存,则可以覆盖update()方法,改用双缓存,并用双缓存的图形描述表调用paint()方法,实现代码如下:

private Image doubleBuffer;
public void update(Graphics g){
Dimension size=getSize();
if(doubleBuffer.getWidth(this)!=size.width||doubleBuffer.getHeight(this)!=size.height)
{ doubleBuffer=createImage(size.width,size.height);
}
if(doubleBuffer!=null){
//绘制到双缓存区
Graphics g2=doubleBuffer.getGraphics();
paint(g2);
g2.dispose();
//将双缓存复制到屏幕
g.drawImage(doubleBuffer,0,0,null);
}
else
{//不要双缓存,只绘制屏幕
paint(g);
}
}
public void paint(Graphics g){
//在此绘图
}
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
jessiejacky
2009-10-22 · TA获得超过227个赞
知道答主
回答量:107
采纳率:0%
帮助的人:0
展开全部
先创建一个固定大小的画布
Image image = new Image(20,20);
获得画布的graphics对象,这里为第一层缓冲
Graphics g = image.getGraphics();
g.setColor(Color.red);
g.drawOval(0, 0, 20, 20);

public void paint(Graphics g) {
super.paint(g);
//把这个画布当做整体画在你的panel上,此为第二层缓冲
g.drawImage(image,x, y, 20, 20);
}

没侧过,但是双缓冲的核心思想就是这样的,希望对你有帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式