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(); } }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值