JAVA模仿屏保

这也是以前写的一个东西,全屏下运行,很像是WINDOWS下的屏保,会显示时钟,并且会随机自然地碰撞.全屏状态下如需退出,请按小键盘上的0退出.
点击下载可执行的JAR文件,JDK1.5以上
import  java.text. * ;
import  java.awt. * ;
import  javax.swing. * ;
import  java.awt.geom. * ;
import  java.util. * ;
import  java.awt.event. * ;
/*
 * ScreenTest.java
 *
 * Created on 2006年7月6日, 下午5:23
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 
*/

/**
 *
 * 
@author  lbf
 
*/
public   class  ScreenTest  extends  JPanel  implements  Runnable{
    
    
/**  Creates a new instance of ScreenTest  */
    
private  String time;
    
private  Rectangle2D rd;
    
private   int  x,y,a,b; // 座标值和方向值
     private   int  rgb = 0 ; // 颜色的值
     private  Color color; // 字体的颜色
     private   int  width,height; // 屏幕的大小
     public  ScreenTest( int  width, int  height) {
        
this .width = width;
        
this .height = height;
        initWindow();
    }
    
private   void  initWindow(){
        x
= ( int )(Math.random() * 300 );
        y
= ( int )(Math.random() * 500 );
        a
= 1 ;
        b
= 1 ;
        
this .setBackground(Color.BLACK);
        
this .setOpaque( true );
        rd
= new  Rectangle2D.Double( 10 , 10 , 101 , 10 );
        color
= Color.YELLOW;
    }
    
private   void  doColor(){
       rgb
= ( int )(Math.random() * 0xFFFFFF );
           color
= new  Color(rgb);
     }
    
public   void  paintComponent(Graphics g){
        g.setColor(Color.BLACK);
        g.fillRect(
0 , 0 ,width,height);
        g.setColor(color);
        g.setFont(
new  Font( " 楷书 " ,Font.BOLD, 150 ));
        FontMetrics fm
= g.getFontMetrics();
        rd
= fm.getStringBounds(time,g);
        g.drawString(time,x,(
int )(y + rd.getHeight()));
      }
    
private   void  doTime(){
        Calendar cal
= Calendar.getInstance();
        DateFormat df
= DateFormat.getTimeInstance(DateFormat.MEDIUM);
        Date date
= cal.getTime();
        time
= df.format(date);
        x
+= a;
        y
+= b;
        
double  width1 = rd.getWidth();
        
double  height1 = rd.getHeight();
        rd.setRect(x,y,width1,height1);
        
if (rd.intersectsLine(width, 0 ,width,height)){
            doColor();
            a
=- 1 ;
        }
        
else   if (rd.intersectsLine( 0 , 0 , 0 ,height)){
            doColor();
            a
= 1 ;
        }
        
else   if (rd.getY() <=- 80 ){
             doColor();
             b
= 1 ;
        }
        
else   if (rd.intersectsLine( 0 ,height,width,height)){
           doColor();
            b
=- 1 ;
        }
        
    }
    
public   void  run(){
        
while ( true ){
            
try {
                Thread.sleep(
2 );
                doTime();
                repaint();
            }
            
catch (InterruptedException ie){
                ie.printStackTrace();
            }
        }
    }
   
public    static   void  main(String arsg[]){
        
        GraphicsDevice gd
= GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        DisplayMode dm
= gd.getDisplayMode();
        
int  width = dm.getWidth();
        
int  height = dm.getHeight();
        System.out.println(
" width= " + width + " \nheight= " + height);
        ScreenTest st
= new  ScreenTest(width,height);
        
final  JFrame jf = new  JFrame();
        jf.getContentPane().add(st,BorderLayout.CENTER);
        jf.setUndecorated(
true );
        gd.setFullScreenWindow(jf);
        
new  Thread(st).start();
        jf.addKeyListener(
new  KeyAdapter(){
           
public   void  keyReleased(KeyEvent ke){
               
if (ke.getKeyCode() == KeyEvent.VK_NUMPAD0)
                   System.exit(
0 );
                } 
        });
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值