最好能给段带注释的代码,谢谢!

解决方案 »

  1.   

    请问swing中的双缓冲怎么用啊?
      

  2.   

    lz 你还在用AWT,若不是,使用Swing的话基本可以无视。所有继承自JComponent的组件都默认使用了双缓冲。容器双缓冲,那么加入到容器的组件自动使用双缓冲。
      

  3.   

    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;/*******************************************************************************
     * 一个双缓冲示例
     * 
     * 一个方块的运动,用双缓冲跟不用的区别
     * 
     * @author venus
     * 
     */
    public class DoubleBufferDemo extends Frame implements Runnable { private static final long serialVersionUID = 1L; // 控制重画线程
    private boolean isRun = false; // 双缓冲的一些东西 普通的画就是在屏幕直接F5 而双缓冲就是让它在内存中画完再到界面上去显示
    // 你想象它就是在一个图片中画东西 然后将它画到屏幕上
    private Image bufferImage = null; // 方块坐标
    private int x, y; private int frame = 33; // 方块大小
    public static final int SIZE = 20; // 启动
    public void start() {
    isRun = true;
    setVisible(true);
    setSize(600, 400);
    setResizable(false);
    y = getHeight() - SIZE;
    x = (getWidth() - SIZE) >> 1;
    new Thread(this).start();
    } /**
     * 画方法 双缓冲就是在内存中画 主要是这里不同
     */
    public void paint(Graphics graphics) {
    graphics.fillRect(x, y, SIZE, SIZE);
    } /**
     * 双缓冲技术是为了解决Java在游戏编程的过程中由于页面刷新频率太快,而引起的页面闪烁问题。
     * 它的执行过程是这样的:repaint() 到update()再到paint(),而我们的双缓冲代码就写在update()里
     */
    public void update(Graphics g) {
    if (bufferImage == null) {
    bufferImage = this.createImage(600, 400);
    }
    Graphics goffScreen = bufferImage.getGraphics();
    Color c = goffScreen.getColor();
    goffScreen.setColor(Color.GREEN);
    goffScreen.fillRect(0, 0, 600, 400);
    goffScreen.setColor(c);
    paint(goffScreen);
    g.drawImage(bufferImage, 0, 0, null);
    } //移动
    public void move() {
    y -= 5;
    if (y < 0) {
    y = getHeight() - SIZE;
    }
    } /**
     * 入口
     * 
     * @param args
     */
    public static void main(String[] args) {
    new DoubleBufferDemo().start();
    } // 重画Run
    public void run() {
    while (isRun) {
    move();
    repaint();
    try {
    Thread.sleep(frame); // 睡眠
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }}
      

  4.   

    跟我碰上了一样的问题,当时真的被闪屏给折磨死了,在这里发帖也有没有什么建设性的建议,后来就自己瞎摸索,就自己想了个类似于双缓冲的办法,这个方法不是很专业,但是绝对能解决问题
    大致思想是:Image doubleBuffer;    //创建一张图纸public  void   paint(Graphics g){     //每次refresh()的时候调用
    doubleBuffer = createImage(3000, 2000); 
            Graphics   g2 = doubleBuffer.getGraphics(); g2.drawString("123",newX, newY);     //你想画什么就画什么啦
    g2.dispose();
    g.drawImage(doubleBuffer,0, 0,null);   //将内存中的画画到画板上,每次更新的时候就相当于重新画了一张画
    }^_^| 这样就完了,这就是我自创的办法,不知道对你有没有帮助。