千里冰封
JAVA 浓香四溢
posts - 151,comments - 2801,trackbacks - 0
这也是以前写的一个东西,全屏下运行,很像是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);
                } 
        });
    }
    
}



尽管千里冰封
依然拥有晴空

你我共同品味JAVA的浓香.
posted on 2007-09-03 09:18 千里冰封 阅读(1572) 评论(1)  编辑  收藏 所属分类: JAVASE

FeedBack:
# re: JAVA模仿屏保
2008-10-25 22:18 | jiangchanghong
尽管千里冰封
依然拥有晴空

你我共同品味JAVA的浓香.   回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: