最近想弄一个小小的程序练习和巩固自己的java基础,既然学习了awt,所以现在编的程序自然是有简单的界面的,不能老是停留在原始的黑乎乎的dos窗口了。最近的做的东西我一般都会用到drawString(String,int,int)方法,主要是我想将自己程序里面设置的某些变量的值写在窗体中,那样我自己也好看一下自己的这些变量是不是在看自己的意愿在执行,其实它就等同于某些同志喜欢将部分变量的值用system.out.println(“”);输出是一样的,只是对我来说有时不方便看console而已。

经常我们会看到drawString方法输出的值虽然在改变,但是我们真的看不太清它变成多少了。
我先截个图给大家看看
drawstring

这只是一个简单的例子程序,都容易出现这种状况的话,复杂的多变的图形界面程序怎么办,这是我们一般会用一个线程对该窗体来调用repaint(); 但是这同时也带来一个问题,那就是人的肉眼明显感觉到画面在闪烁,那这又该怎么办呢?现在我们今天说的主角就上场了,没错,我们得利用java的双缓冲技术了。
我把测试程序的源代码公布一下,欢迎大家探讨;
MyTestDoubleBuffering.java的源代码如下

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class MyTestDoubleBuffering {
	public static void main(String[] args) {
		new TestFrame("测试双缓冲");
	}
}

class TestFrame extends Frame {
	Random r = null;
	Image offScreenImage =null;
	TestFrame(String name) {
		super(name);
		setSize(400,300);
		setLocation(300,200);
		setLayout(new BorderLayout());
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				setVisible(false);
				System.exit(0);
			}
			
		});
		Button c = new Button("Click");
		c.setSize(19, 19);
		c.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent arg0) {
				test(getGraphics());
			}	
		});
		add(c,BorderLayout.SOUTH);
		setVisible(true);
		
		new Thread(new PaintThread()).start();
		
	}
	
	public void test(Graphics g) {
		r = new Random();
		g.drawString(r + "",100,200);
	}
	
	public void update(Graphics g) {
		if(offScreenImage == null){
			offScreenImage = this.createImage(400,300);
		}
		Graphics gOffScreen = offScreenImage.getGraphics();
		Color c = gOffScreen.getColor();
		gOffScreen.setColor(Color.white);
		gOffScreen.fillRect(0, 0, 400, 300);
		gOffScreen.setColor(c);
		paint(gOffScreen);
		g.drawImage(offScreenImage, 0, 0, null);
	}
	
	class PaintThread implements Runnable {
		public void run() {
			while (true) {
				repaint();
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

随机文章

wordpress插入代码插件
wordpress插入代码插件

让网站快速提醒用户升级IE6,letskillie6
让网站快速提醒用户升级IE6,letskillie6

在iPhone,iPad和iPod上的IOS7可以完美越狱啦
在iPhone,iPad和iPod上的IOS7可以完美越狱啦

wordpress上传图片失败解决方案
wordpress上传图片失败解决方案

Java基础第十八讲:异常处理(二)
Java基础第十八讲:异常处理(二)

启用禁用网卡的批处理
启用禁用网卡的批处理

相关文章

google drive新增公开文件夹功能,方便协作
google drive新增公开文件夹功能,方便协作

moto me600/mb300 刷机教程
moto me600/mb300 刷机教程

要多垃圾就有多垃圾的新网
要多垃圾就有多垃圾的新网

如何用IE9 固定你的网站至任务栏
如何用IE9 固定你的网站至任务栏

Java基础第五讲:流程控制(一)
Java基础第五讲:流程控制(一)

又有12种语言用户可以使用twitter存档功能
又有12种语言用户可以使用twitter存档功能

内容分享:道招
本文链接:java双缓冲技术
道招声明:除特别标注或作者不详外,本站所有文章均为原创,转载请注明。欢迎共同关注互联网!