道招

java双缓冲技术

如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!

java双缓冲技术

最近想弄一个小小的程序练习和巩固自己的java基础,既然学习了awt,所以现在编的程序自然是有简单的界面的,不能老是停留在原始的黑乎乎的dos窗口了。最近的做的东西我一般都会用到drawString(String,int,int)方法,主要是我想将自己程序里面设置的某些变量的值写在窗体中,那样我自己也好看一下自己的这些变量是不是在看自己的意愿在执行,其实它就等同于某些同志喜欢将部分变量的值用system.out.println("");输出是一样的,只是对我来说有时不方便看console而已。 经常我们会看到drawString方法输出的值虽然在改变,但是我们真的看不太清它变成多少了。 我先截个图给大家看看 drawstring 这只是一个简单的例子程序,都容易出现这种状况的话,复杂的多变的图形界面程序怎么办,这是我们一般会用一个线程对该窗体来调用repaint(); 但是这同时也带来一个问题,那就是人的肉眼明显感觉到画面在闪烁,那这又该怎么办呢?现在我们今天说的主角就上场了,没错,我们得利用java的双缓冲技术了。 我把测试程序的源代码公布一下,欢迎大家探讨; MyTestDoubleBuffering.java的源代码如下 [code lang="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(); } } } } } [/code]
更新时间:
上一篇:分享一个java做的五子棋下一篇:不要用蛋疼的lomboz eclipse了

相关文章

关注道招网公众帐号