今天,我照着书上练习了一下用java做一个小球缓慢下落的动漫演示。它是由一个TetrisPanelL类和一个MyWindow类来完成的所有代码如下:
package Demo;import java.awt.Color;import java.awt.Graphics;import javax.swing.JPanel;import com.sun.prism.Image;public class TetrisPanel extends JPanel implements Runnable{ //绘图线程类 public int ypos=-80;//小球左上角的纵坐标 //在类中添加如下连个私有成员 private Image iBuffer; private Graphics gBuffer; public TetrisPanel(){ //新建一个新线程 Thread t=new Thread(this); //启动线程 t.start(); } @Override public void paint(Graphics g) { // TODO Auto-generated method stub //super.paint(g);将面板上原来画的东西擦掉 //先清屏否则原来画的东西仍在 g.clearRect(0, 0, this.getWidth(), this.getHeight()); g.setColor(Color.red);//设置小球颜色 g.fillOval(90, ypos, 80, 80);//绘制小球 } @Override public void run() {//重载run方法 // TODO Auto-generated method stub while(true){//线程中的无限循环 try{ Thread.sleep(30);//线程休眠30秒 }catch(InterruptedException e){ } ypos+=5;//修改小球左上角的纵坐标 if(ypos>=30)//小球离开窗口后重设左上角的纵坐标 ypos=-80; repaint();//窗口重绘 } }}
package Demo;import java.awt.Container;import java.awt.event.WindowAdapter;import javax.swing.JFrame;import com.sun.glass.events.WindowEvent;public class MyWindow extends JFrame{ MyWindow(){ this.setTitle("这是个测试窗口"); Container c=this.getContentPane();//获得面板容器 c.add(new TetrisPanel()); //设置窗口开始显示时距离屏幕左边400个像素点 //距离屏幕上边200个像素点 this.setBounds(400,200,300,300); //设置窗口关闭按钮具有关闭整个程序功能 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { // TODO Auto-generated method stub //创建窗口的实例DB,开始整个程序 MyWindow DB=new MyWindow();//创建主类对象 DB.addWindowListener(new WindowAdapter() {//添加窗口关闭方法 public void WindowClosing(WindowEvent e){ System.exit(0); } }); }}
运行结果:
一个红色小球以一定速度从上往下掉落,当小球掉到底部时将循环继续从上往下掉,只要不关闭程序,小球就重复下落过程。