Java使用NetBeans编程、利用线程Runnable实现一个数字时钟

一、实验内容

编程实现简单的数字时钟,能显示日期和时间(时、分、秒)如下图所示。


 

二、设计分析

一共需要设计3个类

  • 1、实现线程接口Runnable+具体实现抽象方法run()的子类NumberClockThread
  • 2、设计JFrame窗体NumClock
  • 3、NumClockTest测试类开启线程执行

 

三、代码演示

1、实现线程接口Runnable+具体实现抽象方法run()的子类NumberClockThread类

package exam1;

import java.util.Calendar;
import static java.util.Calendar.HOUR_OF_DAY;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * 注意设计run方法:使用日期类Calendar来获取系统当前时间 时间是int类型,窗口控件是string类型,所以int要转换为string:
 * String.valueOf()
 */
public class NumberClockThread implements Runnable {

    private String year;
    private String month;
    private String day;
    private String hour;
    private String minute;
    private String second;
    public static NumClock NC = null;//UI窗口界面空对象

    public NumberClockThread() {//生成对象时也实例化一个窗口界面类
        NC = new NumClock();//UI界面对象
        NC.setVisible(true);//界面显示出来
    }

    @Override
    public void run() {//只有线程Thread调用start()时才运行这段代码
        while (true) {
            Calendar now = new GregorianCalendar();//日历类:Calendar是抽象类,GregorianCalendar是子类
            year = String.valueOf(now.get(Calendar.YEAR));
            month = String.valueOf(now.get(Calendar.MONTH) + 1);//该Calendar里面的month是0开始的
            day = String.valueOf(now.get(Calendar.DATE));
            hour = String.valueOf(now.get(Calendar.HOUR_OF_DAY));
            minute = String.valueOf(now.get(Calendar.MINUTE));
            second = String.valueOf(now.get(Calendar.SECOND));
            NC.SendTime(year, month, day, hour, minute, second);
//把时间数据发送到窗体对象-并调用setTime()显示到控件上-结束-回到此处-继续循环-实现界面数据的动态更新      
            try {
                Thread.sleep(1000);//休息1秒,再来获取时间日期更新并同时GUI界面更新获取数据显示
            } catch (InterruptedException ex) {
                Logger.getLogger(NumberClockThread.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

2、设计JFrame窗体NumClock类

package exam1;

/**
 * 注意设计两个方法:SendTime()、SetTime() 因为实现接口Runnable的子类构造函数已经实例化了窗口对象
 * 所以可调用方法SendTime()把run方法中的日期传回对象中 此时窗口对象有了数据就可以SetTime()显示setText到控件上去了
 */
public class NumClock extends javax.swing.JFrame {

    private String year;
    private String month;
    private String day;
    private String hour;
    private String minute;
    private String second;

    public void SendTime(String y, String m, String d, String h, String minutes, String s) {
        //该函数使用线程Thread,放在构造函数中
        year = y;
        month = m;
        day = d;
        hour = h;
        minute = minutes;
        second = s;
        SetTime();
    }

    public void SetTime() {
        JTextYear.setText(year);
        JTextMonth.setText(month);
        JTextDay.setText(day);
        JTextHour.setText(hour);
        JTextMinute.setText(minute);
        JTextSecond.setText(second);
    }

    public NumClock() {//构造函数
        initComponents();
    }

//此处省略了自动生成的代码部分
                   
    private javax.swing.JTextField JTextDay;
    private javax.swing.JTextField JTextHour;
    private javax.swing.JTextField JTextMinute;
    private javax.swing.JTextField JTextMonth;
    private javax.swing.JTextField JTextSecond;
    private javax.swing.JTextField JTextYear;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;      
}

3、NumClockTest测试类开启线程执行

package SyTest;

import exam1.NumClock;
import exam1.NumberClockThread;

/**
 * 设计思想:以一个窗口一个对象一个界面的思想来设计数字时钟 测试类负责创建开启线程 线程start运行的run方法里面具体实现:
 * run方法:首先创建一个静态窗口空对象 接着,在实现接口Runnable的子类构造方法里面new开辟窗口对象并显示setVisible
 * 目前为止窗体界面已经创建成功,接下来就是把日期显示到窗口文本控件中去 因为日期是动态获取的,所以也要动态的把日期发送到窗口对象中并更新显示到控件
 */
public class NumClockTest {

    public static void main(String[] args) {
        NumberClockThread ncTh = new NumberClockThread();
        Thread th = new Thread(ncTh);
        th.start();//开启线程,也就是开始运行run()方法
    }
}

 

四、运行截图

 

 

 

 

  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值