如何用java写一个屏保程序

如何用java写一个屏保程序,第1张

看看这个试试!

import java.text.*

import java.awt.*

import javax.swing.*

import java.awt.geom.*

import java.util.*

import java.awt.event.*

/**

*

*

*/

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)

}

})

}

}

protected void paint(Graphics g) {

// TODO Auto-generated method stub

g.setColor(255,0,0)

g.fillRect(0, 0, this.getWidth(), this.getHeight())

g.setColor(0,0, 255)

g.fillArc(x,y,d,d,0,360)

this.repaint()

}//画一个圆当做屏保图案坐标是x,y 大小是d

public void run() {

// TODO Auto-generated method stub

while(true){

if(x<=0){

dir=ran.nextInt(8)

while(dir==0||dir==3||dir==5)

dir=ran.nextInt(8)

}else if(y<=0){

dir=ran.nextInt(8)

while(dir==0||dir==1||dir==2)

dir=ran.nextInt(8)

}else if(x>=w){

dir=ran.nextInt(8)

while(dir==2||dir==4||dir==7)

dir=ran.nextInt(8)

}else if(y>=h){

dir=ran.nextInt(8)

while(dir==5||dir==6||dir==7)

dir=ran.nextInt(8)

}

switch(dir)

{

case 0: y-=5x-=5break

case 1: y-=5break

case 2: y-=5x+=5break

case 3: x-=5break

case 4: x+=5break

case 5: y+=5x-=5break

case 6: y+=5break

case 7: y+=5x+=5break

}

try {

Thread.currentThread().sleep(30)

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

this.repaint()

}

//这个撞到墙壁小球就会随机变换方向 达到屏搭锋保的效果

给你答穗个思路清枝卜啊 自己填完整了他


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12309800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存