10. 9. 1. 丑陋的表 Create a thread to update Swing

 

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Clock extends JPanel implements Runnable{
	Thread thread = null;
	
	//SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。
	SimpleDateFormat formatter = new SimpleDateFormat("s",Locale.getDefault());
	
	Date currentDate;//这个时间是 java.util.Date
	
	int xcenter = 100, ycenter = 100, lastxs = 0, lastys = 0, lastxm = 0, lastym = 0, lastxh = 0,
			lastyh = 0;
	
	private void drawStructure(Graphics g){//画这个表圆,表针
		g.setFont(new Font("TimesRoman", Font.PLAIN, 14));
		g.setColor(Color.blue);
		g.drawOval(xcenter-50, ycenter-50, 100, 100);
		g.setColor(Color.DARK_GRAY);
		g.drawString("9", xcenter - 45, ycenter + 3);
	    g.drawString("3", xcenter + 40, ycenter + 3);
	    g.drawString("12", xcenter - 5, ycenter - 37);//这几个位置好难弄
	    g.drawString("6", xcenter - 3, ycenter + 45);
	}
	
	public void paint(Graphics g){
		int xhour, yhour, xminute, yminute, xsecond, ysecond, second, minute, hour;
	    drawStructure(g);

	    currentDate = new Date();

	    formatter.applyPattern("s");
	    second = Integer.parseInt(formatter.format(currentDate));
	    formatter.applyPattern("m");
	    minute = Integer.parseInt(formatter.format(currentDate));

	    formatter.applyPattern("h");
	    hour = Integer.parseInt(formatter.format(currentDate));

	    xsecond = (int) (Math.cos(second * 3.14f / 30 - 3.14f / 2) * 45 + xcenter);
	    ysecond = (int) (Math.sin(second * 3.14f / 30 - 3.14f / 2) * 45 + ycenter);
	    xminute = (int) (Math.cos(minute * 3.14f / 30 - 3.14f / 2) * 40 + xcenter);
	    yminute = (int) (Math.sin(minute * 3.14f / 30 - 3.14f / 2) * 40 + ycenter);
	    xhour = (int) (Math.cos((hour * 30 + minute / 2) * 3.14f / 180 - 3.14f / 2) * 30 + xcenter);
	    yhour = (int) (Math.sin((hour * 30 + minute / 2) * 3.14f / 180 - 3.14f / 2) * 30 + ycenter);

	    // Erase if necessary, and redraw
	    g.setColor(Color.lightGray);
	    if (xsecond != lastxs || ysecond != lastys) {
	      g.drawLine(xcenter, ycenter, lastxs, lastys);
	    }
	    if (xminute != lastxm || yminute != lastym) {
	      g.drawLine(xcenter, ycenter - 1, lastxm, lastym);
	      g.drawLine(xcenter - 1, ycenter, lastxm, lastym);
	    }
	    if (xhour != lastxh || yhour != lastyh) {
	      g.drawLine(xcenter, ycenter - 1, lastxh, lastyh);
	      g.drawLine(xcenter - 1, ycenter, lastxh, lastyh);
	    }
	    
	    g.setColor(Color.darkGray);
	    g.drawLine(xcenter, ycenter, xsecond, ysecond);
	   
	    g.setColor(Color.red);
	    g.drawLine(xcenter, ycenter - 1, xminute, yminute);
	    g.drawLine(xcenter - 1, ycenter, xminute, yminute);
	    g.drawLine(xcenter, ycenter - 1, xhour, yhour);
	    g.drawLine(xcenter - 1, ycenter, xhour, yhour);
	    lastxs = xsecond;
	    lastys = ysecond;
	    lastxm = xminute;
	    lastym = yminute;
	    lastxh = xhour;
	    lastyh = yhour;

	}
	
	public void start(){
		if(thread == null){
			thread = new Thread(this);
			thread.start();
		}
	}
	
	public void stop(){
		thread = null;
	}


	public void run() {
		while(thread != null){
			try{
				Thread.sleep(100);
			}catch(InterruptedException e){
				
			}
			repaint();
		}
		thread = null;
	}
	
	public void update(Graphics g){
		paint(g);
	}
	
	public static void main(String[] args) {
		JFrame window = new JFrame("我是一只丑陋的表");
	    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    window.setBounds(30, 30, 300, 300);
	    Clock clock = new Clock();
	    window.getContentPane().add(clock);
	    window.setVisible(true);
	    clock.start();
	}
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值