目标:
实现一个可以动态变化时间的时钟界面
目标图:
项目分析:
框架上绘制图案用paint函数,显示时间用Date类,修改时间格式用SimpleDateFormat类,动态显示时间用线程Runnable接口不停刷新面板。
代码实现:
import java.awt.*;
import java.text.SimpleDateFormat;
import javax.swing.*;
import java.util.*;
public class GetCurrentTime extends JFrame implements Runnable{
public static void main(String[] args) {
// TODO Auto-generated method stub
GetCurrentTime gct=new GetCurrentTime(); //创建当前类的对象
new Thread(gct).start(); //把当前类的对象添加到线程中,并启动线程
}
GetCurrentTime() //构造函数
{
this.setTitle("My project");
this.setSize(500, 310);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void paint(Graphics g) //绘图函数
{
super.paint(g);
g.setFont(new Font("华文新魏",Font.BOLD,24)); //设置字体样式
g.drawString(alterTimeFormat(), 100, 150); //画出当前时间
}
public String alterTimeFormat() //改变时间样式函数
{
return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date().getTime());
}
@Override
public void run() { //线程函数
// TODO Auto-generated method stub
while(true)
{
try {
Thread.sleep(1000); //休眠一秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint(); //重绘框架
}
}
}
注意事项:
- 绘图函数中第一句:super.paint(g);一定要带,可以理解为是初始化,我开始忘了带,结果出问题了。
- 线程函数记得用while语句,不然构不成一直刷新。
- 改变时间样式函数中yyyy代表year,MM代表month,dd代表day,hh代表hour,mm代表min,ss代表second,不能随便起名字。
怎样使用Runnable和Thread实现多线程?点击打开链接
JavaGUI——绘图技术基础 点击打开链接
欢迎各位在评论区留言探讨