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; Image off; Thread th; Date date; Calendar ca; String s; String hour; String minu; String sec; String day; Font font1,font2; double ra1,ra2,ra3; /*********init********/ public void init(){ off = createImage(getSize().width,getSize().height); off_g = off.getGraphics(); th = null; font1 = new Font("Dialog",Font.PLAIN,20); font2 = new Font("Dialog",Font.PLAIN,10); 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(1000); } catch (InterruptedException e){} } } /********paint*******/ public void paint(Graphics g){ off_g.setColor(Color.white); off_g.fillRect(0,0,getSize().width,getSize().height); 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,10,50); off_g.drawString(s,10,75); off_g.setColor(Color.cyan); off_g.setFont(font2); off_g.drawString("Create by T.Funayama", 30,90); g.drawImage(off,0,0,this); } /********draw_clock******/ void draw_clock(double ra1, double ra2, double ra3){ int clock_x[] = new int[3]; int clock_y[] = new int[3]; clock_x[0] = clock_x[1] = clock_x[2] = 0; clock_y[0] = clock_y[1] = clock_y[2] = 0; int w = 3; int length = 0; double ra = 0; off_g.drawOval(200,0,100,100);//時計の枠 off_g.drawLine(250,50,250+(int)(20*Math.cos(ra3)), 50+(int)(20*Math.sin(ra3)));//短針 off_g.setColor(Color.green); for (int i = 0; i <= 11; i++){//時間の点 off_g.fillOval( (int)(45*Math.sin((Math.PI/6)*i))+250-3, (int)(45*Math.cos((Math.PI/6)*i))+50-3,6,6); } for (int i = 1; i <= 3; i++){ switch (i){ case 1://短針 off_g.setColor(Color.white); length = 25; ra = ra3; break; case 2: length = 40; ra = ra2; off_g.setColor(Color.yellow); break; case 3: length = 45; ra = ra1; off_g.setColor(Color.cyan); break; } clock_x[0] = 250+(int)Math.rint(length*Math.cos(ra)); clock_y[0] = 50+(int)Math.rint(length*Math.sin(ra)); clock_x[1] = 250+(int)Math.rint(w*Math.cos(ra-(Math.PI/2))); clock_y[1] = 50+(int)Math.rint(w*Math.sin(ra-(Math.PI/2))); clock_x[2] = 250+(int)Math.rint(w*Math.cos(ra+(Math.PI/2))); clock_y[2] = 50+(int)Math.rint(w*Math.sin(ra+(Math.PI/2))); if (i == 3){ off_g.drawLine(250,50,clock_x[0],clock_y[0]); clock_x[0] = 250+(int)Math.rint(13*-Math.cos(ra)); clock_y[0] = 50+(int)Math.rint(13*-Math.sin(ra)); off_g.drawLine(250,50,clock_x[0],clock_y[0]); } else { off_g.fillPolygon(clock_x,clock_y,3); off_g.setColor(Color.pink); off_g.drawPolygon(clock_x,clock_y,3); } } off_g.setColor(Color.pink); off_g.fillOval(250-4,50-4,8,8); } /*********getDay***********/ String getDay(int day_num){ String day; switch (day_num){ case 1: day = "Sunday"; break; case 2: day = "Monday"; break; case 3: day = "Tuesday"; break; case 4: day = "Wednesday"; break; case 5: day = "Thursday"; break; case 6: day = "Friday"; break; default: day = "Saturday"; } 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; } }