⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java_clock.txt

📁 这是一个java  闹钟程序源代码
💻 TXT
字号:
import java.util.*; 
import java.awt.*; 
import java.applet.*; 
import java.text.*; 
import java.awt.event.*; 

public class Alarm extends Applet implements Runnable 
{ 
Thread timer=null; //创建线程timer 
Image gif1; //clockp:闹钟的外壳,闹铃和报时物 
boolean setflag=false,stopflag=false,cancelflag=false; 
Panel setpanel; 
//获取声音文件 
AudioClip ring=getAudioClip(getCodeBase(), "1.mid"); 
Button setbutton=new Button("SET"); 
Button cancelbutton=new Button("CANCEL"); 
Button stopbutton=new Button("STOP"); 
//响应按钮事件 
private ActionListener setli=new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
setflag=true; 
} 
}; 
private ActionListener cancelli=new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
setflag=true; 
} 
}; 
private ActionListener stopli=new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
ring.stop(); 
//清除的方法 
//g.clearRect(83,280,20,30); 
} 
}; 


Label note1=new Label("Alarm clock:"); 
//GregorianCalendar提供的是一个日历式的东东,上面又多了很多的参数,是方便操作了不少。而Date类的功能远不及其,求个和日期有联系的还要自己计算。 
GregorianCalendar cal=new GregorianCalendar(); 
GregorianCalendar cal2=new GregorianCalendar(); 
SimpleDateFormat df=new SimpleDateFormat("yyyy MM dd HH:mm:ss");//设置时间格式 
Date dummy=new Date(); //生成Data对象 
String lastdate=df.format(dummy); 
Font F=new Font("TimesRoman",Font.PLAIN,14);//设置字体格式 
Date dat=null; 
Date timeNow; 
Color fgcol=Color.blue; 
Color fgcol2=Color.darkGray; 
Color backcolor=Color.blue; 
Label hlabel2,mlabel2,slabel2;//显示时间单位时所用的标签(时、分、秒) 
int i; 
int s,m,h; 
TextField sethour,setmin,setsec;//显示当前时间文本框和定时文本框 

