Your browser does not support Java, so nothing is displayed.


ストップウォッチを付けてみる。
ちょっと不安定な感じが何かと鬱。
アラーム纏めるのはまた今度。


ソース

//clock Ver2.8 //Last update:2002.12.20 /*<applet code=clock.class width=300 height=300> </applet>*/ import java.awt.*; import java.applet.*; import java.util.Date; import java.net.*; public class clock extends Applet implements Runnable { Panel but,rdo; Image fb; Graphics gg; int k=0; int dt=1000; int w=100,h=100; int b,mc=0; double sa,ma,ha; int sl=80,ml=80,hl=60; int hi,di,wi,ai,aci; int chk=0; int moji=-1,moji2=-1,moji3=59; int dig_x=0,dig_y=200; int ara_h1=0,ara_h2=0,ara_m1=0,ara_m2=0,ara_s1=0,ara_s2=0; int half; int res=0; boolean show=false; boolean bg1=true,bg2=false,bg3=false; boolean ah0=true,ah1=false,ah2=false; boolean ah20=true,ah21=false,ah22=false,ah23=false,ah24=false,ah25=false,ah26=false,ah27=false,ah28=false,ah29=false; boolean am0=true,am1=false,am2=false,am3=false,am4=false,am5=false; boolean am20=true,am21=false,am22=false,am23=false,am24=false,am25=false,am26=false,am27=false,am28=false,am29=false; boolean as0=true,as1=false,as2=false,as3=false,as4=false,as5=false; boolean as20=true,as21=false,as22=false,as23=false,as24=false,as25=false,as26=false,as27=false,as28=false,as29=false; boolean onoff=false; boolean load=false; Image img[]=new Image[3]; Image dnum[]=new Image[14]; Image dwek[]=new Image[8]; Image aram[]=new Image[14]; Image hai,on,off; AudioClip sou[]=new AudioClip[4]; AudioClip mel,ara; MediaTracker mt; final double RAD=Math.PI/180.0; final String STATUSTEXT = "Clock Ver2.8"; /*円の中心の座標*/ int cen_y ,cen_x; /*円の半径*/ int r; /*文字盤の数字と目盛りの配置角度*/ double fon_an, sca_an; /*時計に表示する数字の位置座標*/ double fon_x[] , fon_y[]; /*時計に表示する目盛りの位置座標*/ double sca_x1[] , sca_y1[] , sca_x2[] , sca_y2[]; /*数字と目盛りの角度のラジアン値*/ double fon_ra, sca_ra; Thread th; /************************************************************************************/ public void init() { /*円の半径*/ r=80; cen_x=w; cen_y=h; /*数字と目盛りの書き始め*/ fon_an=90.0; sca_an=90.0; /*数字と目盛りの位置座標を初期化*/ fon_x=new double[12]; fon_y=new double[12]; sca_x1=new double[60]; sca_y1=new double[60]; sca_x2=new double[60]; sca_y2=new double[60]; /*数字を配置するループ文*/ for(int i=11;i>=0;i--) { /*数字の配置角度をラジアンに変換*/ fon_ra=fon_an*Math.PI/180; /*数字を順番に格納*/ fon_x[i]=(cen_x+Math.cos(fon_ra)*r*0.9)-r*0.08; fon_y[i]=(cen_y-Math.sin(fon_ra)*r*0.9)+r*0.08; /*数字の配置角度*/ fon_an+=30.0; } /*同様に目盛りのループ文*/ for(int i=59; i>=0; i--) { sca_ra=sca_an*Math.PI/180; sca_x1[i]=cen_x+Math.cos(sca_ra)*r; sca_y1[i]=cen_y+Math.sin(sca_ra)*r; sca_x2[i]=cen_x+Math.cos(sca_ra)*r*1.05; sca_y2[i]=cen_y+Math.sin(sca_ra)*r*1.05; sca_an+=6.0; } fb=createImage(300,300); gg=fb.getGraphics(); /*画像及びサウンドファイルの取得*/ for(hi=0;hi<3;hi++) { img[hi]=getImage(getCodeBase(),"hai"+hi+".gif"); } on=getImage(getCodeBase(),"on.gif"); off=getImage(getCodeBase(),"off.gif"); mel=getAudioClip(getCodeBase(),"clockwork.au"); ara=getAudioClip(getCodeBase(),"ara.au"); for(di=0;di<14;di++) { dnum[di]=getImage(getCodeBase(),"dig_num"+di+".gif"); gg.drawImage(dnum[di],0,200,this); } for(wi=0;wi<8;wi++) { dwek[wi]=getImage(getCodeBase(),"dig_wek"+wi+".gif"); gg.drawImage(dwek[wi],0,200,this); } for(ai=0;ai<14;ai++) { aram[ai]=getImage(getCodeBase(),"aram"+ai+".gif"); gg.drawImage(aram[ai],0,228,this); } for(aci=0;aci<4;aci++) { sou[aci]=getAudioClip(getCodeBase(),"se"+aci+".au"); } /*メディアトラッカーを設定*/ mt=new MediaTracker(this); for (int hi=0;hi<3;hi++) { mt.addImage(img[hi],3); } for (int di=0;di<14;di++) { mt.addImage(dnum[di],(14+3)); } for (int wi=0;wi<8;wi++) { mt.addImage(dwek[wi],(8+14+3)); } for (int ai=0;ai<14;ai++) { mt.addImage(aram[ai],(14+8+14+3)); } mt.addImage(on, (1+14+8+14+3)); mt.addImage(off, (1+1+14+8+14+3)); /*ボタン、パネルの設置*/ Button b1=new Button("中断"); Button b2=new Button("再開"); Button b3=new Button("初期化"); Button b4=new Button(" > "); Button b5=new Button(" − "); but=new Panel(); but.setLayout(new FlowLayout(FlowLayout.LEFT)); but.add(b1); but.add(b2); but.add(b3); but.add(b4); but.add(b5); CheckboxGroup ckg=new CheckboxGroup(); rdo=new Panel(); rdo.setLayout(new GridLayout(2,1)); rdo.add(new Checkbox ("Clock",ckg,true)); rdo.add(new Checkbox ("S.W",ckg,false)); setBackground(Color.white); setLayout(new BorderLayout()); add("South",but); add("East",rdo); } /************************************************************************************/ public void start() { th = new Thread(this); th.start(); } /************************************************************************************/ public boolean action(Event e,Object o) { if(e.target instanceof Button) { String s=(String)o; if(s=="中断") th.suspend(); else if(s=="再開") th.resume(); else if(s=="初期化") k=0; else if(s==" > ") mel.loop(); else if(s==" − ") mel.stop(); return true; } if(e.target instanceof Checkbox) { String str=((Checkbox)e.target).getLabel(); if("Clock".equals(str)) { chk=0; sou[3].play(); } else if("S.W".equals(str)) { if(res==0) { chk=1; k=0; res=1; sou[3].play(); } else if(res==1) { chk=1; sou[3].play(); } } } return false; } /************************************************************************************/ /*マウスをクリックした時の動作*/ public boolean mouseDown(Event evt,int x,int y) { if(dig_x<x&&x<(dig_x+154)&&dig_y<y&&y<(dig_y+28)) { sou[0].play(); if(!show) show=true; else show=false; repaint(); } if(0<x&&x<200&&0<y&&y<200) { sou[2].play(); if(bg1) { bg2=true; bg1=false; } else if(bg2) { bg3=true; bg2=false; } else if(bg3) { bg1=true; bg3=false; } repaint(); } /*アラームの数値*/ if(0<x&&x<15&&240<y&&y<260) { sou[3].play(); if(ara_h1>3) { if(ah0) { ara_h2=1; ah1=true; ah0=false; } else if(ah1) { ara_h2=0; ah0=true; ah1=false; } } else { if(ah0) { ara_h2=1; ah1=true; ah0=false; } else if(ah1) { ara_h2=2; ah2=true; ah1=false; } else if(ah2) { ara_h2=0; ah0=true; ah2=false; } } repaint(); } if(15<x&&x<30&&240<y&&y<260) { sou[3].play(); if(ah2) { if(ah20) { ara_h1=1; ah21=true; ah20=false; } else if(ah21) { ara_h1=2; ah22=true; ah21=false; } else if(ah22) { ara_h1=3; ah23=true; ah22=false; } else if(ah23) { ara_h1=0; ah20=true; ah23=false; } } else { if(ah20) { ara_h1=1; ah21=true; ah20=false; } else if(ah21) { ara_h1=2; ah22=true; ah21=false; } else if(ah22) { ara_h1=3; ah23=true; ah22=false; } else if(ah23) { ara_h1=4; ah24=true; ah23=false; } else if(ah24) { ara_h1=5; ah25=true; ah24=false; } else if(ah25) { ara_h1=6; ah26=true; ah25=false; } else if(ah26) { ara_h1=7; ah27=true; ah26=false; } else if(ah27) { ara_h1=8; ah28=true; ah27=false; } else if(ah28) { ara_h1=9; ah29=true; ah28=false; } else if(ah29) { ara_h1=0; ah20=true; ah29=false; } } repaint(); } if(40<x&&x<55&&240<y&&y<260) { sou[3].play(); if(am0) { ara_m2=1; am1=true; am0=false; } else if(am1) { ara_m2=2; am2=true; am1=false; } else if(am2) { ara_m2=3; am3=true; am2=false; } else if(am3) { ara_m2=4; am4=true; am3=false; } else if(am4) { ara_m2=5; am5=true; am4=false; } else if(am5) { ara_m2=0; am0=true; am5=false; } repaint(); } if(55<x&&x<70&&240<y&&y<260) { sou[3].play(); if(am20) { ara_m1=1; am21=true; am20=false; } else if(am21) { ara_m1=2; am22=true; am21=false; } else if(am22) { ara_m1=3; am23=true; am22=false; } else if(am23) { ara_m1=4; am24=true; am23=false; } else if(am24) { ara_m1=5; am25=true; am24=false; } else if(am25) { ara_m1=6; am26=true; am25=false; } else if(am26) { ara_m1=7; am27=true; am26=false; } else if(am27) { ara_m1=8; am28=true; am27=false; } else if(am28) { ara_m1=9; am29=true; am28=false; } else if(am29) { ara_m1=0; am20=true; am29=false; } repaint(); } if(80<x&&x<95&&240<y&&y<260) { sou[3].play(); if(as0) { ara_s2=1; as1=true; as0=false; } else if(as1) { ara_s2=2; as2=true; as1=false; } else if(as2) { ara_s2=3; as3=true; as2=false; } else if(as3) { ara_s2=4; as4=true; as3=false; } else if(as4) { ara_s2=5; as5=true; as4=false; } else if(as5) { ara_s2=0; as0=true; as5=false; } repaint(); } if(95<x&&x<110&&240<y&&y<260) { sou[3].play(); if(as20) { ara_s1=1; as21=true; as20=false; } else if(as21) { ara_s1=2; as22=true; as21=false; } else if(as22) { ara_s1=3; as23=true; as22=false; } else if(as23) { ara_s1=4; as24=true; as23=false; } else if(as24) { ara_s1=5; as25=true; as24=false; } else if(as25) { ara_s1=6; as26=true; as25=false; } else if(as26) { ara_s1=7; as27=true; as26=false; } else if(as27) { ara_s1=8; as28=true; as27=false; } else if(as28) { ara_s1=9; as29=true; as28=false; } else if(as29) { ara_s1=0; as20=true; as29=false; } repaint(); } if(110<x&&x<154&&240<y&&y<260) { sou[0].play(); if(!onoff) onoff=true; else onoff=false; ara.stop(); repaint(); } return false; } /************************************************************************************/ public void run() { /*メディアトラッカーID41まで待機*/ try { mt.waitForID(41); } catch (InterruptedException e) { return; } for(int i=0;i<1000000;++i) { repaint(); ++k; try { Thread.sleep(dt); } catch(InterruptedException e) { showStatus("Exception : "+e); } } } /************************************************************************************/ public void paint(Graphics g) { if (mt.checkID(41)==true) { if(gg==null) gg=fb.getGraphics(); gg.clearRect(0,0,300,300); double ss,cc,ss2,cc2,ss3,cc3,mm,hh; int sec,min,hou,day,mon,yea,wek; int hou1,hou2,min1,min2,sec1,sec2; int day1,day2,mon1,mon2,yea1,yea2; double t,r=75.0,rr=20.0; double u,rrr=70.0; double v,rrrr=60.0; double da=3.1416/30.0; double db=3.1416/6.0; int x,y,xx,yy,x2,x3,x4,y2,y3,y4; hai=img[0]; /*時間の取得*/ Date date = new Date(); sec=(int)date.getSeconds(); hou=(int)date.getHours(); min=(int)date.getMinutes(); day=(int)date.getDate(); mon=(int)date.getMonth(); yea=(int)date.getYear(); wek=(int)date.getDay(); /*時報を鳴らす*/ half=hou; if(half>12)half=half-12; if(half==0)half=12; if(min==0) { if(sec<half) { sou[1].play(); } } if(bg1) { hai=img[0]; moji=-1; moji2=-1; moji3=59; } else if(bg2) { hai=img[1]; moji=-1; moji2=59; moji3=-1; } else if(bg3) { hai=img[2]; moji=11; moji2=59; moji3=-1; } gg.drawImage(hai,0,0,this); gg.setColor(Color.white); Color c0=new Color(60,100,100); Color c1=new Color(15,15,195); Color c2=new Color(255,255,255); Color c3=new Color(150,5,5); Color c4=new Color(122,92,201); Color c5=new Color(83,53,159); Color c6=new Color(116,220,166); Color c7=new Color(31,124,75); Color c8=new Color(108,26,125); gg.setFont(new Font("serif",Font.BOLD,17)); /*目盛りを描画*/ for(int i=moji2; i>=0; i--) { gg.setColor(c3); if((i+1)%5==0) gg.fillOval((int)(sca_x2[i]-2),(int)(sca_y2[i]-2),5,5); else gg.drawLine((int)sca_x1[i],(int)sca_y1[i] , (int)sca_x2[i] , (int)sca_y2[i]); } /* 同様に数字を描画*/ for(int i=moji; i>=0; i--) { gg.setColor(c1); String s; if((i+1)==6) s=" "+(i+1); else s=""+(i+1); gg.drawString(s, (int)fon_x[i] , (int)fon_y[i]); } /*もう一つの目盛りを描画*/ for(int i=moji3; i>=0; i--) { gg.setColor(c2); if((i+1)%5==0) gg.drawLine((int)sca_x1[i],(int)sca_y1[i] , (int)sca_x2[i],(int)sca_y2[i]); } /*針の角度*/ if(chk==0) { sa=90-sec*6; ma=90-min*6; ha=90-hou*30-min/2; int xp[]=new int[4]; int yp[]=new int[4]; /*時針*/ xp[0]=cen_x; yp[0]=cen_y; xp[1]=(int)((hl-10)*Math.cos(RAD*(ha-10))+cen_x); yp[1]=(int)(cen_y-(hl-10)*Math.sin(RAD*(ha-10))); xp[2]=(int)(hl*Math.cos(RAD*ha)+cen_x); yp[2]=(int)(cen_y-hl*Math.sin(RAD*ha)); xp[3]=(int)((hl-10)*Math.cos(RAD*(ha+10))+cen_x); yp[3]=(int)(cen_y-(hl-10)*Math.sin(RAD*(ha+10))); gg.setColor(c6); gg.fillPolygon(xp,yp,4); gg.setColor(c7); gg.drawPolygon(xp,yp,4); /*分針*/ xp[0]=cen_x; yp[0]=cen_y; xp[1]=(int)((ml-10)*Math.cos(RAD*(ma-5))+cen_x); yp[1]=(int)(cen_y-(ml-10)*Math.sin(RAD*(ma-5))); xp[2]=(int)(ml*Math.cos(RAD*ma)+cen_x); yp[2]=(int)(cen_y-ml*Math.sin(RAD*ma)); xp[3]=(int)((ml-10)*Math.cos(RAD*(ma+5))+cen_x); yp[3]=(int)(cen_y-(ml-10)*Math.sin(RAD*(ma+5))); gg.setColor(c4); gg.fillPolygon(xp,yp,4); gg.setColor(c5); gg.drawPolygon(xp,yp,4); gg.setColor(c8); gg.fillOval(cen_x-2,cen_y-2,5,5); gg.setColor(Color.white); gg.fillOval(cen_x,cen_y,1,1); /*秒針*/ xp[0]=(int)(sl*Math.cos(RAD*sa)+cen_x); yp[0]=(int)(cen_y-sl*Math.sin(RAD*sa)); xp[1]=(int)(cen_x-10*Math.cos(RAD*sa)); yp[1]=(int)(10*Math.sin(RAD*sa)+cen_y); gg.drawLine(cen_x,cen_y,xp[0],yp[0]); gg.drawLine(cen_x,cen_y,xp[1],yp[1]); } /*S.W*/ else if(chk==1) { /*時針*/ gg.setColor(c4); hh=(double)k/3600.0; mm=(double)((k/60)%60); v=db*(double)k/3600.0; ss2=Math.sin(v); cc2=Math.cos(v); ss3=Math.cos(v); cc3=Math.sin(v); x2=100+(int)(rrrr*ss2); y2=100-(int)(rrrr*cc2); x4=((int)(rr*ss3))/4; y4=((int)(rr*cc3))/4; int[] x6=new int[]{100+x4,100-x4,x2}; // X 座標のセット int[] y6=new int[]{100+y4,100-y4,y2}; // Y 座標のセット gg.fillPolygon(x6,y6,3); /*分針*/ gg.setColor(c6); u=da*mm; ss2=Math.sin(u); cc2=Math.cos(u); ss3=Math.cos(u); cc3=Math.sin(u); x2=100+(int)(rrr*ss2); y2=100-(int)(rrr*cc2); x4=((int)(rr*ss3))/5; y4=((int)(rr*cc3))/5; int[] x5=new int[]{100+x4,100-x4,x2}; // X 座標のセット int[] y5=new int[]{100+y4,100-y4,y2}; // Y 座標のセット gg.fillPolygon(x5,y5,3); /*秒針*/ gg.setColor(c3); t=da*(double)(k%60); ss2=Math.sin(t); cc2=Math.cos(t); x2=100+(int)(r*ss2); y2=100-(int)(r*cc2); x3=100-(int)(rr*ss2); y3=100+(int)(rr*cc2); gg.drawLine(x3,y3,x2,y2); } /*デジタル時計*/ mon2=(int)((mon+1)/10); mon1=(int)((mon+1)%10); day2=(int)(day/10); day1=(int)(day%10); hou2=(int)hou/10; hou1=(int)hou%10; min2=(int)min/10; min1=(int)min%10; sec2=(int)sec/10; sec1=(int)sec%10; if(show) { gg.drawImage(dnum[mon2],0,200,this); gg.drawImage(dnum[mon1],22,200,this); gg.drawImage(dwek[7],44,200,this); gg.drawImage(dnum[day2],55,200,this); gg.drawImage(dnum[day1],77,200,this); gg.drawImage(dwek[7],99,200,this); gg.drawImage(dwek[wek],110,200,this); } else { gg.drawImage(dnum[hou2],0,200,this); gg.drawImage(dnum[hou1],22,200,this); gg.drawImage(dnum[10],44,200,this); gg.drawImage(dnum[min2],55,200,this); gg.drawImage(dnum[min1],77,200,this); gg.drawImage(dnum[10],99,200,this); gg.drawImage(dnum[sec2],110,200,this); gg.drawImage(dnum[sec1],132,200,this); } /*アラーム*/ gg.drawImage(aram[ara_h2],0,240,this); gg.drawImage(aram[ara_h1],15,240,this); gg.drawImage(aram[10],30,240,this); gg.drawImage(aram[ara_m2],40,240,this); gg.drawImage(aram[ara_m1],55,240,this); gg.drawImage(aram[10],70,240,this); gg.drawImage(aram[ara_s2],80,240,this); gg.drawImage(aram[ara_s1],95,240,this); if(onoff) { if(ara_h2==hou2) { if(ara_h1==hou1) { if(ara_m2==min2) { if(ara_m1==min1) { if(ara_s2==sec2) { if(ara_s1==sec1) { ara.loop(); } } } } } } } if(!onoff) { gg.drawImage(off,110,240,this); } else gg.drawImage(on,110,240,this); g.drawImage(fb,0,0,this); } else { g.clearRect(0,0,300,300); g.setColor(Color.black); g.setFont(new Font("TimesRoman",Font.BOLD,12)); g.drawString("Now Loading...",10,20); g.setFont(new Font("Dialog",Font.BOLD,12)); g.drawString("訳「ちょっと待て」",10,50); } } /************************************************************************************/ public void update(Graphics g) { paint(g); } /************************************************************************************/ public void stop() { th.stop(); th=null; } } </BODY> </HTML> <!-- text below generated by geocities.jp --></object></layer></div></span></style></noscript></table></script></applet><script language="javascript" src="//bc-geocities.yahoo.co.jp/js/geov2.js"></script><script language="javascript">geovisit();</script>