Java:希望每天叫醒你的不是闹钟而是梦想!-阿里云开发者社区

开发者社区> 一个处女座的程序猿> 正文

Java:希望每天叫醒你的不是闹钟而是梦想!

简介: Java:希望每天叫醒你的不是闹钟而是梦想!
+关注继续查看

代码设计

import java.awt.*;

import java.util.Date;

import javax.swing.*;

public class Clock extends JComponent{    

   /**

    *

    */

   private static final long serialVersionUID = -5379472973578609775L;

   private Font f = new Font("微软雅黑",Font.PLAIN,15);

   private Font f2 = new Font("微软雅黑",Font.BOLD,15);

   private JLabel l = new JLabel("当前时间:");

   private JLabel display = new JLabel();

   private JLabel display2 = new JLabel("");

   private int hour = 0;

   private int min = 0;

   private int sec = 0;

   private Date now = new Date();

   private Graphics2D g;

   final double PI = Math.PI;

   private String strTime = "" ;

   

   @SuppressWarnings("deprecation")

   public Clock(){        

       add(l);

       l.setBounds(120, 320, 80, 20);

       l.setFont(f);

       add(display);

       display.setBounds(195, 320, 80, 20);

       display.setFont(f);

       display.setBorder(BorderFactory.createLineBorder(Color.black));

       add(display2);

       display2.setBounds(90, 350, 250, 20);

       display2.setFont(f);

       hour = now.getHours();

       min = now.getMinutes();

       sec = now.getSeconds();

       setVisible(true);

   }

   public void paintComponent(Graphics g1){

       double x,y;

       super.paintComponent(g1);

       g = (Graphics2D) g1;

       //反锯齿开关开

       g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

       

       //画表盘

       g.setPaint(new GradientPaint(5,40,Color.red,15,50,Color.yellow,true));

       g.setStroke( new BasicStroke(3,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));

       g.drawOval(75, 40, 250, 250);

       g.fillOval(195, 160, 10, 10);

       g.setColor(Color.black);

       

       //画60个点

       for(int i = 0;i < 60;i++)

       {

           double[] co = new double[2];

           co = paint_Dot(i * 2 * PI / 60);

           x = co[0];

           y = co[1];

           if(i == 0 || i == 15 || i == 30 || i == 45)//画3,6,9,12四个大点

           {

               g.fillOval((int)(x - 5 + 200),(int)(y - 5 + 165),10,10);

           }

           else//其他小点

           {

               g.fillOval((int)(x - 2.5 + 200),(int)(y - 2.5 + 165),3,3);

           }

       }

       

       //画四个数字

       g.setFont(f2);

       g.drawString("3", 300, 171);

       g.drawString("6", 195, 273);

       g.drawString("9", 91, 171);

       g.drawString("12", 195, 68);  //g.drawString("12", 190, 68);

       

       //画时针,分针,秒针

       paint_HourPointer(hour*3600 + min*60 + sec,g);//时针走过的秒数

       paint_MinutePointer(min*60 + sec,g);//分针走过的秒数

       paint_SecondPointer(sec,g);//秒针走过的秒数

   }

   

   public void showUI(){

       new Thread() {

           @SuppressWarnings("deprecation")

           public void run() {

               while (true)

               {

                   now = new Date();

                   hour = now.getHours();

                   min = now.getMinutes();

                   sec = now.getSeconds();

                   try {

                       Thread.sleep(1000);

                   } catch (InterruptedException ex) {

                       ex.printStackTrace();

                   }

                   showTime();

                   repaint();

               }

           }

       }.start();

   }

   

   public void paint_HourPointer(int second,Graphics2D g){//second表示当前时间的时针相对00:00:00走了多少秒

       double x,y,angle;

       angle = second * PI / 21600;//时针的速度为PI/21600 (rad/s)

       x = 200 + 60 * Math.sin(angle);

       y = 165 - 60 * Math.cos(angle);

       g.setStroke( new BasicStroke(5,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND));

       g.setPaint(new GradientPaint(200,165,Color.red,260,165,Color.blue,true));

       g.drawLine(200, 165, (int)x, (int)y);

   }

   

