面向?qū)ο笏枷雽懗桑?/p>
創(chuàng)新互聯(lián)基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺為眾多戶提供成都溫江機房 四川大帶寬租用 成都機柜租用 成都服務(wù)器租用。
下面是一個顯示器類
public?class?Display?{
private?int?value;//現(xiàn)在的值
private?int?limit;//上限值
Display(?int?limit)?{
this.limit?=?limit;
}
public?void?increase()?{
value++;
if(value?==?limit)?{
value?=?0;
}
}
public?int?getValue()?{
return?value;
}
public?static?void?main(String[]?args)?{
Display?d?=?new?Display(24);
for(;;)?{
d.increase();
System.out.println(d.getValue());
}
}
}
下面創(chuàng)建一個時鐘對象:
public?class?Clock?{
private?Display?h?=?new?Display(24);
private?Display?min?=?new?Display(60);
private?Display?s?=?new?Display(60);
public?void?start?()?{
for(;;)?{
s.increase();
if(s.getValue()?==?0){//如果分重置,小時+1
min.increase();
if(min.getValue()?==?0){//如果分重置,小時+1
h.increase();
}
}
System.out.printf("%02d:%02d:%02d\n",h.getValue(),?min.getValue(),s.getValue());//格式輸出
}
}
public?static?void?main(String[]?args)?{
Clock?clock?=?new?Clock();
clock.start();
}
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?ClockPointer?extends?JFrame{
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?ClockPointer(){
super("Java時鐘");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Image?image?=?getToolkit().getImage("clock.gif");
setIconImage(image);
setSize(400,400);
setBackground(Color.white);
//setLocation(300,150);
this.setLocationRelativeTo(null);
setResizable(true);
int?delay?=?1000;
//創(chuàng)建一個監(jiān)聽事件
setVisible(true);
ActionListener?drawClock?=?new?ActionListener(){
public?void?actionPerformed(ActionEvent?evt){
repaint();
}
};
//創(chuàng)建一個時間計數(shù)器,每一秒觸發(fā)一次
new?Timer(delay,?drawClock).start();
}
java.text.SimpleDateFormat?fmTime?=?new?java.text.SimpleDateFormat("HH:mm:ss");
//繪制圖形
public?void?paint(Graphics?g){
super.paint(g);
g.setFont(null);
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(2.0f));
g.setColor(Color.gray);
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.setColor(Color.black);
g.drawString(""+i,?x,?h-y);
ang?-=30;
}
//獲得現(xiàn)在的時間
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=fmTime.format(now.getTime());
//在窗體上顯示時間
g.setColor(Color.pink);
g.fillRect(L,?T,?50,?28);
g.setColor(Color.blue);
g.drawString(st,L+2,T+26);
//計算時間與度數(shù)的關(guān)系
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.setColor(Color.gray);
//????g.drawLine(x0,?y0,?olds_x,?h-olds_y);?//?(?)
//}
//繪制秒針
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(3.2f));
//擦除時針
//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){
new?ClockPointer();
}
}
//整理一下
如下:
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.JButton;
import?javax.swing.JFrame;
import?javax.swing.JPanel;
import?javax.swing.Timer;
import?java.awt.geom.*;
import?java.util.*;
class?Clock?extends?Canvas
implements?ActionListener{
static??JButton?jb=new?JButton("開始");
static?JButton?jb1=new?JButton("暫停");
Date?date;
Timer?secondTime;
int?hour,munite,second;
Line2D?secondLine,muniteLine,hourLine;
int?a,b,c;
double?pointSX[]=new?double[60],//用來表示秒針端點坐標的數(shù)組
pointSY[]=new?double[60],
pointMX[]=new?double[60],?//用來表示分針端點坐標的數(shù)組
pointMY[]=new?double[60],
pointHX[]=new?double[60],?//用來表示時針端點坐標的數(shù)組
pointHY[]=new?double[60];
Clock()
{?secondTime=new?Timer(1000,this);
pointSX[0]=0;?????????????????????????//12點秒針位置
pointSY[0]=-100;
pointMX[0]=0;?????????????????????????//12點分針位置
pointMY[0]=-90;
pointHX[0]=0;?????????????????????????//12點時針位置
pointHY[0]=-70;
double?angle=6*Math.PI/180;??????????//刻度為6度
for(int?i=0;i59;i++)????????????????//計算出各個數(shù)組中的坐標
{?pointSX[i+1]=pointSX[i]*Math.cos(angle)-Math.sin(angle)*pointSY[i];
pointSY[i+1]=pointSY[i]*Math.cos(angle)+pointSX[i]*Math.sin(angle);
pointMX[i+1]=pointMX[i]*Math.cos(angle)-Math.sin(angle)*pointMY[i];
pointMY[i+1]=pointMY[i]*Math.cos(angle)+pointMX[i]*Math.sin(angle);
pointHX[i+1]=pointHX[i]*Math.cos(angle)-Math.sin(angle)*pointHY[i];
pointHY[i+1]=pointHY[i]*Math.cos(angle)+pointHX[i]*Math.sin(angle);
}
for(int?i=0;i60;i++)
{?pointSX[i]=pointSX[i]+120;????????????//坐標平移
pointSY[i]=pointSY[i]+120;
pointMX[i]=pointMX[i]+120;????????????//坐標平移
pointMY[i]=pointMY[i]+120;
pointHX[i]=pointHX[i]+120;????????????//坐標平移
pointHY[i]=pointHY[i]+120;
}
secondLine=new?Line2D.Double(0,0,0,0);
muniteLine=new?Line2D.Double(0,0,0,0);
hourLine=new?Line2D.Double(0,0,0,0);
secondTime.start();????????//秒針開始計時
}
public?void?paint(Graphics?g)
{???for(int?i=0;i60;i++)?????//繪制表盤上的小刻度和大刻度
{??int?m=(int)pointSX[i];
int?n=(int)pointSY[i];
if(i%5==0)
{?g.setColor(Color.red);
g.fillOval(m-4,n-4,8,8);
}
else
{?g.setColor(Color.cyan);
g.fillOval(m-2,n-2,4,4);
}
}
g.fillOval(115,115,10,10);??//鐘表中心的實心圓
Graphics2D?g_2d=(Graphics2D)g;
g_2d.setColor(Color.red);
g_2d.draw(secondLine);
BasicStroke?bs=
new?BasicStroke(3f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);
g_2d.setStroke(bs);
g_2d.setColor(Color.blue);
g_2d.draw(muniteLine);
bs=new?BasicStroke(6f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
g_2d.setStroke(bs);
g_2d.setColor(Color.green);
g_2d.draw(hourLine);
}
public?void?actionPerformed(ActionEvent?e)
{?if(e.getSource()==secondTime){
date=new?Date();
String?s=date.toString();
hour=Integer.parseInt(s.substring(11,13));
munite=Integer.parseInt(s.substring(14,16));
second=Integer.parseInt(s.substring(17,19));?//獲取時間中的秒
int?h=hour%12;
a=second;????????????????????//秒針端點的坐標
b=munite;????????????????????//分針端點的坐標
c=h*5+munite/12;?????????????//時針端點的坐標
secondLine.setLine(120,120,(int)pointSX[a],(int)pointSY[a]);
muniteLine.setLine(120,120,(int)pointMX[b],(int)pointMY[b]);
hourLine.setLine(120,120,(int)pointHX[c],(int)pointHY[c]);
repaint();
}?if(e.getSource()==jb){
?secondTime.start();
}if(e.getSource()==jb1){
?secondTime.stop();
}
}
public?static?void?main(String?args[]){
?JFrame?win=new?JFrame("時鐘");
?JPanel?jp=new?JPanel();
?jp.add(jb);
?jp.add(jb1);
?Clock?clock=new?Clock();
?jb.addActionListener(clock);
?jb1.addActionListener(clock);
?win.add(clock,BorderLayout.CENTER);
?win.add(jp,"South");
?win.setVisible(true);
?win.setSize(246,300);
?win.setDefaultCloseOperation(3)?;
?win.validate();
???}
}
運行截圖:
有問題就追問,滿意請采納。