下面是一个显示器类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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())
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
//创建一个监听事件
setVisible(true)
ActionListener drawClock = new ActionListener(){
public void actionPerformed(ActionEvent evt){
repaint()
}
}
//创建一个时间计数器,每一秒触发一次
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 = 1i <= 12i ++){
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
}
//获得现在的时间
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)
//计算时间与度数的关系
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()
}
}
//整理一下