//在Applet程序中,首先自动调用初始化完成必要的初始化工作,紧接着自动调用start,在进入执行程序和返回到该页面时被调用,而从该页面转到别的页面时,stop被调用,关闭浏览器时,执行destroy。 
public void init()//初始化方法 
{ 
int fieldx=50,fieldy1=120,fieldy2=220,fieldw=30,fieldh=20,space=50;//显示时间和定时文本框的定位参数 
setLayout(null); //将布局管理器初始化为null 
setpanel=new Panel(); 
setpanel.setLayout(null); 
setpanel.add(note1); 
note1.setBounds(30,100,60,20); 
note1.setBackground(backcolor); 
note1.setForeground(Color.black); 
//定时用的文本框(时、分、秒) 
sethour=new TextField("00",5); 
setmin=new TextField("00",5); 
setsec=new TextField("00",5); 
hlabel2=new Label(); 
mlabel2=new Label(); 
slabel2=new Label(); 
//定时的小时文本框的位置、大小 
setpanel.add(sethour); 
sethour.setBounds(fieldx,fieldy2,fieldw,fieldh); 
sethour.setBackground(Color.white); 
//在文本框后加入单位“时” 
setpanel.add(hlabel2); 
hlabel2.setText("h"); 
hlabel2.setBackground(backcolor); 
hlabel2.setForeground(Color.black); 
hlabel2.setBounds(fieldx+fieldw+3,fieldy2,14,20); 
fieldx=fieldx+space; 
//定时的分钟文本框的位置、大小 
setpanel.add(setmin); 
setmin.setBounds(fieldx,fieldy2,fieldw,fieldh); 
setmin.setBackground(Color.white); 
//在文本框后加入单位“分” 
setpanel.add(mlabel2); 
mlabel2.setText("m"); 
mlabel2.setBackground(backcolor); 
mlabel2.setForeground(Color.black); 
mlabel2.setBounds(fieldx+fieldw+3,fieldy2,14,20); 
fieldx=fieldx+space; 
//定时的秒文本框的位置、大小 
setpanel.add(setsec); 
setsec.setBounds(fieldx,fieldy2,fieldw,fieldh); 
setsec.setBackground(Color.white); 
//在文本框后加入单位“秒” 
setpanel.add(slabel2); 
slabel2.setText("s"); 
slabel2.setBackground(backcolor); 
slabel2.setForeground(Color.black); 
slabel2.setBounds(fieldx+fieldw+3,fieldy2,14,20); 
//设置闹钟控制按钮(on,off) 
setpanel.add(cancelbutton); 
setpanel.add(setbutton); 
setpanel.add(stopbutton); 
cancelbutton.setBounds(90,180,40,20); 
setbutton.setBounds(140,180,40,20); 
stopbutton.setBounds(522,180,40,20); 
setbutton.addActionListener(setli); 
cancelbutton.addActionListener(cancelli); 
stopbutton.addActionListener(stopli); 
stopbutton.setVisible(false); 
//将面板加入当前容器中,并设置面板的大小和背景色 
add(setpanel); 
setpanel.setBounds(300,1,250,420); 
setpanel.setBackground(backcolor); 



/*int xcenter,ycenter,s,m,h; 
//闹钟中心点所在位置 
xcenter=145; 
ycenter=162; 
s=(int)cal.get(Calendar.SECOND); 
m=(int)cal.get(Calendar.MINUTE); 
h=(int)cal.get(Calendar.HOUR_OF_DAY); 
//初始化指针位置 
lastxs=(int)(Math.cos(s*3.14f/30-3.14f/2)*30+xcenter); 
lastys=(int)(Math.sin(s*3.14f/30-3.14f/2)*30+ycenter); 
lastxm=(int)(Math.cos(m*3.14f/30-3.14f/2)*25+xcenter); 
lastym=(int)(Math.sin(m*3.14f/30-3.14f/2)*25+ycenter); 
lastxh=(int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*18+xcenter); 
lastyh=(int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*18+ycenter); 
lasts=s; */ 

MediaTracker mt=new MediaTracker(this);//为给定组件创建一个跟踪媒体的MediaTracker对象,把图片添加到被跟踪的图片组 

//Java允?Sapplet??HTML所在的位置(decument base)下?d?Y料,也允?Sapplet?钠涑淌酱a所在的位置(code base)下?d?Y料。藉由呼叫getDocumentBase()?cgotCodeBase()可得到URL物件。?@些函?????湍阏业侥阆胂螺d的?n案的位置 
//clockp=getImage(getDocumentBase(),"11.png"); 
gif1=getImage(getCodeBase(),"2.gif"); 

//i为id号 

mt.addImage(gif1,i++); 

try 
{ 
mt.waitForAll(); 
} 
catch(InterruptedException e) 
{};//等待加载结束 
resize(600,420);//设置窗口大小 
} 
//窗口显示有改变的时候调用paint 
public void paint(Graphics g) 
{//重写paint()方法 
int xh,yh,xm,ym,xs,ys,strike_times; 
int xcenter,ycenter; 
String today; 
xcenter=148; 
ycenter=186; 
dat=new Date(); 
//用当前时间初始化日历时间 
cal.setTime(dat); 
//读取当前时间 
s=(int)cal.get(Calendar.SECOND); 
m=(int)cal.get(Calendar.MINUTE); 
h=(int)cal.get(Calendar.HOUR_OF_DAY); 
//换一种时间表达形式 
today=df.format(dat); 
//指针位置 
xs=(int)(Math.cos(s*3.14f/30-3.14f/2)*30+xcenter); 
ys=(int)(Math.sin(s*3.14f/30-3.14f/2)*30+ycenter); 
xm=(int)(Math.cos(m*3.14f/30-3.14f/2)*25+xcenter); 
ym=(int)(Math.sin(m*3.14f/30-3.14f/2)*25+ycenter); 
xh=(int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*12+xcenter); 
yh=(int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*12+ycenter); 
//设置字体和颜色 
g.setFont(F); 
//前景色 

g.setColor(getBackground()); //取背景色的 
g.drawImage(gif1,75,110,this); 
//以数字方式显示年、月、日和时间 
g.drawString(today,55,415); 

//画指针 
g.drawLine(xcenter,ycenter,xs,ys); 
g.drawLine(xcenter,ycenter-1,xm,ym); //(x1,y1,x2,y2) 
g.drawLine(xcenter-1,ycenter,xm,ym); 
g.drawLine(xcenter,ycenter-1,xh,yh); 
g.drawLine(xcenter-1,ycenter,xh,yh); 



int timedelta;//记录当前时间与闹铃定时的时差 
Integer currh,currm,currs;//分别记录当前的时、分、秒 


Date dat2=new Date(); 
cal2.setTime(dat2); 
//读取当前时间 
currh=(int)cal2.get(Calendar.SECOND); 
currm=(int)cal2.get(Calendar.MINUTE); 
currs=(int)cal2.get(Calendar.HOUR_OF_DAY); 
//这样做的话说我API已过时 
//timeNow=new Date(); 
//currh=new Integer(timeNow.getHours()); 
//currm=new Integer(timeNow.getMinutes()); 
//currs=new Integer(timeNow.getSeconds()); 


if(setflag) 
{ //判断是否设置了闹钟 
//判断当前时间是否为闹钟所定的时间 
if((currh.intValue()==Integer.valueOf(sethour.getText()).intValue())&&(currm.intValue()==Integer.valueOf(setmin.getText()).intValue())&&(currs.intValue()==Integer.valueOf(setsec.getText()).intValue())) 
{ 
ring.play(); 
g.drawImage(gif1,83,280,this); 
stopbutton.setVisible(true); 
} 
timedelta=currm.intValue()*60+currs.intValue()-Integer.valueOf(setmin.getText()).intValue()*60-Integer.valueOf(setsec.getText()).intValue(); 
if((timedelta>=30)) 
{ 
//若当前时间与闹钟相差时间超过30秒,闹钟自动停 
ring.stop(); 
//清除的方法 
g.clearRect(83,280,20,30); 
} 
} 
dat=null; 
} 

