Java实现动态模拟时钟

本文实例为大家分享了java动态模拟时钟的具体代码,供大家参考,具体内容如下

应用名称:java动态模拟时钟

用到的知识:javaGUI,java 绘图

功能说明:通过java绘图画出一个虚拟的动态时钟

效果图:

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.lang.Thread;
import java.text.DecimalFormat;

public class StillClock extends JPanel {

    /**
     * @param args
     */
    private int hour;
    private int minute;
    private int second;

    //构造函数
    public StillClock() {
        setCurrentTime();
    }

    //返回小时
    public int getHour() {
        return hour;
    }


    public int getMinute() {
        return minute;
    }



    public int getSecond() {
        return second;
    }


    //绘制时钟
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        //初始化
        int clockRadius = (int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.5);
        int xCenter = getWidth() / 2;
        int yCenter = getHeight() / 2;
        //画圆
        g.setColor(Color.black);
        g.drawOval(xCenter - clockRadius, yCenter - clockRadius, 2 * clockRadius, 2 * clockRadius);
        g.drawString("12", xCenter - 5, yCenter - clockRadius + 15);
        g.drawString("9", xCenter - clockRadius + 3, yCenter + 5);
        g.drawString("3", xCenter + clockRadius - 10, yCenter + 3);
        g.drawString("6", xCenter - 3, yCenter + clockRadius - 3);
        //画秒针
        int sLength = (int)(clockRadius * 0.8);
        int xSecond = (int)(xCenter + sLength * Math.sin(second * (2 * Math.PI / 60)));
        int ySecond = (int)(yCenter - sLength * Math.cos(second * (2 * Math.PI / 60)));

        g.setColor(Color.red);
        g.drawLine(xCenter, yCenter, xSecond, ySecond);

        //画分针
        int mLenth = (int)(clockRadius * 0.65);
        int xMinute = (int)(xCenter + mLenth * Math.sin(minute * (2 * Math.PI / 60)));
        int yMinute = (int)(xCenter - mLenth * Math.cos(minute * (2 * Math.PI / 60)));
        g.setColor(Color.blue);
        g.drawLine(xCenter, yCenter, xMinute, yMinute);

        //画时针
        int hLength = (int)(clockRadius * 0.5);
        int xHour = (int)(xCenter + hLength * Math.sin((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
        int yHour = (int)(yCenter - hLength * Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
        g.setColor(Color.green);
        g.drawLine(xCenter, yCenter, xHour, yHour);

        //画数字时钟
        g.setColor(Color.black);
        DecimalFormat s=new DecimalFormat("00");
        g.drawString(s.format(getHour()) + ":" + s.format(getMinute()) + ":" + s.format(getSecond()), xCenter - 22, yCenter - clockRadius - 15);

    }

    public void setCurrentTime() {
        Calendar calendar = new GregorianCalendar();

        this.hour = calendar.get(Calendar.HOUR_OF_DAY);
        this.minute = calendar.get(Calendar.MINUTE);
        this.second = calendar.get(Calendar.SECOND);
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame frame = new JFrame("DiaplayClock");
        frame.setResizable(false);
        frame.setTitle("DiaplayClock");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,350);
        frame.setVisible(true);

        while(true) {
            StillClock clock = new StillClock();
            frame.getContentPane().add(clock);
            clock.setVisible(true);
            frame.validate();
            try {
                Thread.sleep(1000);

            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
            clock.setVisible(false);
            frame.remove(clock);
            clock = null;
            frame.validate();

        }

    }
}

 一、实现窗口

import javax.swing.*;

public class StillClock extends JPanel {




    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame frame = new JFrame("DiaplayClock");
        frame.setResizable(false);
        frame.setTitle("DiaplayClock");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,350);
        frame.setVisible(true);



    }
}

 二、获取当前时间

import javax.swing.*;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class StillClock extends JPanel {
    private int hour;
    private int minute;
    private int second;


    //构造函数

    public StillClock() {
        setCurrentTime();//获取当前时间方法
    }

    public void setCurrentTime() {
        Calendar calendar = new GregorianCalendar();

        this.hour = calendar.get(Calendar.HOUR_OF_DAY);
        this.minute = calendar.get(Calendar.MINUTE);
        this.second = calendar.get(Calendar.SECOND);
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame frame = new JFrame("DiaplayClock");
        frame.setResizable(false);
        frame.setTitle("DiaplayClock");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,350);
        frame.setVisible(true);

        StillClock clock = new StillClock();//实例化时钟
        frame.getContentPane().add(clock);//对JFrame添加组件:用getContentPane()方法获得JFrame的内容面板,再对其加入组件

    }
}

 三、绘制时钟

paintComponent()是swing的一个方法,相当于图形版的main(),是会自执行的。如果一个class中有构造函数,则执行顺序是先执行构造函数,再执行这个。  

