
java模拟时钟
import java.awt.*;import java.applet.Applet;import java.util.Calendar;import java.text.SimpleDateFormat;import java.util.Date;public class ClockApplet extends Applet implements Runnable \\\/\\\/Applet支持线程{ private Thread athread; \\\/\\\/线程 private SimpleDateFormat sdateformat; \\\/\\\/日期格式public void init() { this.setBackground(Color.white); this.athread = null; } public void paint(Graphics g) { this.sdateformat = new SimpleDateFormat(hh时mm分ss秒); g.drawString(this.sdateformat.format(new Date()),25,131); Calendar rightnow = Calendar.getInstance(); int second = rightnow.get(Calendar.SECOND); int minute = rightnow.get(Calendar.MINUTE); int hour = rightnow.get(Calendar.HOUR); \\\/\\\/半径 int R_H = 20,R_M = 4,R_S = 4; \\\/\\\/时针的坐标 \\\/\\\/x ====(9-3)[0-6] (3-9)[6-0] \\\/\\\/y ====(12-6)[0-6] (6-12)[6-0] int H_x ; int H_y; \\\/\\\/x if(hour == 0) { hour = 12; } if( hour >= 3 && hour <= 9 ) { H_x = R_H*Math.abs(hour - 9); } else { if(hour > 9) { H_x = R_H*Math.abs(hour - 9); } else { H_x = R_H*Math.abs(hour+3); } } \\\/\\\/y if( hour >= 6 && hour <= 12 ) { H_y = R_H*Math.abs(hour - 12); } else { H_y = R_H*hour; } \\\/\\\/分针的坐标 int M_x; int M_y; if(minute == 0) { minute = 60; } if( minute >= 15 && minute <= 45 ) { M_x = R_M*Math.abs(minute - 45); } else { if(minute > 45) { M_x = R_M*Math.abs(minute - 45); } else { M_x = R_M*Math.abs(minute+15); } } \\\/\\\/y if( minute >= 30 && minute < 60 ) { M_y = R_M*Math.abs(minute - 60); } else { M_y = R_M*minute; } \\\/\\\/秒针的坐标 int S_x; int S_y; if(second == 0) { second = 60; } if( second >= 15 && second <= 45 ) { S_x = R_S*Math.abs(second - 45); } else { if(second > 45) { S_x = R_S*Math.abs(second - 45); } else { S_x = R_S*Math.abs(second+15); } } \\\/\\\/y if( second >= 30 && second <= 60 ) { S_y = R_S*Math.abs(second - 60); } else { S_y = R_S*second; }\\\/\\\/ g.drawString(String.valueOf(second),25,50);\\\/\\\/ g.drawString(String.valueOf(minute),25,60); \\\/\\\/ g.drawString(String.valueOf(hour),25,70); \\\/\\\/ g.drawString(String.valueOf(H_x),25,80); \\\/\\\/ g.drawString(String.valueOf(H_y),25,90); g.drawOval(0,0,120,120);\\\/\\\/距离相差10像素 g.setColor(Color.darkGray); g.drawString(9,5,65); g.drawString(3,110,65); g.drawString(12,55,15); g.drawString(6,55,115); g.drawString(1,80,20); g.drawString(2,100,40); g.drawString(4,100,90); g.drawString(5,80,110); g.drawString(7,30,110); g.drawString(8,10,90); g.drawString(10,10,40); g.drawString(11,30,20); g.setColor(Color.red); g.drawLine(60,60,H_x,H_y);\\\/\\\/前一个点表示起点,另一个表示终点 g.setColor(Color.blue); g.drawLine(60,60,M_x,M_y); g.setColor(Color.yellow); g.drawLine(60,60,S_x,S_y);} public void start() { if(athread == null) { athread = new Thread(this); athread.start(); } } public void stop() { if(athread != null) { athread.interrupt(); athread = null; } } public void run() { while(athread != null) { repaint(); try { athread.sleep(1000); } catch(InterruptedException e) { } } }}
求一个Java模拟时钟程序
做个线程计算 每次重画界面、
使用Java Applet开发一个模拟时钟
这里有书上源码一篇,可以参考。
import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import java.util.Calendar;import javax.swing.*;public class Clock extends JPanel implements ActionListener{ \\\/\\\/ 创建时钟的外形 protected static Ellipse2D face = new Ellipse2D.Float(3, 3, 94, 94); \\\/\\\/ 创建时钟的标记 protected static GeneralPath tick = new GeneralPath(); static { tick.moveTo(100, 100); tick.moveTo(49, 0); tick.lineTo(51, 0); tick.lineTo(51, 6); tick.lineTo(49, 6); tick.lineTo(49, 0); } \\\/\\\/ 创建时针 protected static GeneralPath hourHand = new GeneralPath(); static { hourHand.moveTo(50, 15); hourHand.lineTo(53, 50); hourHand.lineTo(50, 53); hourHand.lineTo(47, 50); hourHand.lineTo(50, 15); } \\\/\\\/ 创建分针 protected static GeneralPath minuteHand = new GeneralPath(); static { minuteHand.moveTo(50, 2); minuteHand.lineTo(53, 50); minuteHand.lineTo(50, 58); minuteHand.lineTo(47, 50); minuteHand.lineTo(50, 2); } \\\/\\\/ 创建秒针 protected static GeneralPath secondHand = new GeneralPath(); static { secondHand.moveTo(49, 5); secondHand.lineTo(51, 5); secondHand.lineTo(51, 62); secondHand.lineTo(49, 62); secondHand.lineTo(49, 5); } \\\/\\\/ 设置时钟的颜色 protected static Color faceColor = new Color(220, 220, 220); protected static Color hourColor = Color.red.darker(); protected static Color minuteColor = Color.blue.darker(); protected static Color secondColor = new Color(180, 180, 0); protected static Color pinColor = Color.gray.brighter(); \\\/\\\/ 创建时钟的枢纽 protected Ellipse2D pivot = new Ellipse2D.Float(47, 47, 6, 6); protected Ellipse2D centerPin = new Ellipse2D.Float(49, 49, 2, 2); \\\/\\\/ 创建绕时钟枢纽转的变换 protected AffineTransform hourTransform = AffineTransform.getRotateInstance(0, 50, 50); protected AffineTransform minuteTransform = AffineTransform.getRotateInstance(0, 50, 50); protected AffineTransform secondTransform = AffineTransform.getRotateInstance(0, 50, 50); \\\/\\\/ 创建每秒触发一次的Timer protected Timer timer = new Timer(1000, this); protected Calendar calendar = Calendar.getInstance(); public Clock() { setPreferredSize(new Dimension(100, 100)); } \\\/\\\/ 当plane加入container中时发生 public void addNotify() { super.addNotify(); timer.start(); } \\\/\\\/ 当plane从container中移处时发生 public void removeNotify() { timer.stop(); super.removeNotify(); } public void actionPerformed(ActionEvent event) { \\\/\\\/ 更新calender的时间 this.calendar.setTime(new java.util.Date()); int hours = this.calendar.get(Calendar.HOUR); int minutes = this.calendar.get(Calendar.MINUTE); int seconds = this.calendar.get(Calendar.SECOND); \\\/\\\/设置变换,使得时针、分针、秒针各自按绕枢纽旋转一定的角度 hourTransform.setToRotation(((double) hours) * (Math.PI \\\/ 6.0), 50, 50); minuteTransform.setToRotation(((double) minutes) * (Math.PI \\\/ 30.0), 50, 50); secondTransform.setToRotation(((double) seconds) * (Math.PI \\\/ 30.0), 50, 50); repaint(); } public void paint(Graphics g) { super.paint(g); \\\/\\\/ 得到图形上下文和抗锯齿处理 Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setPaint(faceColor); g2.fill(face); g2.setPaint(Color.black); g2.draw(face); \\\/\\\/ 产生钟面上12个滴答位置 for (double p = 0.0; p < 12.0; p += 1.0) { \\\/\\\/利用变换画出同心的滴答的标线 g2.fill(tick.createTransformedShape( AffineTransform.getRotateInstance((Math.PI \\\/ 6.0) * p, 50, 50))); } g2.setPaint(hourColor); g2.fill(hourHand.createTransformedShape(hourTransform)); g2.setPaint(minuteColor); g2.fill(minuteHand.createTransformedShape(minuteTransform)); g2.setPaint(secondColor); g2.fill(secondHand.createTransformedShape(secondTransform)); g2.fill(pivot); g2.setPaint(pinColor); g2.fill(centerPin); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.setLocation(700, 400); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new Clock()); frame.pack(); frame.show(); }}
用Java编写小时钟
\\\/\\\/这是新建了一个public类,名称为Timepublic class Time{\\\/\\\/其中有三个变量,表示时分秒 private int hour; private int minute; private int second;\\\/\\\/此处即为空参数的构造函数,即当声明这个类的对象时,怎样初始化这个对象里面的值\\\/\\\/每个对象都表示个时间。
\\\/\\\/这个构造函数调用了这个类里面的有三个参数的构造函数。
public Time(){ this(0,0,0); }\\\/\\\/此处为一个参数的构造函数 public Time(int h){ this(h,0,0); }\\\/\\\/此处为二个参数的构造函数 public Time(int h,int m){ this(h,m,0); }\\\/\\\/此处为三个参数的构造函数,即前面的构造函数调用了这个构造函数来初始化对象的时间值 public Time(int h,int m,int s){ setTime(h,m,s); }\\\/\\\/此处是构造函数,参数为这个类的对象:\\\/\\\/即用一个已经表示一个时间的Time对象来创建一个和它一样的时间对象 public Time(Time time){ this(time.getHour(),time.getMinute(),time.getSecond()); }\\\/\\\/设置时间值 public void setTime(int h,int m,int s){ setHour(h); setMinute(m); setSecond(s); }\\\/\\\/设置时 public void setHour(int h){ hour=((h>=0&&h<24)?h:0); }\\\/\\\/设置分 public void setMinute(int m){ minute=((m>=0&&m<60)?m:0); }\\\/\\\/设置秒 public void setSecong(int s){ second=((s>=0&&s<60)?s:0); }\\\/\\\/获得这个时间对象的时 public int getHour(){ return hour; }\\\/\\\/获得分 public int getMinute(){ return minute; }\\\/\\\/获得秒 public int getSecond(){ return second; }\\\/\\\/格式化时间成为串 public String toUniversalString(){ return String.format(%d:%02d:%02d,getHour(),getMinute(),getSecond()); } \\\/\\\/格式化这个时间成为串 public String toString(){ return String.format(%d:%02d:%02d%s,((getHour()==0||getHour()==12)?12:getHour()%12),getMinute(),getSecond(),(getHour()<12?AM:PM)); }}构造方法:通过这个程序可以看出,一个时间对象表示一个时间,有时分秒,那么创建对象要给它表示个时间,构造函数就是初始化有关的操作。
比如我创建一个对象Time time0=new Time(8,20,20);那么time0就表示8:20:20。
构造函数通常的格式是:public + 类名称(参数列表){},记住,它没有返回值。
重载:可以看到里面不只一个构造函数,这就是重载。
你可能并不一定要确切的时分秒或其它,这样就可以调用不同的构造函数。
比如:Time time1=new Time(time0);这也创建了对象,此对象表示的时间和time0是一样的。
重载的意思是一个函数,参数列表的不同可以实现不同的功能。
java applet模拟时钟的手动调整有问题
C++的没得时间做,给你一个我做的Java程序做参考吧.import java.applet.Applet;import java.awt.*;import java.util.*;import java.awt.event.*;public class ShowTime extends Applet { TextField txt_Hour; TextField txt_Min; TextField txt_Sec; Label lab_Hour; Label lab_Min; Label lab_Sec; TextField txt_show; final int Clock_X=20; \\\/\\\/表显示区域的左上X坐标 final int Clock_Y=40; final int Clock_Size=150; \\\/\\\/表盘大小 final int Clock_CenX=Clock_X+(Clock_Size\\\/2); \\\/\\\/表盘中心X坐标 final int Colok_CenY=Clock_Y+(Clock_Size\\\/2); \\\/\\\/表盘中心Y坐标 Color bgcolor=Color.lightGray; Point Old_SecPoint1; \\\/\\\/用来保存秒针上一次的坐标位置,以便在下一次画的时候覆盖上一次画的指针 Point Old_SecPoint2; Point Old_MinPoint1; Point Old_MinPoint2; Point Old_HourPoint1; Point Old_HourPoint2; public void init() { txt_Hour=new TextField(); txt_Min=new TextField(); txt_Sec=new TextField(); lab_Hour=new Label(H:); lab_Min=new Label(M:); lab_Sec=new Label(S:); txt_show=new TextField(,20); txt_show.setBackground(Color.cyan); this.add(lab_Hour); this.add(txt_Hour); this.add(lab_Min); this.add(txt_Min); this.add(lab_Sec); this.add(txt_Sec); show s=new show(); s.start(); Old_SecPoint1=new Point(0,0); Old_SecPoint2=new Point(0,0); Old_MinPoint1=new Point(0,0); Old_MinPoint2=new Point(0,0); Old_HourPoint1=new Point(0,0); Old_HourPoint2=new Point(0,0); } public void paint(Graphics g) { g.setColor(bgcolor); g.fillOval(Clock_X, Clock_Y, Clock_Size, Clock_Size); g.setColor(Color.black); for(int i=0;i<360;i+=6) { Point p1; Point p2; if(i%30==0) { p1=getPoint(i,Clock_Size\\\/2); p2=getPoint(i,Clock_Size\\\/2-10); } else { p1=getPoint(i,Clock_Size\\\/2); p2=getPoint(i,Clock_Size\\\/2-5); } g.drawLine(p1.x, p1.y, p2.x, p2.y); } } public Point getPoint(int arc,int length) { Point p=new Point(); double Arc=(Math.PI*arc)\\\/180; int h=(int)(length*Math.sin(Arc)); int l=(int)(length*Math.cos(Arc)); p.x=Clock_CenX+h; p.y=Colok_CenY-l; return p; } private void DrawSecPoint(int arc) { Graphics g=this.getGraphics(); g.setColor(bgcolor); g.drawLine(Old_SecPoint1.x, Old_SecPoint1.y, Old_SecPoint2.x, Old_SecPoint2.y); g.setColor(Color.blue); Point p1=getPoint(arc,Clock_Size\\\/2-15); Point p2=getPoint(arc+180,10); g.drawLine(p1.x, p1.y, p2.x, p2.y); Old_SecPoint1=p1; Old_SecPoint2=p2; } private void DrawMinPoint(int arc) { Graphics g=this.getGraphics(); g.setColor(bgcolor); g.drawLine(Old_MinPoint1.x, Old_MinPoint1.y, Old_MinPoint2.x, Old_MinPoint2.y); g.setColor(Color.yellow); Point p1=getPoint(arc,Clock_Size\\\/2-30); Point p2=getPoint(arc+180,10); g.drawLine(p1.x, p1.y, p2.x, p2.y); Old_MinPoint1=p1; Old_MinPoint2=p2;\\\/\\\/ g.setColor(Color.red);\\\/\\\/ g.fillOval(Clock_CenX-2, Colok_CenY-2, 2, 2);\\\/\\\/ g.setColor(Color.black); } private void DrawHourPoint(int arc) { Graphics g=this.getGraphics(); g.setColor(bgcolor); g.drawLine(Old_HourPoint1.x, Old_HourPoint1.y, Old_HourPoint2.x, Old_HourPoint2.y); g.setColor(Color.orange); Point p1=getPoint(arc,Clock_Size\\\/2-40); Point p2=getPoint(arc+180,10); g.drawLine(p1.x, p1.y, p2.x, p2.y); Old_HourPoint1=p1; Old_HourPoint2=p2; g.setColor(Color.white); g.drawString(王鸿制作, Clock_X+50,Clock_Y+50); } class show extends Thread{ public void run() { try{ while(true) { sleep(1000); Date now=new Date(); String str=String.valueOf(now.getHours()); txt_Hour.setText(str); str=String.valueOf(now.getMinutes()); txt_Min.setText(str); str=String.valueOf(now.getSeconds()); txt_Sec.setText(str); int hourpositon=now.getHours()*30+(now.getMinutes()*30\\\/60); DrawHourPoint(hourpositon);\\\/\\\/每秒钟时钟步进 DrawMinPoint(now.getMinutes()*6+(now.getSeconds()*6\\\/60));\\\/\\\/每秒钟,分指步进 DrawSecPoint(now.getSeconds()*6); } } catch(InterruptedException e) {} } }}
零基础学java要多久
对于0基础的人,Java作为一门编程语言学习起来还是有一定难度的,但并没有难到学不会的地步。
只要你对Java感兴趣,并愿意多花时间去学习,找对学习方法,就能学好Java。
首先不论学什么打好基础很重要,Java也一样。
0基础学习Java尤其要注重基础知识,基础学不好可能后面你根本学不懂,所以要熟练背诵基础知识点;其次学习Java不能总看书,要多动手。
因为Java项目不是你多看书就能看会的,所以你需要多找些项目自己上手实操;第三要反复练习,刚开始学习Java编程时,编写程序要反复练习加深自己的记忆,不然只是练习一遍,很可能过两天就都忘了;最后学习要有效率,Java的知识点有很多,想学到可以找工作的程度,需要花很长的时间学习,如果你学习效率低的话花费的时间就更长了。
而且长时间学习效率低也会让人产生厌烦心理,不想继续学习,所以学习Java要保持高效率学习。
如果你能坚持以上四点,那么即使你是0基础学习Java对你来说也不算难,但是如果你不能做到以上四点,那么小编建议你报班学习Java,因为培训班的课程一般包含项目实操可以帮助你锻炼动手能力、有定期考试帮助你巩固知识、还有老师全程跟班监督你的学习状态,而且培训班学习的时间也会比自学短一些,很适合0基础人群。