public void start() 
{ 
if(timer==null) 
{ 
timer=new Thread(this);//将timer实例化 
timer.start(); 
} 
} 



public void stop() 
{ 
timer=null; 
} 

//给创建线程后start之后自动执行的函数 
public void run() 
{ 
//在run()方法中,调用repaint()方法,以重绘小程序区,进行时钟显示的更新。接着调用sleep方法让当前线程(也就是我们创建的线程clockthread)睡眠1000毫秒,因为我们每秒钟要更新一下显示,所以让它睡眠1秒 
while(timer!=null) 
{ 
try 
{ 
timer.sleep(1000); 
} 
catch(InterruptedException e) 
{} 
//调用repaint时,会首先清除掉paint方法之前的画的内容,再调用paint方法 
repaint();//刷新画面 
} 
timer=null; 
} 


//当AWT接收到一个applet的重绘请求时,它就调用applet的 update(),默认地,update() 清除applet的背景,然后调用 paint()。重载 update(),将以前在paint()中的绘图代码包含在update()中,从而避免每次重绘时将整个区域清除 
//有两种方法可以明显地减弱闪烁:重载 update()或使用双缓冲。 
//使用双缓冲技术:另一种减小帧之间闪烁的方法是使用双缓冲,它在许多动画Applet中被使用。其主要原理是创建一个后台图像,将需要绘制的一帧画入图像,然后调用DrawImage()将整个图像一次画到屏幕上去;好处是大部分绘制是离屏的,将离屏图像一次绘至屏幕上比直接在屏幕上绘制要有效得多,大大提高做图的性能。 
// 双缓冲可以使动画平滑,但有一个缺点,要分配一张后台图像,如果图像相当大,这将需要很大一块内存;当你使用双缓冲技术时,应重载 update()。 

public void update(Graphics g) 
{ 
Image offscreen_buf=null; 
//采用双缓冲技术的update()方法 
if(offscreen_buf==null) 
offscreen_buf=createImage(600,420); 
Graphics offg=offscreen_buf.getGraphics(); 
offg.clipRect(1,1,599,419); 
paint(offg); 
Graphics ong=getGraphics(); 
ong.clipRect(1,1,599,419); 
ong.drawImage(offscreen_buf,0,0,this); 
} 







/** Creates a new instance of AlarmClock */ 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -