java swing中实现动画的两种方式。

在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本身的重绘机制,可以说效果更好。

你可能感兴趣的:(java swing中实现动画的两种方式。)