import java.awt.*; import java.util.Calendar; import java.util.Date; import java.applet.Applet; public class Time extends Applet implements Runnable { Graphics off_g; Graphics clock_g; Image off; Image clock; Thread th; Date date; Calendar ca; String s; String hour; String minu; String sec; String day; Font font1,font2; double ra1,ra2,ra3; double wave_ra; int w, h; /*********init********/ public void init(){ w = getSize().width; h = getSize().height; off = createImage(w,h); off_g = off.getGraphics(); clock = createImage(w,h); clock_g = clock.getGraphics(); th = null; font1 = new Font("Dialog",Font.PLAIN,20); font2 = new Font("Dialog",Font.PLAIN,10); wave_ra = ra1 = ra2 = ra3 = 0; } /*********start*******/ public void start(){ if (th == null){ th = new Thread(this); th.start(); } } /*********run********/ public void run() { while (th != null){ repaint(); try{ th.sleep(200); } catch (InterruptedException e){} } } /********paint*******/ public void paint(Graphics g){ off_g.setColor(Color.black); off_g.fillRect(0,0,400,101); off_g.setColor(Color.white); off_g.setFont(font1); ca = Calendar.getInstance(); ra1 = (Math.PI/30)*ca.get(ca.SECOND) - Math.PI/2; ra2 = (Math.PI/30)*ca.get(ca.MINUTE) - Math.PI/2; ra3 = (Math.PI/6)*ca.get(ca.HOUR) - Math.PI/2 + ((Math.PI*2)/(12*60))*ca.get(ca.MINUTE); draw_clock(ra1,ra2,ra3);//アナログ時計を描く /* s = change_toString();//時間、分、秒を文字列にする day = getDay(ca.get(ca.DAY_OF_WEEK));//曜日を文字列にする off_g.setColor(Color.white); off_g.drawString(ca.get(ca.YEAR) + "年 " + (ca.get(ca.MONTH) + 1) + "月" + ca.get(ca.DATE) + "日",10,25); off_g.drawString(" " + day + "曜日",100,50); off_g.drawString(s,10,50); */ //off_g.setColor(Color.cyan); //off_g.setFont(font2); //off_g.drawString("Create by T.Funayama", 0,130); g.drawImage(off,0,0,this); } /********draw_clock******/ void draw_clock(double ra1, double ra2, double ra3){ clock_g.setColor(Color.black); clock_g.fillRect(0,0,clock.getWidth(null),clock.getHeight(null)); clock_g.setColor(Color.white); clock_g.drawOval(0,10,100,100);//時計の枠 clock_g.drawLine(50,60,50+(int)(20*Math.cos(ra3)), 60+(int)(20*Math.sin(ra3)));//短針 clock_g.setColor(Color.green); for (int i = 0; i <= 11; i++){//時間の点 clock_g.fillOval( (int)(45*Math.sin((Math.PI/6)*i))+50-3, (int)(45*Math.cos((Math.PI/6)*i))+60-3,6,6); } clock_g.setColor(Color.yellow); clock_g.drawLine(50,60,50+(int)(40*Math.cos(ra2)), 60+(int)(40*Math.sin(ra2))); clock_g.setColor(Color.cyan); clock_g.drawLine(50,60,50+(int)(45*Math.cos(ra1)), 60+(int)(45*Math.sin(ra1))); clock_g.drawLine(50,60,50+(int)(13*-Math.cos(ra1)), 60+(int)(13*-Math.sin(ra1))); createWaveClock(); off_g.drawImage(clock,0,0,this); } /************drawWaveClock*************/ public void createWaveClock(){ double ra; int w = clock.getWidth(null); int h = clock.getHeight(null); double PI2 = Math.PI*2; for (int i = 0; i < w; i++){ ra = Math.sin(wave_ra + ((PI2/100)*i)); clock_g.copyArea(i,0,1,h,0,(int)(3*ra)); } if (wave_ra >= (PI2/6)*5) wave_ra = 0; else wave_ra += PI2/6; } /*********getDay***********/ String getDay(int day_num){ String day; switch (day_num){ case 1: day = "日"; break; case 2: day = "月"; break; case 3: day = "火"; break; case 4: day = "水"; break; case 5: day = "木"; break; case 6: day = "金"; break; default: day = "土"; } return day; } /*********change_toStirng********/ String change_toString(){ if (ca.get(ca.HOUR_OF_DAY) < 10) hour = "0" + ca.get(ca.HOUR_OF_DAY); else hour = Integer.toString(ca.get(ca.HOUR_OF_DAY)); if (ca.get(ca.MINUTE) < 10) minu = "0" + ca.get(ca.MINUTE); else minu = Integer.toString(ca.get(ca.MINUTE)); if (ca.get(ca.SECOND) < 10) sec = "0" + ca.get(ca.SECOND); else sec = Integer.toString(ca.get(ca.SECOND)); return hour + ":" + minu + ":" + sec; } /*******update********/ public void update(Graphics g){ paint(g); } /*******stop********/ public void stop(){ if (th != null) th = null; } }