java swing中实现动画的两种方式。
2014-10-06 14:08
288 查看
在java swing 中如何实现动画。总结有以下两种思路:
1、首先写一个自己的面板,比如MyJPanel,让其继承JPanel类,然后覆写paintComponent(Graphics g)方法。比如我们可以在方法中写如下代码:
Graphics2D g2d=(Graphics2D) g;
g2d.drawShape( rect );//rect是一个矩形对象
这样就可以在面板中画出一个矩形了。在一个while(true)的永久循环中,我们只需要改变rect的x和y坐标值,然后调用MyJPanel的repaint方法,就可以实现矩形的移位了。
但是这里有一个问题:原来画的矩形是怎么被清空的呢?实际上,这个背景是由swing负责为我们清空了,然后才调用的paintComponent方法。
2、同样写一个自己的面板,还用上面的MyJPanel吧。这时,我们覆写它的update和paint两个方法,让这两个方法都成空方法。这是什么意思呢,就是我们要完全掌控这个面板的绘制,不再允许swing插手了。新建一个MyJpanel对象pnl,通过pnl.getGraphics()方法获得它的绘制上下文g。然后建两个BufferedImage img,background,这两个img要和pnl的大小一样。调用img.getGraphics()获得缓存图片img的绘制上下文imgG。将imgG转为Graphics2D对象。然后做这样两步:
imgG.drawImage(background);//关键所在!!!用一个空的背景图将img绘制一遍,就是将它原有内容清空了。
imgG.drawShape(rect);
接着用pnl的绘制上下文g.drawImage(img)方法将缓存图像绘制到面板上。这样每当rect改变了位置,我们只要重复调用上面两步就可以实现rect的移动。这样实现的动画不依赖于swing本身的重绘机制,可以说效果更好。
1、首先写一个自己的面板,比如MyJPanel,让其继承JPanel类,然后覆写paintComponent(Graphics g)方法。比如我们可以在方法中写如下代码:
Graphics2D g2d=(Graphics2D) g;
g2d.drawShape( rect );//rect是一个矩形对象
这样就可以在面板中画出一个矩形了。在一个while(true)的永久循环中,我们只需要改变rect的x和y坐标值,然后调用MyJPanel的repaint方法,就可以实现矩形的移位了。
但是这里有一个问题:原来画的矩形是怎么被清空的呢?实际上,这个背景是由swing负责为我们清空了,然后才调用的paintComponent方法。
2、同样写一个自己的面板,还用上面的MyJPanel吧。这时,我们覆写它的update和paint两个方法,让这两个方法都成空方法。这是什么意思呢,就是我们要完全掌控这个面板的绘制,不再允许swing插手了。新建一个MyJpanel对象pnl,通过pnl.getGraphics()方法获得它的绘制上下文g。然后建两个BufferedImage img,background,这两个img要和pnl的大小一样。调用img.getGraphics()获得缓存图片img的绘制上下文imgG。将imgG转为Graphics2D对象。然后做这样两步:
imgG.drawImage(background);//关键所在!!!用一个空的背景图将img绘制一遍,就是将它原有内容清空了。
imgG.drawShape(rect);
接着用pnl的绘制上下文g.drawImage(img)方法将缓存图像绘制到面板上。这样每当rect改变了位置,我们只要重复调用上面两步就可以实现rect的移动。这样实现的动画不依赖于swing本身的重绘机制,可以说效果更好。
相关文章推荐
- View动画的XML与Java代码实现的两种方式,交叉着用
- java Swing:实现事件监听的三种方式
- java多线程的两种实现方式
- JAVA 实现线程的两种方式,举例,详解
- Java程序操作Oracle两种方式之简单实现
- java中匿名内部类的两种实现方式
- 用JAVA实现汉字转拼音缩写(两种方式介绍)
- java 两种方式实现自定义排序
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- Java中线程实现的两种方式例程
- 警察叔叔智力训练计算1 2 3 4 5 6 7 8 9=110;JAVA实现的两种方式
- 第2章 Java编程基础——FAQ2.16 在实现x和y相加时, x+=y和x=x+y两种实现方式有区别吗?
- JAVA中实现多线程的两种方式
- Java实现权限管理的两种方式
- 对于JAVA系统中的定时操作有两种实现方式(针对oarcle)
- java多线程学习二:两种实现多线程方式的对比
- listView扩展2——java代码方式实现animation动画输出
- 详解Java Swing中添加鼠标事件的两种方式
- Java中匿名类的两种实现方式
- 随心所欲学Java - Swing国际化,控件实时刷新观察者方式实现 推荐