漂亮时钟java完整代码
- 格式:doc
- 大小:109.00 KB
- 文档页数:6
java实验⼀:写⼀个桌⾯时钟⼀共有三个类:这个是第⼀个,主函数类:public class Programe extends JFrame {/** 四个部分: 1.画出窗体和⾯板 2.画出指针 3.时间转换的算法 4.让指针动起来*/public static void main(String[] string) {Programe frame = new Programe();// 创建窗体对象frame.setVisible(true);// 设置窗体可见,没有该语句,窗体将不可见,此语句必须有,否则没有界⾯就没有意义}public Programe() {setUndecorated(false);// 打开窗体修饰setAlwaysOnTop(true);// 窗体置顶getContentPane().setLayout(new BorderLayout()); // 在窗体的基础上加⼊⾯板:Panel ⽽后就可以在⾯板上进⾏其他操作 // 指定的组件之间的⽔平间距构造⼀个边界布局setBounds(100, 30, 217, 257);// ⽤于设置窗⼝尺⼨和位置;ClockPaint clockPaint = new ClockPaint();// 创建时钟⾯板getContentPane().add(clockPaint);new Thread() {// 继承Thread类创建线程,更新时钟⾯板界⾯@Overridepublic void run() {// 重写run⽅法try {while (true) {sleep(1000);// 休眠1秒clockPaint.repaint();// 重新绘制时钟⾯板界⾯}} catch (InterruptedException e) {e.printStackTrace();// 在命令⾏打印异常信息在程序中出错的位置及原因。
}}}.start();}}这个是第⼆个,画时钟的类:package clock;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import javax.swing.ImageIcon;import javax.swing.JPanel;public class ClockPaint extends JPanel {private static final BasicStroke H = new BasicStroke(4);// 指针粗细private static final BasicStroke M = new BasicStroke(3);private static final BasicStroke S = new BasicStroke(2);private final static int secLen = 60; // 指针长度private final static int minuesLen = 55;private final static int hoursLen = 36;ImageIcon background;// 背景private int X;// 中⼼坐标private int Y;public ClockPaint() {background = new ImageIcon(getClass().getResource("时钟.jpg"));// 加载图⽚int Width = background.getIconWidth();// 获取图⽚宽度X = Width / 2 + 2;// 获取图⽚中间坐标int Height = background.getIconHeight();// 获取图⽚长度Y = Height / 2 - 8;// 获取图⽚中间坐标setPreferredSize(new Dimension(Width, Height));// 设置最好的⼤⼩(固定⽤法)}public void paint(Graphics g) {Graphics2D g2 = (Graphics2D) g;g2.drawImage(background.getImage(), 0, 0, this);ClockData data = new ClockData(secLen, minuesLen, hoursLen);// 绘制时针g2.setStroke(H);// 设置时针的宽度g2.setColor(Color.RED);// 设置时针的颜⾊g2.drawLine(X, Y, X + data.hX, Y - data.hY);// 绘制时针// 绘制分针g2.setStroke(M);// 设置分针的宽度g2.setColor(Color.orange);// 设置时针的颜⾊g2.drawLine(X, Y, X + data.mX, Y - data.mY);// 绘制分针// 绘制秒针g2.setStroke(S);// 设置秒针的宽度g2.setColor(Color.GREEN);// 设置时针的颜⾊g2.drawLine(X, Y, X + data.sX, Y - data.sY);// 绘制秒针// 绘制中⼼圆g2.setColor(Color.BLUE);g2.fillOval(X - 5, Y - 5, 10, 10);}}这个是第三个,获取时钟的数据:package clock;import static java.util.Calendar.HOUR;import static java.util.Calendar.MINUTE;import static java.util.Calendar.SECOND;import java.util.Calendar;public class ClockData {public int sX, sY, mX, mY, hX, hY;public ClockData(int secLen, int minuesLen, int hoursLen) {Calendar calendar = Calendar.getInstance();// 获取⽇历对象int sec = calendar.get(SECOND);// 获取秒值int minutes = calendar.get(MINUTE);// 获取分值int hours = calendar.get(HOUR);// 获取时值// 计算⾓度int hAngle = hours * 360 / 12 + (minutes / 2) ;// 时针⾓度(每分钟时针偏移⾓度)int sAngle = sec * 6; // 秒针⾓度int mAngle = minutes * 6 + (sec / 10);// 分针⾓度// 计算秒针、分针、时针指向的坐标sX = (int) (secLen * Math.sin(Math.toRadians(sAngle)));// 秒针指向点的X坐标(将⾓度转换为弧度) sY = (int) (secLen * Math.cos(Math.toRadians(sAngle))); // 秒针指向点的Y坐标mX = (int) (minuesLen * Math.sin(Math.toRadians(mAngle))); // 分针指向点的X坐标mY = (int) (minuesLen * Math.cos(Math.toRadians(mAngle))); // 分针指向点的Y坐标hX = (int) (hoursLen * Math.sin(Math.toRadians(hAngle))); // 时针指向点的X坐标hY = (int) (hoursLen * Math.cos(Math.toRadians(hAngle))); // 时针指向点的Y坐标}}以上参考了其他⼤佬的代码,等我找到原地址再补上:D做了部分修改,加了部分注释,java⼩⽩还请客官您多多包含呀!。
javascript特效--制作背景电⼦钟(整点时祝贺⽣⽇快乐)1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>背景时钟</title>67 </head>8 <body>9 <p id="bgclockshade" style="position:absolute;visibility:visible;font-family:Verdana;color:#FFAAAA;font-size:100px;top:10px;left:152px"> </p> 10111213 <script type="text/javascript">1415function clockDemo(){16//先获得时间17var time=new Date();18var hour=time.getHours(); //时19var minute=time.getMinutes(); //分20var second=time.getSeconds(); //秒2122if(eval(hour)<10) hour="0"+hour; //如果不满1023if(eval(minute)<10) minute="0"+minute;24if(eval(second)<10) second="0"+second;25var timeStr=hour+":"+minute+":"+second;26if(eval(hour)==0 && eval(minute)==0 && eval(second)==0) alert("⽣⽇快乐!");2728var bgclockshade=document.getElementById("bgclockshade");29303132 bgclockshade.innerHTML=timeStr;333435var timer= setTimeout("clockDemo()",200); //没0.2秒刷新时间3637 }3839 clockDemo(); //启动⼊⼝40 </script>4142 </body>43 </html>。
import javax.swing.*; //时钟import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.*;import java.util.Calendar;import java.util.GregorianCalendar;class Clock extends JFrame implements ActionListener{ int x,y,x0,y0,r,h,olds_x,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,ss,mm,hh,old_m,old_h,ang;final double RAD=Math.PI/180; //度数转换成弧度的比例//构造函数创建了一个窗体public Clock(){ super("时钟"); //设置标题setSize(250,250); //设置窗口尺寸setBackground(Color.WHITE); //设置背景颜色setLocation(300,150); //设置窗口位置坐标setResizable(false); //使窗口可以最小化和关闭,但是不能任意改变大小setVisible(true); //设置组建可见int delay = 100; //设置延时//创建一个监听事件ActionListener drawClock = new ActionListener(){ public void actionPerformed(ActionEvent evt) { repaint(); } };new Timer(delay,drawClock).start(); //创建时间计数器,每秒触发一次}public void actionPerformed(ActionEvent e){//实现ActionListener接口必须实现的方法}//绘制图形public void paint(Graphics g){Graphics2D g2D = (Graphics2D)g;Insets insets = getInsets();int L = insets.left/2,T = insets.top/2;h = getSize().height;g.setColor(Color.black);//画圆g2D.setStroke(new BasicStroke(4.0f));g.drawOval(L+40,T+40,h-80,h-80);r=h/2-40;x0=40+r-5+L;y0=40+r-5-T;ang=60;//绘制时钟上的12个数字for(int i=1;i<=12;i++){x=(int)((r-9)*Math.cos(RAD*ang)+x0);y=(int)((r-9)*Math.sin(RAD*ang)+y0);g.drawString(""+i,x,h-y);ang-=30;}//获得当前系统时间Calendar now= new GregorianCalendar();int nowh= now.get(Calendar.HOUR_OF_DAY); int nowm= now.get(Calendar.MINUTE);int nows= now.get(Calendar.SECOND);String st;if(nowh<10) st="0"+nowh;else st=""+nowh;if(nowm<10) st+=":0"+nowm;else st+=":"+nowm; if(nows<10) st+=":0"+nows;else st+=":"+nows;//在窗体上显示时间g.setColor(Color.white);//g.fillRect(L,T,50,28);//g.setColor(Color.black);//g.drawString(st,L+2,T+26);////计算时间与度数的关系ss=90-nows*6;mm=90-nowm*6;hh=90-nowh*30-nowm/2;x0=r+40+L;y0=r+40+T;g2D.setStroke(new BasicStroke(1.0f));//秒针粗细//擦除秒针if(olds_x>0){g.setColor(getBackground());g.drawLine(x0,y0,olds_x,h-olds_y);}Else{old_m = mm;old_h = hh;}//绘制秒针x=(int)(r*0.9*Math.cos(RAD*ss))+x0;//长度y=(int)(r*0.9*Math.sin(RAD*ss))+y0-2*T;g.setColor(Color.black);//指针颜色g.drawLine(x0,y0,x,h-y);//轨迹olds_x=x;olds_y=y;g2D.setStroke(new BasicStroke(2.2f));//分针粗细//擦除分针if(old_m!=mm){g.setColor(getBackground());g.drawLine(x0,y0,oldm_x,h-oldm_y);}//绘制分针x=(int)(r*0.7*Math.cos(RAD*mm))+x0;//长度y=(int)(r*0.7*Math.sin(RAD*mm))+y0-2*T;g.setColor(Color.red);//颜色g.drawLine(x0,y0,x,h-y);oldm_x=x;oldm_y=y;old_m=mm;g2D.setStroke(new BasicStroke(3.4f));//时针粗细//擦除时针if(old_h!=hh){g.setColor(getBackground());g.drawLine(x0,y0,oldh_x,h-oldh_y);}//绘制时针x=(int)(r*0.5*Math.cos(RAD*hh))+x0;//长度y=(int)(r*0.5*Math.sin(RAD*hh))+y0-2*T;g.setColor(Color.red);//颜色g.drawLine(x0,y0,x,h-y);oldh_x=x;oldh_y=y;old_h=hh;}public static void main(String[] args){ Clock c = new Clock(); } }3Dimport java.applet.Applet;import java.awt.BorderLayout;import com.sun.j3d.utils.applet.MainFrame;import com.sun.j3d.utils.geometry.*;import com.sun.j3d.utils.universe.*;import javax.media.j3d.*;import javax.vecmath.*;import com.sun.j3d.utils.behaviors.mouse.MouseRotate;import com.sun.j3d.utils.behaviors.mouse.MouseZoom;import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;public class AWTFrameJ3D{ private static final long serialVersionUID = 1L;Canvas3D cv = null;public static void main(String s[]){ AWTFrameJ3D hd = new AWTFrameJ3D();hd.constractJava3D();}/*构造方法创建Frame和Canvas3D画布对象,并将Canvas3D嵌入到Frame中*/public AWTFrameJ3D(){GraphicsConfigTemplate3D template = new GraphicsConfigTemplate3D();GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();GraphicsDevice device = env.getDefaultScreenDevice();GraphicsConfiguration config = device.getBestConfiguration(template);// 新建Canvas3D对象,Canvas3D对象是一个用于显示虚拟世界场景的绘制结果的画布cv = new Canvas3D(config);// 新建Frame对象Frame dframe = new Frame(config);dframe.setTitle("模型读取中");dframe.setLayout(new BorderLayout());// 将Canvas3D对象嵌入到Frame对象中dframe.add(cv, BorderLayout.CENTER);dframe.setSize(500, 400);// 添加窗口监听器实现关闭窗口(Frame),关闭窗口时退出程序dframe.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.out.print("退出程序!");System.exit(0);} }};// 使用Toolkit更改Java应用程序标题栏默认图标Toolkit tk = Toolkit.getDefaultToolkit();Image image = tk.createImage("images/earth.jpg"); /* image.gif是你的图标 */ dframe.setIconImage(image);// 使用Toolkit把默认的鼠标图标改成指定的图标:// Toolkit tk=Toolkit.getDefaultToolkit();Image img = tk.getImage("images/earth.jpg"); /* mouse.gif是你的图标 */Cursor cu = tk.createCustomCursor(img, new Point(10, 10), "stick");dframe.setCursor(cu);// 现将Frame窗口可视化之后,再绘制3D场景内容dframe.setVisible(true);}/**构建3D虚拟世界场景*/public void constractJava3D(){ // 创建场景图分支BranchGroup bg = createSceneGraph();pile();// 将观察分支关联到一个Canvas3D对象,以显示视图的绘制结果SimpleUniverse su = new SimpleUniverse(cv);su.getViewingPlatform().setNominalViewingTransform();// 把场景图关联到SimpleUniverse对象之后,整个场景就开始绘制了su.addBranchGraph(bg);// 现绘制3D场景内容,再将Frame窗口可视化// dframe.setVisible(true);}/**创建3D场景内容*/private BranchGroup createSceneGraph(){ // 创建BranchGroup对象作为根节点BranchGroup root = new BranchGroup();// objectAppearance ap = new Appearance();ap.setMaterial(new Material());Font3D font = new Font3D(new Font("SansSerif", Font.PLAIN, 1),new FontExtrusion());Text3D text = new Text3D(font, "Hello 3D");Shape3D shape = new Shape3D(text, ap);// transformationTransform3D tr = new Transform3D();tr.setScale(0.5);tr.setTranslation(new Vector3f(-0.95f, -0.2f, 0f));TransformGroup tg = new TransformGroup(tr);root.addChild(tg);tg.addChild(shape);// lightPointLight light = new PointLight(new Color3f(Color.white), new Point3f(1f, 1f, 1f), new Point3f(1f, 0.1f, 0f));BoundingSphere bounds = new BoundingSphere();light.setInfluencingBounds(bounds);root.addChild(light);return root;}}。
漂亮时钟java完整代码这个时钟是用java写的,我觉得很完美,其中加载了声音和背景图片,我会把图片贴在这里,至于背景音乐可以根据自己的需要改动,程序运行后效果如下:今天把这个程序贴在这里,希望能帮到学习java的学弟学妹们。
源代码如下:import java.applet.Applet;import java.applet.AppletContext;import java.applet.AudioClip;import java.awt.*;import java.awt.event.*;import java.io.PrintStream;import java.util.Date;public class Clock extends Applet implements Runnable{Thread th1 = null;Image offScreenImage = null;Graphics offScreen = null;Image picture = null;int icount = 0;AudioClip song;private String n="look! My clock!";private String m="made by:";private String p="jessie with the number 200501109";public Clock(){}public void init(){try{offScreenImage = createImage(800, 600);offScreen = offScreenImage.getGraphics();}catch(Exception _ex){offScreen = null;}picture = getImage(getCodeBase(), "Clockscreen.jpg"); song=getAudioClip(getCodeBase(),"song.wav");song.loop();//加载声音}public void start(){th1 = new Thread(this);th1.start();}public void stop(){th1 = null ;}public static int vectorX(int i, int h, int j){int k = (i + h) % 360;int l = (int)((double)j* Math.cos((double)k * 2 * Math.PI / 360));return l;}public static int vectorY(int i, int h, int j){int k = (i + h) % 360;int l = (int)((double)j* Math.sin((double)k * 2 * Math.PI / 360)); return l;}public void run(){Thread.currentThread().setPriority(5);do{try{Thread.sleep(1000);}catch(InterruptedException _ex) { }repaint();}while(true);}public void paint(Graphics g) //防止闪屏{update(g);}public synchronized void update(Graphics g){if(offScreen != null){paintApplet(offScreen);g.drawImage(offScreenImage, 0, 0, this);return;}else{paintApplet(g);return;}}public void paintApplet(Graphics g)//具体画页面 {g.fillRect(0, 0, 677, 555);g.drawImage(picture, 0, 0, this);g.setColor(Color.pink); //设置字体颜色g.setFont(new Font("Arial",Font.PLAIN,24)); //设置文本字体和大小 g.drawString(n,20,50); //写文本“look!My clock!”g.drawString(m,200,510); //写文本"made by:"g.drawString(p,300,550);//写文本"jessie with the number 200501109"g.setColor(Color.pink);//画表盘g.drawOval(425,58,200,200);g.drawOval(415,48,220,220);for(int x=0;x<360;x+=6){if(x%5!=0){int u1=vectorX(x,270,100);int v1=vectorY(x,270,100);int u2=vectorX(x,270,110);int v2=vectorY(x,270,110);g.setColor(Color.pink);g.drawLine(525+u1,158+v1,525+u2,158+v2);}else{int u3=vectorX(x,270,90);int v3=vectorY(x,270,90);int u4=vectorX(x,270,110);int v4=vectorY(x,270,110);g.setColor(Color.pink);g.drawLine(525+u3,158+v3,525+u4,158+v4);}};String s1="12";String s2="3";String s3="6";String s4="9";g.setColor(Color.pink);g.drawString(s1,505,50);g.drawString(s2,635,165);g.drawString(s3,520,285);g.drawString(s4,400,165);g.fillOval(522,155,6,6);//表盘中心的圆点和圆圈g.setColor(Color.yellow);g.drawOval(518,149,14,14);Date date = new Date();int i = date.getMinutes();int j = i * 6;int kk = (date.getHours() ) % 24;g.setFont(new Font("Helvetica", 1, 28));//设置字体,显示数码时间;String s = new String();s = kk+ ":" + date.toString().substring(14, 19);g.setColor(Color.pink);g.drawString(s,465, 320);int k= (date.getHours() ) % 12;//开始获取时间经过计算画出时针、分针、秒针 int l = k * 30 + (i / 12) * 6;int a = vectorX(l,255,63);int b= vectorY(l,255,63);int c = vectorX(l,270,63);int d= vectorY(l,270,63);int x1[]={525,525+a/4,525+c};int y1[]={158,158+b/4,158+d};g.setColor(Color.pink);g.fillPolygon(x1,y1,3);int a1 = vectorX(j,255,73);int b1= vectorY(j,255,73);int c1= vectorX(j,270,73);int d1= vectorY(j,270,73);int x2[]={525,525+a1/4,525+c1};int y2[]={158,158+b1/4,158+d1};g.setColor(Color.pink);g.fillPolygon(x2,y2,3);int k1 = date.getSeconds() * 6;int a2 = vectorX(k1,255,85);int b2= vectorY(k1,255,85);int c2 = vectorX(k1,270,85);int d2= vectorY(k1,270,85);int x3[]={525,525+a2/4,525+c2};int y3[]={158,158+b2/4,158+d2};g.setColor(Color.pink);g.fillPolygon(x3,y3,3);}}然后还有html文件,内容如下:<HTML><BODY><APPLET CODE="Clock.class"HEIGHT=597 WIDTH=773></APPLET> </BODY></HTML>其中的图片如下。
java钟表时钟显示时间表盘式时钟,并显import java.awt.*;import java.awt.event.*;import javax.swing.*;import sun.util.calendar.Gregorian;import java.util.Calendar;import java.util.GregorianCalendar;public class Clock<Calender> extends JFrame implements ActionListener{int x, y, x0, y0, r, h, olds_x, olds_y, oldm_x, oldm_y, oldh_x, oldh_y, ss,mm,hh,old_m,old_h,ang; final double RAD = Math.PI/180;public Clock(){super("Java时钟");setDefaultCloseOperation(3);Image image = getToolkit().getImage("clock.gif");setIconImage(image);setSize(200,200);setBackground(Color.black);setLocation(300,150);setResizable(false);show();int delay = 1000;//创建一个监听事件ActionListener drawClock = new ActionListener(){ public void actionPerformed(ActionEvent evt){ repaint();}};//创建一个时间计数器,每一秒触发一次new Timer(delay,drawClock).start();}//实现ActionListener接口必须实现的方法public void actionPerformed(ActionEvent evt){} //绘制图形public void paint(Graphics g){Graphics2D g2D = (Graphics2D)g;Insets insets = getInsets();int L = insets.left/2, T = insets.top/2;h = getSize().height;g.setColor(Color.white);//画圆g2D.setStroke(new BasicStroke(4.0f));g.drawOval(L+40, T+40, h-80, h-80);r = h/2 - 40;x0 = 40 + r - 5 + L;y0 = 40 + r - 5 - T;ang = 60;//绘制时钟上的12个字for(int i = 1;i <= 12;i ++){x = (int)((r+10)*Math.cos(RAD*ang)+x0);y = (int)((r+10)*Math.sin(RAD*ang)+y0);g.drawString(""+i, x, h-y);ang -=30;}//获得现在的时间Calendar now = new GregorianCalendar();int nowh = now.get(Calendar.HOUR_OF_DAY); int nowm = now.get(Calendar.MINUTE);int nows = now.get(Calendar.SECOND); String st;if(nowh < 10)st = "0"+nowh;else st = ""+nowh;if(nowm<10)st += ":0"+nowm; else st += ":"+nowm;if(nows<10)st += ":0"+nows; else st += ":"+nows;//在窗体上显示时间g.setColor(Color.pink);g.fillRect(L, T, 50, 28);g.setColor(Color.blue);g.drawString(st,L+2,T+26);//计算时间与度数的关系ss = 90 - nows*6;mm = 90 - nowm*6;hh = 90 - nowh*30 - nowm/2;x0 = r+40+L;y0 = r+40+T;g2D.setStroke(new BasicStroke(1.2f));//擦除秒针if(olds_x > 0){g.setColor(getBackground());g.drawLine(x0,y0,olds_x,h-olds_y);}else{old_m = mm;old_h = hh;}//绘制秒针x = (int)(r*0.9*Math.cos(RAD*ss))+x0;y = (int)(r*0.9*Math.sin(RAD*ss))+y0-2*T;g.setColor(Color.yellow);g.drawLine(x0,y0,x,h-y);olds_x = x;olds_y = y;g2D.setStroke(new BasicStroke(2.2f));//擦除分针if(old_m!=mm){g.setColor(getBackground());g.drawLine(x0,y0,oldm_x,h-oldm_y);}//绘制分针x = (int)(r*0.7*Math.cos(RAD*mm))+x0;y = (int)(r*0.7*Math.sin(RAD*mm))+y0-2*T;g.setColor(Color.green);g.drawLine(x0,y0,x,h-y); oldm_x = x;oldm_y = y;old_m = mm;g2D.setStroke(new BasicStroke());//擦除时针if(old_h!=hh){g.setColor(getBackground());g.drawLine(x0,y0,oldh_x,h-oldh_y);}//绘制时针x = (int)(r*0.5*Math.cos(RAD*hh))+x0;y = (int)(r*0.5*Math.sin(RAD*hh))+y0-2*T; g.setColor(Color.red);g.drawLine(x0,y0,x,h-y);oldh_x = x;oldh_y = y;old_h = hh;}public static void main(String[] args){Clock c = new Clock(); }}示数字时间。
JAVA可视化闹钟源码概述⼀些同学的Java课设有这样⼀个问题,⽐较感兴趣就做了⼀下功能介绍:1、可增加闹钟2、可删除闹钟3、时间到了响铃4、关闭闹钟不会丢失闹钟(因为闹钟存储在txt⽂件中,不会因程序关闭就终⽌)缺点1、没有使⽤多线程,闹钟响起时只能等待1分钟或者关闭程序2、界⾯设计不够美观,后期有时间会进⾏修改,重新设计3、没有闹钟修改的功能,虽然可以通过增删来达到修改的⽬的,但功能仍然属于空缺范围1package Clock;23import sun.audio.AudioPlayer;4import sun.audio.AudioStream;56import javax.swing.*; //awt和swing是做界⾯⽤的类7import java.awt.*;8import java.awt.event.ActionEvent;9import java.awt.event.ActionListener;10import java.awt.event.WindowAdapter;11import java.awt.event.WindowEvent;12import java.io.*; //io流⽤于读写⽂件,包括增删闹钟、打开铃声等等13import java.util.Calendar; //⽤于获取当前时间的类14import java.util.GregorianCalendar;//标准阳历15import java.util.StringTokenizer; //读取⽂件转换成计算机语⾔⽤的类16/*171 计时器18要求1:⼀个带有可视化界⾯的钟表。
19要求2:可以添加若⼲个闹钟。
20要求3:具备持久化功能,关闭程序不能丢失闹钟。
21要求4:闹钟是可编辑,可删除的。
2223实现:先创建⼀个⾯板显⽰闹钟,⾯板内创建按钮增加闹钟,按钮查看闹钟,按钮删除闹钟24线程间隔1s读取时间和闹钟⽐较2526*/27public class ClockTry extends JFrame implements Runnable {28/* 成员变量 */29private JPanel xx; //总的⾯板30private JComboBox ho; //hour选择时间的下拉框31private JComboBox mi; //min选择分钟的下拉框32private JButton tjnz; //添加闹钟的按钮33private JButton schour; //删除闹钟的按钮34private String filename = "D://homework//java//Gui//src//Clock//0.wav"; //所有的路径改这两个地⽅就可以了35private String pathname = "D://homework//java//Gui//src//Clock//nz.txt"; // 绝对路径或相对路径都可以,写⼊⽂件时演⽰相对路径,读取以上路径的input.txt⽂件3637private int HOUR; //定义HOUR⽤于接收按钮按下从下拉框中获取的数据38private int MIN; //同上3940int x = 100, y = 100, r = 100; // (x,y)为(0,0)点,表⽰原点41int h, m, s; // 时,分,秒42double rad = Math.PI / 180; // 1°4344private String[][] str= new String[100][2]; //定义⼆维数组,⽤于存储以及对⼩时和分针的操作,暂定为100个闹钟于是定义为【100】【2】45/**46 *读取⽂件,每次的增删都需要对数据进⾏读取,将数据写在⾯板上也需要读取数据47*/48public void readFile() {49try (FileReader reader = new FileReader(pathname); //创建⼀个FilReader对象,将⽂件读出来,相当于请教⼀个当地⼈,当地⼈了解本地⽂化,但是语⾔不通听不懂50 BufferedReader br = new BufferedReader(reader) // 建⽴⼀个对象,它把⽂件内容转成计算机能读懂的语⾔,相当于请⼀个翻译,把当地⼈读取的东西转换成计算机能懂的东西51 ) {52 String line;5354int i =0;55while ((line = br.readLine()) != null) { //翻译理解的东西存到line⾥⾯56int j =0;57 StringTokenizer st = new StringTokenizer(line, ":"); //重点:由于存储数据时都是时间,道理来说都是数字,⽆法区分⼩时部分和分钟部分58while (st.hasMoreTokens()){ //每读取⼀次读到的内容 //所以这⾥⽤分割符“:”来分割,相应的,后⾯的写⼊⽂件也应该已“:”分割进⾏写⼊59 str[i][j]=st.nextToken(); //把读到的内容存储在数组⾥⾯便于后⾯的操做——增删60 j++; //包括上⾯的j=0,是将for循环拆分放进while循环中,要不然循环写起来也很⿇烦61 }62//System.out.print(str[i][0]+":"+str[i][1]); 写的时候⽤来在控制台打印查看效果63//System.out.println();64 i++;65 j = 0;66 }67 } catch (IOException e) {68 e.printStackTrace(); //try……catch抛出异常69 }70 }717273/**74 * 写⼊TXT⽂件75*/76public void writeFile() {77 HOUR = Integer.valueOf(ho.getSelectedIndex()); //获取下拉框中的值,存储到HOUR中78 MIN = Integer.valueOf(mi.getSelectedIndex());79 String x = HOUR + ":" + MIN;80try (FileWriter writer = new FileWriter(pathname,true); //同上⾯的读取,本地⼈写⼊,注意:后⾯的append:true是表⽰不是重新写,⽽是在后⾯追加81 BufferedWriter out = new BufferedWriter(writer) //翻译⼀下再写⼊82 ) {8384 out.write(HOUR + ":" + MIN + "\r\n"); //这⾥写⼊的时候把:写进去了!85 out.flush(); // 把缓存区内容压⼊⽂件,计算机的存储过程,存在缓存区再写⼊⽂件86 JOptionPane.showMessageDialog(null,"闹钟添加成功!","添加闹钟提醒",RMATION_MESSAGE); //提⽰框:添加闹钟成功87 } catch (IOException e) {88 e.printStackTrace();8990 }9192 }939495/**96 * 删除闹钟,实际上是先将要删除的数据找到移除数组,再将数组重新写⼊,所以要先读取⽂件,再重新写⼊97*/98public void shanchuFile() {99 HOUR = Integer.valueOf(ho.getSelectedIndex());100 MIN = Integer.valueOf(mi.getSelectedIndex());101try (FileWriter writer = new FileWriter(pathname); //没有append:true,表⽰重新写!102 BufferedWriter out = new BufferedWriter(writer)103 ) {104 readFile();105for (int i = 0; i < 100; i++) {106if (Integer.valueOf(str[i][0])==HOUR && Integer.valueOf(str[i][1])==MIN){107continue;108 }109else{110 out.write(str[i][0]+":"+str[i][1]+"\r\n"); // \r\n即为换⾏111 }112 }113114//out.write("1"+"1"+"\r\n"); // \r\n即为换⾏115 out.flush(); // 把缓存区内容压⼊⽂件116 } catch (IOException e) {117 e.printStackTrace();118 }catch (NumberFormatException e){119 System.out.println("this isn't exist!");120 JOptionPane.showMessageDialog(null,"该闹钟已删除!","删除闹钟提醒",RMATION_MESSAGE); //弹窗提⽰121 }122 }123124/* 初始化函数 */125public void init() {126127 Calendar now = new GregorianCalendar(); //获取当前时间128/*129 * GregorianCalendar(标准阳历)130 * 是Calendar(⽇历)【国际环境下都能运⾏的程序】131 * 的⼦类132*/133 s = now.get(Calendar.SECOND) * 6; // 秒针转换成⾓度:1秒,秒针动⼀次,转动6°134 m = now.get(Calendar.MINUTE) * 6; // 分针转换为⾓度:1分,分针动⼀次,转动6°135 h = now.get(Calendar.HOUR) * 30 + now.get(Calendar.MINUTE) / 12 * 6; // 先把分化为⼩时,再乘以6°,因为分针转12°,时针才会转1°,⼀⼩时中间有5格,数学问题136/*137 * Calendar.HOUR 显⽰范围:1-12(⽆论AM还是PM) Calendar.HOUR_OF_DAY 显⽰范围:1-24(包括PM138*/139140 Thread t = new Thread(this); //添加线程,线程⽬标是整个程序,this141 t.start(); //线程就绪142 }143144public void paint(Graphics g) { //awt中的⽅法,因为要时时显⽰闹钟,所以不得不使⽤绘画的⽅式,不断重绘145super.paint(g);146/*147 * paint(g)函数会重绘图像,要加上super.paint(g),表⽰在原来图像的基础上,再画图。
一个java的钟表程序import java.awt.*;import java.util.*;import javax.swing.*;import java.awt.event.*;public class Clock extends JPanel{int CLOCK_RADIUS=200;int X_CENTER=300,Y_CENTER=300;static int second,minute,hour;static int year,month,day,week;int xSecond,ySecond;int xMinute,yMinute;int xHour,yHour;String timeStr,str1,str2,str3;static String dateStr;javax.swing.Timer timer;static String weekDisp[]={"一","二","三","四","五","六","日"};public Clock(){setBackground(Color.white);setSize(800,800);ActionListener clockTik=new ActionListener(){public void actionPerformed(ActionEvent ec){second++;if(second==60){second=0;minute++;}if(minute==60){minute=0;hour++;}if(hour==13) hour=1;repaint();}};new javax.swing.Timer(1000,clockTik).start();}public void paint(Graphics g){int xPos,yPos;double alfa;super.paint(g);for(int i=0,num=12;i<360;i+=6){alfa=Math.toRadians(i);xPos=X_CENTER+(int)(CLOCK_RADIUS*Math.sin(alfa));yPos=Y_CENTER-(int)(CLOCK_RADIUS*Math.cos(alfa));if(i%30==0){if (num%3==0)g.setColor(Color.red);elseg.setColor(Color.black);g.drawString(""+num,xPos-5,yPos+3);num=(num+1)%12;}else{g.setColor(Color.black);g.drawString(".",xPos,yPos);}}g.fillOval(X_CENTER-4,Y_CENTER-4,8,8); //表盘中心//画秒针xSecond=(int)(X_CENTER+(CLOCK_RADIUS-10)*Math.sin(second*(2*Math.PI/60)));ySecond=(int)(Y_CENTER-(CLOCK_RADIUS-10)*Math.cos(second*(2*Math.PI/60)));g.setColor(Color.red);g.drawLine(X_CENTER,Y_CENTER,xSecond,ySecond);//画分针xMinute=(int)(X_CENTER+(CLOCK_RADIUS-40)*Math.sin((minute+second/60)*(2*3.14/60)));yMinute=(int)(Y_CENTER-(CLOCK_RADIUS-40)*Math.cos((minute+second/60)*(2*3.14/60)));g.setColor(Color.red);g.drawLine(X_CENTER,Y_CENTER,xMinute,yMinute);//画时针xHour=(int)(X_CENTER+(CLOCK_RADIUS-70)*Math.sin((hour+minute/60+second/(60*60))*(2*3.14/12))); yHour=(int)(Y_CENTER-(CLOCK_RADIUS-70)*Math.cos((hour+minute/60+second/(60*60))*(2*3.14/12)));g.setColor(Color.red);g.drawLine(X_CENTER,Y_CENTER,xHour,yHour);//显示文字式样的时间if(hour<10)str1="0"+hour+":";elsestr1=hour+":";if(minute<10)str2="0"+minute+":";elsestr2=minute+":";if(second<10)str3="0"+second;elsestr3=second+"";timeStr=str1+str2+str3;g.setFont(new Font("隶书",Font.ITALIC,20));g.drawString(timeStr,X_CENTER-40,Y_CENTER+CLOCK_RADIUS+50);g.drawString(dateStr,X_CENTER-90,Y_CENTER-CLOCK_RADIUS-50);}public void paintComponent(Graphics g)// 该方法自动调用,每次重画背景时删去原来的表盘{super.paintComponent(g);}public static void main(String args[]){JFrame clockFrame=new JFrame("钟表--clock");Container contentPane=clockFrame.getContentPane();clockFrame.setSize(800,800);//获取系统时间Calendar calendar = new GregorianCalendar();/*Date date = new Date();calendar.setTime(date);*/second=calendar.get(Calendar.SECOND);minute=calendar.get(Calendar.MINUTE);hour=calendar.get(Calendar.HOUR);if(hour>12) hour=hour-12;year=calendar.get(Calendar.YEAR);month=calendar.get(Calendar.MONTH)+1;day=calendar.get(Calendar.DAY_OF_MONTH);week=calendar.get(Calendar.DAY_OF_WEEK);dateStr=year+"年"+month+"月"+day+"日"+"星期"+weekDisp[week-1];Clock clock=new Clock();contentPane.add(clock,BorderLayout.CENTER);clockFrame.pack();clockFrame.setVisible(true);}}。
Java 桌面小时钟一:简介:Java桌面小时钟制作过程:从网上收集可用的表盘、时针、分针、秒针图片,用Photoshop CS5进行修剪,在eclipse上利用Java绘图技术将图片加载在一个JPanel上,其中时针分针秒针按获取到的日期和计算公式进行旋转。
JPanel放在JFrame上,并将窗口设置为不规则形状。
后期为时钟添加事件响应,双击时关闭,鼠标位于窗口上时鼠标形状变为手型,窗口可拖拽。
鼠标悬停在时钟上时,可提示当前的年月日等信息。
程序运行结果如下:难点:本程序主要是控制时针分针秒针图片的旋转,从而实现时钟走动的效果。
但是在控制图片旋转的过程中遇到一个难题。
旋转后的图片会有锯齿现象,这回影响到程序的界面外观,解决办法是利用Java2D类的渲染参数,把渲染级别提高。
关键代码如下:// 获取绘图上下文的副本Graphics2D g1 = (Graphics2D) g.create();// 设置绘图上下文以质量为主,绘制图片,这样可以避免图片旋转时的锯齿g1.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHint s.VALUE_RENDER_QUALITY);二:类详解:MainFrame类本程序主类名称是MainFrame,它继承Jframe类成为一个窗体类。
在该类的构造方法中对窗体进行了初始化,为窗体控件进行了布局,并添加了必要的事件监听器。
关键代码如下:public MainFrame() {super();setAlwaysOnTop(true);setResizable(false);// 禁止调整窗体大小setUndecorated(true);//不装饰setShape(new Ellipse2D.Double(0, 0, 226, 224));//设置为圆形窗口setBounds(100, 100, 226, 224);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置鼠标为手型setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));// 创建自定义面板对象final ImagePanel imagePanel = new ImagePanel();// 添加面板对象到窗体getContentPane().add(imagePanel, BorderLayout.CENTER);// 为鼠标面板添加鼠标事件监听器imagePanel.addMouseListener(new MouseAdapter() {Public void mousePressed(final MouseEvent e) {fp = e.getPoint();}public void mouseClicked(MouseEvent e) {if (e.getClickCount() == 2) {System.exit(0);}}});// 为时钟面板的鼠标拖动事件中移动窗体imagePanel.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(final MouseEvent e) {JFrame frame = (JFrame) getRootPane().getParent();Point point = e.getLocationOnScreen();frame.setLocation(point.x - fp.x, point.y - fp.y);}});Thread imageThread = new Thread(imagePanel);imageThread.start();// 启动线程}ImagePanel类继承JPanel类编写一个自定义的面板控件,该控件类的名称为ImagePanel,作为本程序的背景面板,支持背景图片及时针、分针、秒针的旋转,图片的旋转是通过线程实现的,并且线程要控制旋转速度与时间。
漂亮时钟java完整代码这个时钟是用java写的,我觉得很完美,其中加载了声音和背景图片,我会把图片贴在这里,至于背景音乐可以根据自己的需要改动,程序运行后效果如下:今天把这个程序贴在这里,希望能帮到学习java的学弟学妹们。
源代码如下:import java.applet.Applet;import java.applet.AppletContext;import java.applet.AudioClip;import java.awt.*;import java.awt.event.*;import java.io.PrintStream;import java.util.Date;public class Clock extends Applet implements Runnable{Thread th1 = null;Image offScreenImage = null;Graphics offScreen = null;Image picture = null;int icount = 0;AudioClip song;private String n="look! My clock!";private String m="made by:";private String p="jessie with the number 200501109";public Clock(){}public void init(){try{offScreenImage = createImage(800, 600);offScreen = offScreenImage.getGraphics();}catch(Exception _ex){offScreen = null;}picture = getImage(getCodeBase(), "Clockscreen.jpg"); song=getAudioClip(getCodeBase(),"song.wav");song.loop();//加载声音}public void start(){th1 = new Thread(this);th1.start();}public void stop(){th1 = null ;}public static int vectorX(int i, int h, int j){int k = (i + h) % 360;int l = (int)((double)j* Math.cos((double)k * 2 * Math.PI / 360));return l;}public static int vectorY(int i, int h, int j){int k = (i + h) % 360;int l = (int)((double)j* Math.sin((double)k * 2 * Math.PI / 360)); return l;}public void run(){Thread.currentThread().setPriority(5);do{try{Thread.sleep(1000);}catch(InterruptedException _ex) { }repaint();}while(true);}public void paint(Graphics g) //防止闪屏{update(g);}public synchronized void update(Graphics g){if(offScreen != null){paintApplet(offScreen);g.drawImage(offScreenImage, 0, 0, this);return;}else{paintApplet(g);return;}}public void paintApplet(Graphics g)//具体画页面 {g.fillRect(0, 0, 677, 555);g.drawImage(picture, 0, 0, this);g.setColor(Color.pink); //设置字体颜色g.setFont(new Font("Arial",Font.PLAIN,24)); //设置文本字体和大小 g.drawString(n,20,50); //写文本“look!My clock!”g.drawString(m,200,510); //写文本"made by:"g.drawString(p,300,550);//写文本"jessie with the number 200501109"g.setColor(Color.pink);//画表盘g.drawOval(425,58,200,200);g.drawOval(415,48,220,220);for(int x=0;x<360;x+=6){if(x%5!=0){int u1=vectorX(x,270,100);int v1=vectorY(x,270,100);int u2=vectorX(x,270,110);int v2=vectorY(x,270,110);g.setColor(Color.pink);g.drawLine(525+u1,158+v1,525+u2,158+v2);}else{int u3=vectorX(x,270,90);int v3=vectorY(x,270,90);int u4=vectorX(x,270,110);int v4=vectorY(x,270,110);g.setColor(Color.pink);g.drawLine(525+u3,158+v3,525+u4,158+v4);}};String s1="12";String s2="3";String s3="6";String s4="9";g.setColor(Color.pink);g.drawString(s1,505,50);g.drawString(s2,635,165);g.drawString(s3,520,285);g.drawString(s4,400,165);g.fillOval(522,155,6,6);//表盘中心的圆点和圆圈g.setColor(Color.yellow);g.drawOval(518,149,14,14);Date date = new Date();int i = date.getMinutes();int j = i * 6;int kk = (date.getHours() ) % 24;g.setFont(new Font("Helvetica", 1, 28));//设置字体,显示数码时间;String s = new String();s = kk+ ":" + date.toString().substring(14, 19);g.setColor(Color.pink);g.drawString(s,465, 320);int k= (date.getHours() ) % 12;//开始获取时间经过计算画出时针、分针、秒针 int l = k * 30 + (i / 12) * 6;int a = vectorX(l,255,63);int b= vectorY(l,255,63);int c = vectorX(l,270,63);int d= vectorY(l,270,63);int x1[]={525,525+a/4,525+c};int y1[]={158,158+b/4,158+d};g.setColor(Color.pink);g.fillPolygon(x1,y1,3);int a1 = vectorX(j,255,73);int b1= vectorY(j,255,73);int c1= vectorX(j,270,73);int d1= vectorY(j,270,73);int x2[]={525,525+a1/4,525+c1};int y2[]={158,158+b1/4,158+d1};g.setColor(Color.pink);g.fillPolygon(x2,y2,3);int k1 = date.getSeconds() * 6;int a2 = vectorX(k1,255,85);int b2= vectorY(k1,255,85);int c2 = vectorX(k1,270,85);int d2= vectorY(k1,270,85);int x3[]={525,525+a2/4,525+c2};int y3[]={158,158+b2/4,158+d2};g.setColor(Color.pink);g.fillPolygon(x3,y3,3);}}然后还有html文件,内容如下:<HTML><BODY><APPLET CODE="Clock.class"HEIGHT=597 WIDTH=773></APPLET> </BODY></HTML>其中的图片如下。