   public void paint_MinutePointer(int second,Graphics2D g){//second表示当前时间的分针相对00:00:00走了多少秒

       double x,y,angle;

       angle = second * PI / 1800;//分针的速度为PI/1800 (rad/s)

       x = 200 + 80 * Math.sin(angle);

       y = 165 - 80 * Math.cos(angle);

       g.setStroke( new BasicStroke(3,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND));

       g.setPaint(new GradientPaint(200,165,Color.magenta,280,165,Color.blue,true));

       g.drawLine(200, 165, (int)x, (int)y);

   }

   

   public void paint_SecondPointer(int second,Graphics2D g){//second表示当前时间的秒针相对00:00:00走了多少秒

       double x,y,x1,y1,x2,y2,x3,y3,angle;

       double cos = 90 / Math.sqrt(8125);//90*90+5*5

       double sin = 5 / Math.sqrt(8125);

       angle = second * PI / 30;//时针的速度为PI/30 (rad/s)

       x = 200 + 95 * Math.sin(angle);

       y = 165 - 95 * Math.cos(angle);

       x1 = 200 + 20 * Math.sin(angle + PI);

       y1 = 165 - 20 * Math.cos(angle + PI);

       x2 = 200 + Math.sqrt(8125)* ( Math.sin(angle)*cos - Math.cos(angle)*sin ); //sin(a-b)

       y2 = 165 - Math.sqrt(8125)* ( Math.cos(angle)*cos + Math.sin(angle)*sin ); //cos(a-b)

       x3 = 200 + Math.sqrt(8125)* ( Math.sin(angle)*cos + Math.cos(angle)*sin ); //sin(a+b)

       y3 = 165 - Math.sqrt(8125)* ( Math.cos(angle)*cos - Math.sin(angle)*sin ); //cos(a+b)

       g.setStroke( new BasicStroke(2,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));

       g.setPaint(new GradientPaint(180,165,Color.CYAN,295,165,Color.MAGENTA,true));

       g.drawLine((int)x1, (int)y1, (int)x, (int)y);

       g.drawLine((int)x2, (int)y2, (int)x, (int)y);

       g.drawLine((int)x3, (int)y3, (int)x, (int)y);

   }

   

   public double[] paint_Dot(double angle){

       double[] co = new double[2];

       co[0] = 115 * Math.cos(angle);//横坐标

       co[1] = 115 * Math.sin(angle);//纵坐标

       return co;

   }

   

   @SuppressWarnings("deprecation")

   private void showTime(){

       String date;

       int hour_temp = hour,min_temp = min,sec_temp = sec;

       sec_temp += 1 ;

       if(sec_temp >= 60)

       {

           sec_temp = 0;

           min_temp += 1 ;

       }

       if(min_temp>=60){

           min_temp=0;

           hour_temp+=1;

       }

       if(hour_temp < 10)

           strTime = "0" + hour_temp + ":";

       else

           strTime = "" + hour_temp + ":";

       

       if(min_temp < 10)

           strTime = strTime + "0" + min_temp + ":";

       else

           strTime = strTime + "" + min_temp + ":";

       

       if(sec < 10)

           strTime = strTime + "0" + sec_temp;

       else

           strTime = strTime + "" + sec_temp;

       //在窗体上设置显示时间

       date = " " + (now.getYear()+1900) + "年" + (now.getMonth()+1) + "月" + now.getDate() + "日   " + "星期" ;

       switch (now.getDay()) {

       case 1:

           date += "一";

           break;

       case 2:

           date += "二";

           break;

       case 3:

           date += "三";

           break;

       case 4:

           date += "四";

           break;

       case 5:

           date += "五";

           break;

       case 6:

           date += "六";

           break;

       case 7:

           date += "日";

           break;

       }

       date += "  CST";  //Chinese standard time

       strTime = "  " + strTime;

       display.setText(strTime);

       display2.setText(date);

   }

   

   public static void main(String args[]){

       Clock c = new Clock();

       c.showUI();

       JFrame f = new JFrame("yunyaniu");

       Image img=Toolkit.getDefaultToolkit().getImage("image/logo小.jpg");//窗口图标

       f.setIconImage(img);

       f.setSize(400,420);

       f.setResizable(false);

       f.add(c, BorderLayout.CENTER);

       f.setLocationRelativeTo(null);

       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       f.setVisible(true);

   }

}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
22525 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6362 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3956 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7581 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
10713 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
2901 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载