java.swing如何消除闪烁

publicvoidpaint(Graphicsg){Colorc=g.getColor();g.setColor(Color.LIGHT_GRAY);g.fillRec... public void paint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.LIGHT_GRAY);
g.fillRect(0, 0, 806, 650);
g.setColor(Color.BLUE);
for (int i = 0; i < 40; i++)
for (int j = 0; j < 30; j++)
g.fillOval(3+20*i, 25+20*j, 21, 21);
g.setColor(c);
}
以上方法在一个线程里每500ms调用一次(即repaint()),出现闪烁,求教双缓冲的解决办法
展开
 我来答
soul丶gift
推荐于2016-03-01 · TA获得超过102个赞
知道小有建树答主
回答量:92
采纳率:0%
帮助的人:77万
展开全部

基本思路是先把内容画到一张虚拟图片上,再把张虚拟图片画到panel上


代码如下:




在类中加一个成员变量:
private Image offs = null;
//覆盖update方法:
public void update(Graphics g) {
        if(offs == null){
        //创建一张图片,指定图片长度和宽度
            offs = createImage(width, height);
        }
        Graphics offsg = offs.getGraphics();//得到图片的画笔
        paint(offsg);//在图片上画内容
        //把图片画到panel中,参数依次为:图片,x坐标,y坐标,第四个都写null
        g.drawImage(offs, 0, 0, null);
    }

人问题加我:840,二三00五七

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式