java.util.*
import
java.awt.*
import
java.applet.*
//impelements
Runnable
是线程程序的接口
public
class
Clock
extends
Applet
implements
Runnable
{
Thread
timer
=
null
//
定义线程实体timer
int
xcenter
=
400,
ycenter
=
50
int
Radius
=
ycenter
-
5
public
void
init()
{
resize(400,
125)//
设置时钟程序的窗口大小
setBackground(Color.white)//
设衡并置小应用程序的背景色
}
public
void
paint(Graphics
g)
{
int
xh,
yh,
xm,
ym,
xs,
ys,
s,
m,
h
String
today
Date
dat
=
new
Date()
//
定义时间类dat
s
=
dat.getSeconds()
//
获得时间秒
m
=
dat.getMinutes()
//
获得时间分
h
=
dat.getHours()
today
=
dat.toLocaleString()
//
获得字符串时间格式
g.clearRect(0,
0,
size().width,
size().height)
//
消咐掘迹除小应用程序
xcenter
=
xcenter
-
1
//
向左移动一个像素点
if
(xcenter
<
-50)
xcenter
=
400
//
如果xcenter小于-50,则回到初始位置
//
计算秒的坐标
xs
=
(int)
(Math.cos(s
*
3.14f
/
30
-
3.14f
/
2)
*
(Radius
-
5)
+
xcenter)
ys
=
(int)
(Math.sin(s
*
3.14f
/
30
-
3.14f
/
2)
*
(Radius
-
5)
+
ycenter)
//
计算分钟的坐标
xm
=
(int)
(Math.cos(m
*
3.14f
/
30
-
3.14f
/
2)
*
(Radius
-
10)
+
xcenter)
ym
=
(int)
(Math.sin(m
*
3.14f
/
30
-
3.14f
/
2)
*
(Radius
-
10)
+
ycenter)
//
计算小时的散或坐标
xh
=
(int)
(Math.cos((h
*
30
+
m
/
2)
*
3.14f
/
180
-
3.14f
/
2)
*
(Radius
-
20)
+
xcenter)
yh
=
(int)
(Math.sin((h
*
30
+
m
/
2)
*
3.14f
/
180
-
3.14f
/
2)
*
(Radius
-
20)
+
ycenter)
g.setColor(Color.darkGray)
//
设置颜色
g.drawString("9",
xcenter
-
(Radius
-
5),
ycenter
+
3)
//
显示时钟上的数字‘9’
g.drawString("3",
xcenter
+
(Radius
-
10),
ycenter
+
3)
//
显示时钟上的数字‘3’
g.drawString("12",
xcenter
-
5,
ycenter
-
(Radius
-
13))
//
显示时钟上的数字'12'
g.drawString("6",
xcenter
-
3,
ycenter
+
(Radius
-
10))
//
显示时钟上的数字'6'
g.drawString(today,
0,
125)
//
显示字符串时钟
g.drawLine(xcenter,
ycenter,
xs,
ys)
//
画秒针
g.setColor(Color.blue)
//
设置颜色
g.drawArc(xcenter
-
Radius,
ycenter
-
Radius,
2
*
Radius,
2
*
Radius,
0,
360)
//
画钟
g.drawLine(xcenter,
ycenter
-
1,
xm,
ym)
//
画分针
g.drawLine(xcenter
-
1,
ycenter,
xm,
ym)
//
画分针
g.drawLine(xcenter,
ycenter
-
1,
xh,
yh)
//
画时针
g.drawLine(xcenter
-
1,
ycenter,
xh,
yh)
//
画时针
}
public
void
start()
{
if
(timer
==
null)
{
timer
=
new
Thread(this)
//
生成Thread(多线程程序)的对象实体
timer.start()
//
启动生成的线程
}
}
public
void
stop()
{
timer.stop()
//
停止线程的工作
timer
=
null
//
放掉Thread对象
}
public
void
run()
//
改方法用来定义线程体,一旦线程被启动执行,就开始执行这个方法
{
while
(timer
!=
null)
{
try
{
Thread.sleep(150)
//
使当前正在执行的线程进入睡眠时间由参数millis确定,
//
单位时间是毫秒,当这个时间过去,线程即可运行的
while
(timer
!=
null)
{
try
{
Thread.sleep(150)//
使用当前正在执行的线程进入睡眠时间由参数
//
millis确定,单位是毫秒,当这个时间过去,线程即为可运行的
}
catch
(InterruptedException
e)
{
}
repaint()
//
repaint所做的事其实是去调用方法uadate重画效应用程序
}
timer
=
null
}
catch
(InterruptedException
e)
{
}
}
}
//
所做的工作是先将整个效应用程序区域清除,再去调用paint,完成重画的动作
public
void
update(Graphics
g)
{
paint(g)
}
}
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("Clock by kikiwawa")
setDefaultCloseOperation(3)
setSize(200,200)
setBackground(Color.BLACK)
setLocation(300,150)
setResizable(false)
setVisible(true)
int delay = 1000
ActionListener drawClock = new ActionListener(){
public void actionPerformed(ActionEvent evt){
repaint()
}
}
new Timer(delay,drawClock).start()
}
public void actionPerformed(ActionEvent 裂迹带e){
}
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
for(int i=1i<=12i++){
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"+nowhelse st=""+nowh
if(nowm<10) st+=":0"+nowmelse 州卜st+=":"+nowm
if(nows<10) st+=":0"+nowselse 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
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(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()
} }
4
面向对象思想写成:
下面是一个显族竖示器类
public class Display {private int value//现在的值
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())
}
}
}
下面创建一个答穗搭时钟对象:
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()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)