怎么用java创建一个内部时钟

Python014

怎么用java创建一个内部时钟,第1张

面向对象思想写成:

下面是一个显示器类

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()

    }

}

//整理一下