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

📄 alarmclock.java

📁 一个用Java作的闹钟的小程序 作的很精致
💻 JAVA
字号:
package java1;import java.util.*;import java.awt.*;import java.applet.*;import java.text.*;public class AlarmClock extends Applet implements Runnable{    Thread timer=null; //创建线程timer    Image clockp,gif1,gif2,clock6,clock7; //clockp:闹钟的外壳,闹铃和报时鸟    int s,m,h,hh;    AudioClip ipAu,danger,chirp;    boolean canPaint=true;    boolean flag=false;    boolean strike=true;    int counter=0;    int lasts;    Image offscreen_buf=null;    int i,j,t=0;    int timeout=166;    int lastxs=0,lastys=0,lastxm=0,lastym=0,lastxh=0,lastyh=0;    Date dummy=new Date();  //生成Data对象    GregorianCalendar cal=new GregorianCalendar();    SimpleDateFormat df=new SimpleDateFormat("yyyy MM dd HH:mm:ss");//设置时间格式    String lastdate=df.format(dummy);    Font F=new Font("TimesRoman",Font.PLAIN,14);//设置字体格式    Date dat=null;    Date timeNow=null;    Color fgcol=Color.blue;    Color fgcol2=Color.darkGray;        Panel setpanel;    Color backcolor=Color.pink;    TextField showhour,showmin,showsec,sethour,setmin,setsec;//显示当前时间文本框和定时文本框    Button onbutton;    Button offbutton;    Label hlabel1,mlabel1,slabel1,hlabel2,mlabel2,slabel2;//显示时间单位时所用的标签(时、分、秒)    Label info1=new Label("欢迎使用定时提醒闹钟"),info2=new Label("");    Label note1=new Label("当前时间:"),note2=new Label("闹钟设置:");    boolean setalerm=false,clickflag=false;//判断是否响铃和振动    int fixh=0,fixm=0,fixs=0;//记录闹钟的定时        public void init()//初始化方法    {       Integer gif_number;       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);       setpanel.add(note2);       note1.setBounds(30,100,60,20);       note1.setBackground(backcolor);       note1.setForeground(Color.black);       note2.setBounds(30,180,60,20);       note2.setBackground(backcolor);       note2.setForeground(Color.black);              hlabel1=new Label();       mlabel1=new Label();        slabel1=new Label();       hlabel2=new Label();       mlabel2=new Label();       slabel2=new Label();       //显示当前时间用的文本框       showhour=new TextField("00",5);       showmin=new TextField("00",5);       showsec=new TextField("00",5);       //定时用的文本框(时、分、秒)       sethour=new TextField("00",5);       setmin=new TextField("00",5);       setsec=new TextField("00",5);       //当前时间用的文本框的位置、大小       setpanel.add(showhour);       showhour.setBounds(fieldx,fieldy1,fieldw,fieldh);       showhour.setBackground(Color.white);       //在文本框后加入单位“时”       setpanel.add(hlabel1);       hlabel1.setText("时");       hlabel1.setBackground(backcolor);       hlabel1.setForeground(Color.black);       hlabel1.setBounds(fieldx+fieldw+3,fieldy1,14,20);       fieldx=fieldx+space;       //当前时间的分钟文本框的位置、大小       setpanel.add(showmin);       showmin.setBounds(fieldx,fieldy1,fieldw,fieldh);       showmin.setBackground(Color.white);       //在文本框后加入单位“分”       setpanel.add(mlabel1);       mlabel1.setText("分");       mlabel1.setBackground(backcolor);       mlabel1.setForeground(Color.black);       mlabel1.setBounds(fieldx+fieldw+3,fieldy1,14,20);       fieldx=fieldx+space;       //当前时间的秒文本框的位置、大小       setpanel.add(showsec);       showsec.setBounds(fieldx,fieldy1,fieldw,fieldh);       showsec.setBackground(Color.white);       //在文本框后加入单位“秒”       setpanel.add(slabel1);       slabel1.setText("秒");       slabel1.setBackground(backcolor);       slabel1.setForeground(Color.black);       slabel1.setBounds(fieldx+fieldw+3,fieldy1,14,20);       fieldx=50;       //定时的小时文本框的位置、大小       setpanel.add(sethour);       sethour.setBounds(fieldx,fieldy2,fieldw,fieldh);       sethour.setBackground(Color.white);       //在文本框后加入单位“时”       setpanel.add(hlabel2);       hlabel2.setText("时");       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("分");       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("秒");       slabel2.setBackground(backcolor);       slabel2.setForeground(Color.black);       slabel2.setBounds(fieldx+fieldw+3,fieldy2,14,20);       //设置闹钟控制按钮(on,off)       onbutton=new Button("开");       offbutton=new Button("关");       setpanel.add(onbutton);       setpanel.add(offbutton);       onbutton.setBounds(90,180,40,20);       offbutton.setBounds(140,180,40,20);       //加入一些附加的信息标签(题头,题尾)       setpanel.add(info1);       info1.setBackground(backcolor);       info1.setForeground(Color.blue);       info1.setBounds(50,50,150,20);       setpanel.add(info2);       info2.setBackground(backcolor);       info2.setForeground(Color.blue);       info2.setBounds(150,280,100,20);       //将面板加入当前容器中,并设置面板的大小和背景色       add(setpanel);       setpanel.setBounds(300,1,250,420);       setpanel.setBackground(backcolor);       //获取声音文件       ipAu=getAudioClip(getDocumentBase(),"bells/仙剑.mid");       danger=getAudioClip(getDocumentBase(),"bells/0.mid");       chirp=getAudioClip(getDocumentBase(),"bells/3.mid");              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);//创建Tracke对象       clockp=getImage(getDocumentBase(),"休闲.png");       gif1=getImage(getDocumentBase(),"gif1.gif");       gif2=getImage(getDocumentBase(),"gif2.gif");       clock6=getImage(getDocumentBase(),"clock6.gif");       clock7=getImage(getDocumentBase(),"clock7.gif");       mt.addImage(clockp,i++);       mt.addImage(gif1,i++);       mt.addImage(gif2,i++);       mt.addImage(clock6,i++);       mt.addImage(clock7,i++);       try{mt.waitForAll();}catch(InterruptedException e){};//等待加载结束       resize(600,420);//设置窗口大小    }        public void paint(Graphics g){//重写paint()方法    int xh,yh,xm,ym,xs,ys,strike_times;    int xcenter,ycenter;    String today;    Integer gif_number;    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)*18+xcenter);    yh=(int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*18+ycenter);    //设置字体和颜色    g.setFont(F);    g.setColor(fgcol);    g.setColor(fgcol2);    g.setColor(getBackground());    g.fillRect(1,1,634,419);    g.drawImage(clockp,75,110,this);    g.drawImage(clock6,83,280,this);    g.setColor(fgcol2);    g.setColor(getBackground());    g.setColor(fgcol2);    //以数字方式显示年、月、日和时间    g.drawString(today,55,415);    g.drawLine(xcenter,ycenter,xs,ys);    g.setColor(fgcol);    //画指针    g.drawLine(xcenter,ycenter-1,xm,ym);    g.drawLine(xcenter-1,ycenter,xm,ym);    g.drawLine(xcenter,ycenter-1,xh,yh);    g.drawLine(xcenter-1,ycenter,xh,yh);    lastxs=xs;lastys=ys;    lastxm=xh;lastym=ym;    lastxh=xh;lastyh=yh;    lastdate=today;        if(h<12)hh=h;//将系统时间变换到0-11区间    else hh=h-12;    if(hh==0) strike_times=12;//计算整点时钟声数    else strike_times=hh;    if((s==0&&m==0)||flag){//判断是否整点,是否是主动刷新        if(counter<strike_times){            flag=true;            g.drawImage(gif2,115,35,this);            if(lasts!=s){                if(strike){                    counter++;                    danger.play();//播放闹铃声                }                if(strike)strike=false;                else strike=true;            }        }        else {            counter=0;            flag=false;        }    }    else        g.drawImage(gif1,115,35,this);        int timedelta;//记录当前时间与闹铃定时的时差    Integer currh,currm,currs;//分别记录当前的时、分、秒        timeNow=new Date();    currh=new Integer(timeNow.getHours());    currm=new Integer(timeNow.getMinutes());    currs=new Integer(timeNow.getSeconds());    //判断是否要更新当前显示的时间,这样可以避免文本框出现频率闪动    if(currh.intValue()!=Integer.valueOf(showhour.getText()).intValue())        showhour.setText(currh.toString());    if(currm.intValue()!=Integer.valueOf(showmin.getText()).intValue())        showmin.setText(currh.toString());    if(currs.intValue()!=Integer.valueOf(showsec.getText()).intValue())        showsec.setText(currh.toString());        if(setalerm){  //判断是否设置了闹钟        //判断当前时间是否为闹钟所定的时间        if((currh.intValue()==fixh)&&(currm.intValue()==fixm)&&(currs.intValue()==fixs))            clickflag=true;        timedelta=currm.intValue()*60+currs.intValue()-fixm*60-fixs;        if((timedelta<60)&&(clickflag==true)){  //若当前时间与闹钟相差时间达到60秒            chirp.play();            g.drawImage(clock7,83,280,this);        }        else{            chirp.stop();            clickflag=false;        }    }    if(lasts!=s)        ipAu.play();//播放滴答声    lasts=s;    if(canPaint){        t+=1;        if(t==12)t=0;    }    canPaint=false;    dat=null;}public void start(){    if(timer==null){        timer=new Thread(this);//将timer实例化        timer.start();    }}public void stop(){    timer=null;}public void run(){    while(timer!=null){        try{timer.sleep(timeout);}catch(InterruptedException e){}        canPaint=true;        repaint();//刷新画面    }        timer=null;    }        public void update(Graphics g){ //采用双缓冲技术的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);    }        public boolean action(Event evt,Object arg){  //按钮事件处理函数        if(evt.target instanceof Button){            String lable=(String)arg;            if(lable.equals("开")){                setalerm=true;                //获取输入的时间                fixh=Integer.valueOf(sethour.getText()).intValue();                fixm=Integer.valueOf(setmin.getText()).intValue();                fixs=Integer.valueOf(setsec.getText()).intValue();                                clickflag=false;            }            if(lable.equals("关")){                setalerm=false;                if(chirp!=null)                    chirp.stop();                clickflag=false;            }            return true;        }        return false;    }}

⌨️ 快捷键说明

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