Java实现的动态数字时钟功能示例【显示世界时间】

本文实例讲述了Java实现的动态数字时钟功能。分享给大家供大家参考,具体如下:

构建:

1. Clock继承 JFrame 为运行页面
2. ClockText 测试类 创建 Clock 对象

运行效果:

具体实现:

一、Clock类 

  • 四个JPnal 三个放时间 最后一个放日期
  • 放时间的三个JPnal 分别加入 地点 时间 按钮
  • 最后一个按钮添加日期

具体实现如下:

public class Clock extends JFrame {
    private JPanel jPanelBeijing;
    private JPanel jPanelNewYork;
    private JPanel jPanelLondom;
    private JPanel jPanelDate;
    private boolean BeijingThreadFlag_IsStart = true;
    private boolean NewYorkThreadFlag_IsStart = true;
    private boolean LondonThreadFlag_IsStart = true;
    public Clock() {
        // TODO Auto-generated constructor stub
        jPanelBeijing = new JPanel();
        jPanelNewYork = new JPanel();
        jPanelLondom = new JPanel();
        jPanelDate = new JPanel();
        iniRelations();
        iniLayout();
        jFrameClick();
        setVisible(true);
        setSize(480, 225);
        setLocationRelativeTo(null);
    }
    private void iniLayout() {
        jPanelBeijing.setLayout(new GridLayout(3, 1));
        jPanelNewYork.setLayout(new GridLayout(3, 1));
        jPanelLondom.setLayout(new GridLayout(3, 1));
    }
    // 关系
    private void iniRelations() {
        this.add(BorderLayout.WEST, jPanelBeijing);
        this.add(BorderLayout.CENTER, jPanelNewYork);
        this.add(BorderLayout.EAST, jPanelLondom);
        this.add(BorderLayout.SOUTH, jPanelDate);
        Font placeFont = new Font("楷体", Font.BOLD, 36);
        JLabel jLabelBeijing = new JLabel("北京时间");
        jLabelBeijing.setFont(placeFont);
        jPanelBeijing.add(jLabelBeijing);
        setWestPanel();
        JLabel jLabelNewYork = new JLabel("纽约时间");
        jLabelNewYork.setFont(placeFont);
        jPanelNewYork.add(jLabelNewYork);
        setCenterPanel();
        JLabel jLabelLondon = new JLabel("伦敦时间");
        jLabelLondon.setFont(placeFont);
        jPanelLondom.add(jLabelLondon);
        setEastPanel();
        setDatePanel();
    }
    private void setWestPanel() {
        // add time for SouthPanel
        JLabel jLabelTime = new JLabel("加载中.");
        jLabelTime.setFont(new Font("宋体", Font.BOLD, 30));
        Timer timeAction = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                long timemillis = System.currentTimeMillis();
                // 转换日期显示格式
                SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss ");
                jLabelTime.setText(time.format(new Date(timemillis)));
            }
        });
        timeAction.start();
        jPanelBeijing.add(jLabelTime);
        Button button = new Button("北京暂停");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                if (BeijingThreadFlag_IsStart) {
                    timeAction.stop();
                    button.setLabel("北京继续");
                    BeijingThreadFlag_IsStart = false;
                } else {
                    timeAction.start();
                    button.setLabel("北京暂停");
                    BeijingThreadFlag_IsStart = true ;
                }
            }
        });
        jPanelBeijing.add(button);
    }
    private void setCenterPanel() {
        // add time for SouthPanel
        JLabel jLabelTime = new JLabel("加载中.");
        jLabelTime.setFont(new Font("宋体", Font.BOLD, 30));
        Timer timeAction = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                long timemillis = System.currentTimeMillis();
                // 转换日期显示格式
                SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss ");
                jLabelTime.setText(time.format(new Date(timemillis - 13 * 60 * 60 * 1000)));
            }
        });
        timeAction.start();
        jPanelNewYork.add(jLabelTime);
        Button button = new Button("纽约暂停");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                if (NewYorkThreadFlag_IsStart) {
                    timeAction.stop();
                    button.setLabel("纽约继续");
                    NewYorkThreadFlag_IsStart = false;
                } else {
                    timeAction.start();
                    button.setLabel("纽约暂停");
                    NewYorkThreadFlag_IsStart = true ;
                }
            }
        });
        jPanelNewYork.add(button);
    }
    private void setEastPanel() {
        // add time for SouthPanel
        // JLabel jLabelDate = new JLabel("Date");
        JLabel jLabelTime = new JLabel("加载中.");
        jLabelTime.setFont(new Font("宋体", Font.BOLD, 30));
        Timer timeAction = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                long timemillis = System.currentTimeMillis();
                // SimpleDateFormat date = new SimpleDateFormat("yyyy 年 MM 月 dd
                // 日 ");
                // jLabelDate.setText(" 当前日期: " + date.format(new
                // Date(timemillis)));
                SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss ");
                jLabelTime.setText(time.format(new Time(timemillis - 8 * 60 * 60 * 1000)));
            }
        });
        timeAction.start();
        jPanelLondom.add(jLabelTime);
        Button button = new Button("伦敦暂停");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                if (LondonThreadFlag_IsStart) {
                    timeAction.stop();
                    button.setLabel("伦敦继续");
                    LondonThreadFlag_IsStart = false;
                } else {
                    timeAction.start();
                    button.setLabel("伦敦暂停");
                    LondonThreadFlag_IsStart = true ;
                }
            }
        });
        jPanelLondom.add(button);
        // jPanelLondom.add(jLabelDate);
    }
    private void setDatePanel() {
        // add time for SouthPanel
        JLabel jLabelDate = new JLabel("加载中.");
        Timer timeAction = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                long timemillis = System.currentTimeMillis();
                 SimpleDateFormat date = new SimpleDateFormat("yyyy 年 MM 月 dd 日 ");
                 jLabelDate.setText(" 当前日期: " + date.format(new Date(timemillis)));
             }
        });
        timeAction.start();
        jPanelDate.add(jLabelDate);
    }
    private void jFrameClick(){
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//设置不默认关闭
        addWindowListener(new WindowListener() {
            @Override
            public void windowOpened(WindowEvent e) {
                // TODO Auto-generated method stub
            }
            @Override
            public void windowIconified(WindowEvent e) {
                // TODO Auto-generated method stub
            }
            @Override
            public void windowDeiconified(WindowEvent e) {
                // TODO Auto-generated method stub
            }
            @Override
            public void windowDeactivated(WindowEvent e) {
                // TODO Auto-generated method stub
            }
            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                int x = JOptionPane.showConfirmDialog(null, "确认退出么?", "友情提示", JOptionPane.OK_CANCEL_OPTION,
                        JOptionPane.WARNING_MESSAGE);
                if (x == 0) {
                    System.exit(0);
                }
            }
            @Override
            public void windowClosed(WindowEvent e) {
                // TODO Auto-generated method stub
            }
            @Override
            public void windowActivated(WindowEvent e) {
                // TODO Auto-generated method stub
            }
        });
    }
}

