一个类似屏幕保护的小球运动程序
学习线程这一块时,弄了一个简单的小球在界面运动的程序。 可以添加任意个小球进去,小球运动到墙面时会反弹回来。
//数据接口
public interface Config {public static final int height = 40 ; //球的高public static final int wight = 40; //球的宽public static final int boardHeight = 600; //画板的高public static final int boardWight = 700; //画板的宽public static final int UIboardHeight = 700; //窗口的高public static final int UIboardWight = 700; //窗口的宽}
public class MyBall extends JFrame{public static void main(String [ ] args){MyBall mb = new MyBall( );mb.init( );}Graphics g;public void init ( ){//创建窗口this.setTitle("滚动的球");this.setSize(Config.UIboardWight, Config.UIboardHeight);this.setDefaultCloseOperation(3);this.setLayout(new FlowLayout());//添加按钮JButton jb = new JButton("开始");JPanel jp1 = new JPanel (); jp1.setBackground(Color.GRAY); JPanel jp = new JPanel( ); jp.setPreferredSize(new Dimension(Config.boardWight,Config.boardHeight)); jp1.add(jb); this.add(jp1,BorderLayout.NORTH); this.add(jp,BorderLayout.CENTER);this.setVisible(true);MyLisener my = new MyLisener(jp);jb.addActionListener(my);} }
public class MyLisener implements ActionListener { Graphics g; JPanel jp ; public MyLisener (JPanel jp){ this.jp = jp; } public void actionPerformed(ActionEvent e) { System.out.println("MyLisener.actionPerformed()"); Myframe mf = new Myframe(jp,g); mf.start( ); } }
public class Myframe extends Thread {public int x = 0;public int y = 0 ; Graphics g; JPanel jp ; //重新覆盖时的x y 的值 double a =0 ; double b =0 ; int x0 = 0; int y0 = 0; public void run( ){draw();}//重写构造函数 public Myframe(JPanel jp , Graphics g) { this.g = g; this.jp = jp; } //画图方法public void draw( ){ System.out.println("执行了"); //随机位置出现 Random rad = new Random(); x = Config.boardWight/(rad.nextInt(50)+1); y =Config.boardWight /(rad.nextInt(50)+1); while(true){ draw1( ); }}//睡眠时间函数private void ss(){ try {sleep(10);} catch (Exception e) {// TODO: handle exception} }//球的运动和撞墙的函数private void runXY( ) { if (x == 0) { a =0 ; } if (x == Config.boardWight - Config.wight){ a =Math.PI; } x= x + (int )Math.cos(a); if (y == 0) { b =0 ; } if (y == Config.boardHeight - Config.height){ b =Math.PI; } y = y + (int)Math.cos(b); }//画小球private void draw1( ){ g = jp.getGraphics( ); //画颜色和背景色一样的球,去掉黑条 Color cl = jp.getBackground();g.setColor(cl);g.fillOval(x0, y0, Config.wight ,Config.height ); //画球 Color color = new Color(255,0,0); g.setColor(Color.pink); g.fillOval(x, y, Config.wight, Config.height); x0 = x ; y0 = y; //调用球运动的函数 runXY( ); //睡眠时间函数调用 ss();}}