第一步:设置面板内容及数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
package
time;
import
java.awt.*;
import
java.awt.geom.Ellipse2D;
import
java.awt.geom.Line2D;
import
java.awt.geom.Point2D;
import
java.text.SimpleDateFormat;
import
java.util.Calendar;
import
java.util.Date;
import
javax.swing.JPanel;
/**
*
*@author huyongjian Oracle(Compus Solution Group)
* @Date 2013-7-18
* @version 2.0
* @since JDK1.6(建议)
Copy Right Information COMPUS SOLUTION GROUP
IDE:Eclipse
class:ClockPanelClass 设置面板内容及数据
*/
public
class
ClockPanelClass
extends
JPanel
implements
Runnable
{
private
double
radius=
100
;
//半径100
private
double
minutes;
private
double
second;
private
double
hours;
private
double
minute_hand_length=
0.7
*radius;
private
double
hour_hand_length=
0.5
*radius;
private
double
second_hand_length=
0.9
*radius;
private
String weekString,dayString;
private
int
week,day,year,month;
//@Override 画出时钟模型
public
void
paintComponent(Graphics g) {
Calendar now=Calendar.getInstance();
minutes=now.get(Calendar.MINUTE);
hours=now.get(Calendar.HOUR);
second=now.get(Calendar.SECOND);
day=now.get(Calendar.DAY_OF_MONTH);
week=now.get(Calendar.DAY_OF_WEEK);
super
.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
Ellipse2D circle=
new
Ellipse2D.Double(
15
,
20
,
2
*radius,
2
*radius);
g2.setColor(Color.ORANGE);
//外边的圈圈的橙色
g2.draw(circle);
g2.setStroke(
new
BasicStroke(
4
,BasicStroke.JOIN_ROUND,BasicStroke.CAP_ROUND));
g2.setColor(Color.BLUE);
//小点点是蓝色
double
hourAngle=Math.toRadians(
90
-
360
*(hours/
12
+minutes/
720
));
drawHand(g2,hourAngle,hour_hand_length);
g2.setColor(Color.red);
//分钟是红色
g2.setStroke(
new
BasicStroke(
3
,BasicStroke.JOIN_ROUND,BasicStroke.CAP_ROUND));
double
minuteAngle=Math.toRadians(
90
-
360
*(minutes/
60
+second/
3600
));
drawHand(g2,minuteAngle,minute_hand_length);
g2.setStroke(
new
BasicStroke(
2
,BasicStroke.JOIN_ROUND,BasicStroke.CAP_ROUND));
g2.setColor(Color.gray);
//秒钟
double
secondAngle=Math.toRadians(
90
-
360
*second/
60
);
drawHand(g2,secondAngle,second_hand_length);
g2.setColor(Color.BLUE);
//时钟
for
(
int
i=
0
;i<
12
;i++){
g2.setStroke(
new
BasicStroke(
3
,BasicStroke.JOIN_ROUND,BasicStroke.CAP_ROUND));
g2.drawLine((
int
)(
115
+
100
*Math.sin(
30
/
180.0
*i*Math.PI)),(
int
)(
120
+
100
*Math.cos(
30
/
180.0
*i*Math.PI)),
(
int
)(
117
+
100
*Math.sin(
30
/
180.0
*i*Math.PI)),(
int
)(
122
+
100
*Math.cos(
30
/
180.0
*i*Math.PI)));
}
g2.setStroke(
new
BasicStroke(
2
,BasicStroke.JOIN_ROUND,BasicStroke.CAP_ROUND));
for
(
int
i=
0
;i<
60
;i++){
g2.drawLine((
int
)(
115
+
100
*Math.sin(
6
/
180.0
*i*Math.PI)),(
int
)(
120
+
100
*Math.cos(
6
/
180.0
*i*Math.PI)),
(
int
)(
115
+
100
*Math.sin(
6
/
180.0
*i*Math.PI)),(
int
)(
120
+
100
*Math.cos(
6
/
180.0
*i*Math.PI)));
}
g2.setColor(Color.black);
//设置12 3 6 9的数字颜色
g2.setFont(
new
Font(
""
,Font.BOLD,
10
));
g2.drawString(
"12"
,
108
,
38
);
g2.drawString(
"3"
,
205
,
126
);
g2.drawString(
"6"
,
112
,
215
);
g2.drawString(
"9"
,
22
,
126
);
g2.setColor(Color.red);
//日期和星期
g2.setFont(
new
Font(
"黑体"
,Font.BOLD,
15
));
g2.drawString(
" "
+dayString,
67
,
255
);
g2.drawString(
" "
+
"星期"
+weekString,
77
,
285
);
g2.setColor(Color.black);
//数字时钟
SimpleDateFormat dateFormat =
new
SimpleDateFormat(
"HH:mm:ss"
);
String rtime = dateFormat.format(
new
Date()).toString();
g2.drawString(rtime,
76
,
315
);
}
public
void
drawHand(Graphics2D g2,
double
angle,
double
handLength){
Point2D end=
new
Point2D.Double(radius+
10
+handLength*Math.cos(angle),radius+
20
-handLength*Math.sin(angle));
Point2D center=
new
Point2D.Double(radius+
10
,radius+
20
);
g2.draw(
new
Line2D.Double(center,end));
}
//设置数字时间
public
void
setTime(){
Calendar c = Calendar.getInstance();
hours=c.get(Calendar.HOUR);
minutes=hours*
60
+c.get(Calendar.MINUTE);
second=minutes*
60
+c.get(Calendar.SECOND);
week=c.get(Calendar.DAY_OF_WEEK);
year=c.get(Calendar.YEAR);
month=c.get(Calendar.MONTH)+
1
;
day=c.get(Calendar.DAY_OF_MONTH);
dayString=year+
"-"
+month+
"-"
+day;
switch
(week){
case
1
:{
weekString=
"日"
;
break
;
}
case
2
:{
weekString=
"一"
;
break
;
}
case
3
:{
weekString=
"二"
;
break
;
}
case
4
:{
weekString=
"三"
;
break
;
}
case
5
:{
weekString=
"四"
;
break
;
}
case
6
:{
weekString=
"五"
;
break
;
}
case
7
:{
weekString=
"六"
;
break
;
}
default
:
break
;
}
repaint();
}
// @Override
public
void
run(){
for
(;;){
sleep1();
}
}
//线程一秒钟,秒钟动一次
public
void
sleep1(){
try
{
Thread.sleep(
1000
);
setTime();
}
catch
(InterruptedException e){
}
}
}
|
第二步:设置面板属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package
time;
import
java.awt.BorderLayout;
import
java.awt.Color;
import
java.awt.Font;
import
java.awt.Image;
import
java.awt.Toolkit;
import
java.net.URL;
import
javax.swing.JFrame;
import
javax.swing.UIManager;
/**
*
*@author huyongjian Oracle(Compus Solution Group)
* @Date 2013-7-18
* @version 2.0
* @since JDK1.6(建议)
Copy Right Information COMPUS SOLUTION GROUP
IDE:Eclipse
class:JTextFieldFrameClass 设置面板属性
*/
class
JTextFieldFrameClass
extends
JFrame {
/**
*
*/
private
static
final
long
serialVersionUID = 1L;
ClockPanelClass clock;
public
JTextFieldFrameClass(){
super
(
"时钟"
);
setSize(
240
,
370
);
clock=
new
ClockPanelClass();
//设置clock在面板的中间显示
getContentPane().add(clock,BorderLayout.CENTER);
this
.setColor.RED);
//设置居中显示
this
.setLocationRelativeTo(
null
);
//修改java左上角的图标
URL url =
this
.getClass().getResource(
"clock.png"
);
Image img = Toolkit.getDefaultToolkit().getImage(url);
this
.setIconImage(img);
//设置面板可见
setVisible(
true
);
//设置不可变大
setResizable(
false
);
}
}
|
第三步:main主函数调用写好的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package
time;
import
javax.swing.JFrame;
/**
*
*@author huyongjian Oracle(Compus Solution Group)
* @Date 2013-7-18
* @version 2.0
* @since JDK1.6(建议)
Copy Right Information COMPUS SOLUTION GROUP
IDE:Eclipse
class:Test2 main主函数
*/
class
ColockMain {
public
static
void
main(String []args){
JTextFieldFrameClass frame=
new
JTextFieldFrameClass();
Thread tt=
new
Thread(frame.clock);
tt.start();
//关闭窗口,退出应用!
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
|
第四步:展示
第五步:当然如果你觉得好,请入群:160243674 Java程序猿联盟,共同分享共同进步!
需要源码可以联系我!
本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1263394,如需转载请自行联系原作者