二、创建ClockText类用于测试

public class ClockText{
    public static void main(String[] args) {
        new Clock();
    }
}

PS:这里再为大家推荐几款时间及日期相关工具供大家参考使用:

在线世界各地时间查询:
http://tools.jb51.net/zhuanhuanqi/worldtime

Unix时间戳(timestamp)转换工具:
http://tools.jb51.net/code/unixtime

在线日期/天数计算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi

更多关于java相关内容感兴趣的读者可查看本站专题:《java日期与时间操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • 深入理解Java高级特性——注解

    博主在初学注解的时候看到网上的介绍大部分都是直接介绍用法或者功能,没有实际的应用场景,篇幅又很长导致学习的时候难以理解其意图,而且学完就忘QAQ.本篇文章中我将结合实际的应用场景尽可能由浅入深,平缓的介绍java注解. java注解是jdk1.5以后新出的特性,对于它的应用非常广泛,我们首先来看一下注解的应用,百度百科上这样说: 我们可以看到,注解的作用有三方面: 编写doc文档:这个就我们很常用的 @return 以及 @author,加了这些注解以后,就可以用jdk帮我们自动生成对应的API

  • java与php的区别浅析

    java的简单介绍 Java是一种通用的面向对象编程语言,旨在生成可在任何地方使用相同代码的代码.这种编程语言是基于类的,面向对象的和人类可读的.它支持服务器端和客户端. Java既可以编译也可以解释.Java编译器将源代码转换为字节码,然后java解释器生成机器代码,该机器代码由运行java程序的机器直接执行.它可靠,分布式,便携.它可用于开发独立应用程序或基于Web的应用程序. PHP的简单介绍 PHP被称为超文本预处理器,它是一种服务器端脚本语言.它是一种动态类型语言,不需要编译代码:它是

  • 在spring boot中使用java线程池ExecutorService的讲解

    1. 认识java线程池 1.1 在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.需处理的任务的数量大 1.2 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存 1.3 线程池包括以下四个基本组成部分: 1.线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务: 2.工作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以

  • Java文本编辑器实现方法详解

    本文实例讲述了Java文本编辑器实现方法.分享给大家供大家参考,具体如下: 结构分析: 界面布局 : EditFrame main方法所在: EditText 打开功能实现:  FileReadThread 保存跟能实现:  save 实际运行效果: 附:完整代码实现 一. EditFrame 包括一个菜单Menu 底部:日期时间 代码附上: public class EditFrame extends JFrame { // TODO 自动生成的构造函数存根 boolean saveFlag

  • 详解java并发之重入锁-ReentrantLock

    前言 目前主流的锁有两种,一种是synchronized,另一种就是ReentrantLock,JDK优化到现在目前为止synchronized的性能已经和重入锁不分伯仲了,但是重入锁的功能和灵活性要比这个关键字多的多,所以重入锁是可以完全替代synchronized关键字的.下面就来介绍这个重入锁. 正文 ReentrantLock重入锁是Lock接口里最重要的实现,也是在实际开发中应用最多的一个,我这篇文章更接近实际开发的应用场景,为开发者提供直接上手应用.所以不是所有方法我都讲解,有些冷门

  • Java抛出异常与自定义异常类应用示例

    本文实例讲述了Java抛出异常与自定义异常类.分享给大家供大家参考,具体如下: 异常处理常用方法: 常用的异常处理方法有: 一.try()catch() 语句 二.throw / throws 语句 三.自定义异常类 用途: 众所周知,当程序运行过程中,如果遇到了错误(比如数组下标越界,空指针等)程序就会自动终止,但这种错误一般是偶然的,可能是用户输入不呵呵程序编写者的意图导致,而不是程序本身问题,这是我们要做的,是让操作者知道发生了什么事情,而不是直截了当的结束程序,这时我们就用到了异常处理(

  • JavaScript碎片—函数闭包(模拟面向对象)

    经过这几天的博客浏览,让我见识大涨,其中有一篇让我感触犹深,JavaScript语言本身是没有面向对象的,但是那些大神们却深深的模拟出来了面向对象,让我震撼不已.本篇博客就是在此基础上加上自己的认知,如有错误,还请见谅. 具体来说实现模拟面向对象主要是利用JavaScript函数闭包这个概念.由于JavaScript中的每一个function都会形成一个作用域,而如果变量声明在这个域中,那么外部是无法直接去访问,要想访问必须new出一个实例来,相当于Java中class.首先让我们来了解一下pr

  • Java位掩码控制权限与(&)或(|)非(~)、>的介绍

    1. java 位掩码 java 位掩码,在java开发中很少有场景会用到掩码,但是当系统中需要判断某个对象是否有 某些权限时,可以通过位掩码来做. 位掩码 主要通过位运算,例如与(&).非(~).或(|).异或(^).移位(<<和>>)等来实现 权限判断功能. 1.1 简单介绍一下位运算符(计算均为二进制计算) << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >> 1,相当于num除

  • MapStruct处理Java中实体与模型间不匹配属性转换的方法

    摘要: 前面介绍了MapStrut简单用法,MapStrut的最重要的特点就是处理Java中实体与模型间不匹配属性的转换. 实体模型 有一个User对象: public class User { private Integer id; private String name; private double account; private boolean married; // setters, getters, toString() } 有一个Employee 对象: public class

  • Java实现的矩阵乘法示例

    本文实例讲述了Java实现的矩阵乘法.分享给大家供大家参考,具体如下: 思路: 矩阵乘法的前提是:前一矩阵的行数 == 后一矩阵的列数(rows == cols) 在满足前提的情况下:前一矩阵的第一行 与 第二个矩阵的第一列 逐个相乘.将乘积求和 作为 结果矩阵的第一个元素 类推刻得到:结果矩阵的 第 [row][col] 个元素 = 前一矩阵的第 row 行 与 后一矩阵的 col列上的元素 逐一相乘 后的乘积之和 代码及解析: 一.算法剖析: 1.设置两个for循环用来控制结果(输出)矩阵的

随机推荐