import javax.swing.*;
import java.awt.*;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class StillClock extends JPanel {
    private int hour;
    private int minute;
    private int second;
    //返回小时
    public int getHour() {
        return hour;
    }


    public int getMinute() {
        return minute;
    }



    public int getSecond() {
        return second;
    }
    //绘制时钟
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        //初始化
        int clockRadius = (int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.5);
        int xCenter = getWidth() / 2;
        int yCenter = getHeight() / 2;
        //画圆
        g.setColor(Color.black);
        g.drawOval(xCenter - clockRadius, yCenter - clockRadius, 2 * clockRadius, 2 * clockRadius);
        g.drawString("12", xCenter - 5, yCenter - clockRadius + 15);
        g.drawString("9", xCenter - clockRadius + 3, yCenter + 5);
        g.drawString("3", xCenter + clockRadius - 10, yCenter + 3);
        g.drawString("6", xCenter - 3, yCenter + clockRadius - 3);
        //画秒针
        int sLength = (int)(clockRadius * 0.8);
        int xSecond = (int)(xCenter + sLength * Math.sin(second * (2 * Math.PI / 60)));
        int ySecond = (int)(yCenter - sLength * Math.cos(second * (2 * Math.PI / 60)));

        g.setColor(Color.red);
        g.drawLine(xCenter, yCenter, xSecond, ySecond);

        //画分针
        int mLenth = (int)(clockRadius * 0.65);
        int xMinute = (int)(xCenter + mLenth * Math.sin(minute * (2 * Math.PI / 60)));
        int yMinute = (int)(xCenter - mLenth * Math.cos(minute * (2 * Math.PI / 60)));
        g.setColor(Color.blue);
        g.drawLine(xCenter, yCenter, xMinute, yMinute);

        //画时针
        int hLength = (int)(clockRadius * 0.5);
        int xHour = (int)(xCenter + hLength * Math.sin((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
        int yHour = (int)(yCenter - hLength * Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
        g.setColor(Color.green);
        g.drawLine(xCenter, yCenter, xHour, yHour);

        //画数字时钟
        g.setColor(Color.black);
        DecimalFormat s=new DecimalFormat("00");
        g.drawString(s.format(getHour()) + ":" + s.format(getMinute()) + ":" + s.format(getSecond()), xCenter - 22, yCenter - clockRadius - 15);

    }
    //构造函数

    public StillClock() {
        setCurrentTime();//获取当前时间方法
    }

    public void setCurrentTime() {
        Calendar calendar = new GregorianCalendar();

        this.hour = calendar.get(Calendar.HOUR_OF_DAY);
        this.minute = calendar.get(Calendar.MINUTE);
        this.second = calendar.get(Calendar.SECOND);
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame frame = new JFrame("DiaplayClock");
        frame.setResizable(false);
        frame.setTitle("DiaplayClock");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,350);
        frame.setVisible(true);

        StillClock clock = new StillClock();//实例化时钟
        frame.getContentPane().add(clock);//对JFrame添加组件:用getContentPane()方法获得JFrame的内容面板,再对其加入组件
        clock.setVisible(true);
    }
}

获得一个表针不会移动的时钟

 四、循环刷新

import javax.swing.*;
import java.awt.*;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class StillClock extends JPanel {
    private int hour;
    private int minute;
    private int second;
    //返回小时
    public int getHour() {
        return hour;
    }


    public int getMinute() {
        return minute;
    }



    public int getSecond() {
        return second;
    }
    //绘制时钟
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        //初始化
        int clockRadius = (int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.5);
        int xCenter = getWidth() / 2;
        int yCenter = getHeight() / 2;
        //画圆
        g.setColor(Color.black);
        g.drawOval(xCenter - clockRadius, yCenter - clockRadius, 2 * clockRadius, 2 * clockRadius);
        g.drawString("12", xCenter - 5, yCenter - clockRadius + 15);
        g.drawString("9", xCenter - clockRadius + 3, yCenter + 5);
        g.drawString("3", xCenter + clockRadius - 10, yCenter + 3);
        g.drawString("6", xCenter - 3, yCenter + clockRadius - 3);
        //画秒针
        int sLength = (int)(clockRadius * 0.8);
        int xSecond = (int)(xCenter + sLength * Math.sin(second * (2 * Math.PI / 60)));
        int ySecond = (int)(yCenter - sLength * Math.cos(second * (2 * Math.PI / 60)));

        g.setColor(Color.red);
        g.drawLine(xCenter, yCenter, xSecond, ySecond);

        //画分针
        int mLenth = (int)(clockRadius * 0.65);
        int xMinute = (int)(xCenter + mLenth * Math.sin(minute * (2 * Math.PI / 60)));
        int yMinute = (int)(xCenter - mLenth * Math.cos(minute * (2 * Math.PI / 60)));
        g.setColor(Color.blue);
        g.drawLine(xCenter, yCenter, xMinute, yMinute);

        //画时针
        int hLength = (int)(clockRadius * 0.5);
        int xHour = (int)(xCenter + hLength * Math.sin((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
        int yHour = (int)(yCenter - hLength * Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
        g.setColor(Color.green);
        g.drawLine(xCenter, yCenter, xHour, yHour);

        //画数字时钟
        g.setColor(Color.black);
        DecimalFormat s=new DecimalFormat("00");
        g.drawString(s.format(getHour()) + ":" + s.format(getMinute()) + ":" + s.format(getSecond()), xCenter - 22, yCenter - clockRadius - 15);

    }
    //构造函数

    public StillClock() {
        setCurrentTime();//获取当前时间方法
    }

    public void setCurrentTime() {
        Calendar calendar = new GregorianCalendar();

        this.hour = calendar.get(Calendar.HOUR_OF_DAY);
        this.minute = calendar.get(Calendar.MINUTE);
        this.second = calendar.get(Calendar.SECOND);
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame frame = new JFrame("DiaplayClock");
        frame.setResizable(false);
        frame.setTitle("DiaplayClock");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,350);
        frame.setVisible(true);
        while(true) {
            StillClock clock = new StillClock();
            frame.getContentPane().add(clock);
            clock.setVisible(true);
            frame.validate();
            try {
                Thread.sleep(1000);

            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
            clock.setVisible(false);
            frame.remove(clock);
            clock = null;
            frame.validate();
        }
    }
}

 

posted @ 2023-10-26 15:41  szmtjs10  阅读(110)  评论(0编辑  收藏  举报