如何用Java编写一个模拟时钟表盘的程序?

2026-05-24 02:281阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1081个文字,预计阅读时间需要5分钟。

如何用Java编写一个模拟时钟表盘的程序?

以下是对原文的简化

原文:本文实例为某大家分享了Java实现时钟盘的具体代码,供大家参考。内容主要包括:设计并实现一个模拟时钟功能的程序。程序中应显示时针、分针和秒针,同时以数字形式显示‘当前时间’。

简化后:本文分享Java编写的时钟盘代码,供参考。内容涉及设计模拟时钟程序,显示时针、分针、秒针及当前时间数字。

本文实例为大家分享了java实现时钟表盘的具体代码,供大家参考,具体内容如下

设计并实现一个模拟时钟功能的应用程序。程序中应显示时针、分针和秒针,并同时以数字形式显示当前时间。

实现结果:

源代码如下:

如何用Java编写一个模拟时钟表盘的程序?

//ClockPanel.java import javax.swing.*; import java.util.Calendar;   import java.util.GregorianCalendar;   import java.util.Timer;   import java.util.TimerTask;   import java.text.SimpleDateFormat; import java.util.Locale;   import java.awt.*; import java.awt.event.*; public class ClockPanel extends JPanel{     private GregorianCalendar calendar;     private JButton btn;     private JButton btn2;     private int currentState=8;      private String zone;     private int hourTemp;     final int X=320, Y=240, R=120;   // 圆心坐标,半径     private int xPos,yPos;     private int hour,minute,second;      private int xHour,yHour,xMinute,yMinute,xSecond,ySecond;//表针位置(大端)     private int xHour1,yHour1,xMinute1,yMinute1,xSecond1,ySecond1;//表针位置(小端)     private double a_sec,a_min ,a_hour;//角度     ClockPanel() {   // 创建定时器对象         Timer t = new Timer();           Task task = new Task();           t.schedule(task, 0, 1000);          setLayout(new BorderLayout(10,20));          btn=new JButton("时区  上");         btn2=new JButton("时区 下");         btn.setBorder(BorderFactory.createRaisedBevelBorder());         btn2.setBorder(BorderFactory.createRaisedBevelBorder());         btn.setBackground(Color.green);         btn2.setBackground(Color.green);         btn.addActionListener(new ButtonListener());          btn2.addActionListener(new ButtonListener());          add(btn,BorderLayout.WEST);          add(btn2,BorderLayout.EAST);      }     //相关事件处理     private class ButtonListener implements ActionListener {         public void actionPerformed(ActionEvent event) {                 if (event.getSource()==btn)                 currentState++;             if (event.getSource()==btn2)                 currentState--;         }     }     public void paintComponent(Graphics g){          super.paintComponent(g);          double alfa;    //所画点对应的角度         Graphics2D g2d=(Graphics2D)g;         BasicStroke bstroke=new BasicStroke(1.0f);         BasicStroke bstroke2=new BasicStroke(2.0f);         BasicStroke bstroke3=new BasicStroke(3.0f);         g2d.setStroke(bstroke2);         for(int i=0;i<=360;i+=6)  {             alfa=Math.toRadians(i);  //角度用弧度表示             xPos=X+(int)(R*Math.cos(alfa));   // x坐标             yPos=Y-(int)(R*Math.sin(alfa));   // y坐标             int xBegin=320+(int)(144*Math.sin(alfa));             int yBegin=240-(int)(144*Math.cos(alfa));             int xEnd=320+(int)(159*Math.sin(alfa));             int yEnd=240-(int)(159*Math.cos(alfa));             g2d.setColor(Color.BLACK);             g2d.drawLine(xBegin,yBegin,xEnd,yEnd);             g2d.setColor(Color.RED);             switch(i){  // 写时钟数字刻度                 case 0: g2d.drawString("3", xPos,yPos);                         break;                 case 90: g2d.drawString("12", xPos,yPos);                         break;                 case 180: g2d.drawString("9", xPos,yPos);                         break;                 case 270: g2d.drawString("6",xPos,yPos);                         break;                   }             if(i%30==0){                 g2d.drawLine(xBegin,yBegin,xEnd,yEnd);             }         }         g2d.setColor(Color.BLACK);         g2d.setStroke(bstroke3);         g2d.drawLine(X, Y, xHour,yHour);    // 画时针         g2d.drawLine(X, Y, xHour1,yHour1);           g2d.setColor(Color.BLUE);         g2d.setStroke(bstroke2);         g2d.drawLine(X, Y, xMinute,yMinute);    // 画分针         g2d.drawLine(X, Y, xMinute1,yMinute1);         g2d.setColor(Color.RED);         g2d.setStroke(bstroke);         g2d.drawLine(X, Y, xSecond,ySecond);    // 画秒针         g2d.drawLine(X, Y, xSecond1,ySecond1);         //表盘中心点1         g2d.drawOval(317,237,6,6);          g2d.fillOval(317,237,6,6);         //表盘中心点2         g2d.setColor(Color.BLACK);         g2d.drawOval(319,238,4,4);          g2d.fillOval(319,238,4,4);         //表盘中心圆环         g2d.setColor(Color.ORANGE);         g2d.drawOval(300,220,40,40);          g2d.setColor(Color.black);         g2d.drawString("15010140079",290,376);          GregorianCalendar gre=new GregorianCalendar();          SimpleDateFormat dateforamt1=new SimpleDateFormat("yyyy年MM月dd日E");         //SimpleDateFormat dateforamt2=new SimpleDateFormat("H时m分s秒");         g2d.setColor(Color.black);         g2d.setFont(new Font("SAN_SERIF",Font.BOLD,20));          g2d.drawString(dateforamt1.format(gre.getTime()),250,50);         g2d.drawString(hour+"时"+minute+"分"+second+"秒",260,430);         //时区判断         if(currentState>12){             currentState=-11;         }         else if(currentState<-11){             currentState=12;         }         if(currentState<=12&&currentState>=1)             zone="东"+currentState+"区";         else             zone="西"+(1-currentState)+"区";         g2d.drawString(zone,170,50);      }     class Task extends TimerTask {           public void run() {               calendar = new GregorianCalendar();               hourTemp=currentState>0?(currentState-8):(currentState-1);             hour = calendar.get(Calendar.HOUR)+hourTemp;               minute = calendar.get(Calendar.MINUTE);               second = calendar.get(Calendar.SECOND);              a_sec = second * 2 * Math.PI / 60;             a_min = minute * 2 * Math.PI / 60 + a_sec / 60;             a_hour = hour * 2 * Math.PI / 12 + a_min / 12;             // 计算时、分、秒针的末端位置             xSecond=320+(int)(110*Math.sin(a_sec));             ySecond=240-(int)(110*Math.cos(a_sec));             xMinute=320+(int)(90 *Math.sin(a_min));             yMinute=240-(int)(90 *Math.cos(a_min));             xHour=  320+(int)(70 *Math.sin(a_hour));             yHour=  240-(int)(70 *Math.cos(a_hour));             xSecond1=320-(int)(22*Math.sin(a_sec));             ySecond1=240+(int)(22*Math.cos(a_sec));             xMinute1=320-(int)(15*Math.sin(a_min));             yMinute1=240+(int)(15*Math.cos(a_min));             xHour1  =320-(int)(5 *Math.sin(a_hour));             yHour1  =240+(int)(5 *Math.cos(a_hour));             repaint();           }       }   } // //Clock.java import javax.swing.*; public class Clock{      public static void main(String[] args) {          JFrame frame=new JFrame("Clock");    //创建图文框          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          frame.getContentPane().add(new ClockPanel()); //添加面板          frame.setVisible(true);          frame.setSize(640,480);              } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计1081个文字,预计阅读时间需要5分钟。

如何用Java编写一个模拟时钟表盘的程序?

以下是对原文的简化

原文:本文实例为某大家分享了Java实现时钟盘的具体代码,供大家参考。内容主要包括:设计并实现一个模拟时钟功能的程序。程序中应显示时针、分针和秒针,同时以数字形式显示‘当前时间’。

简化后:本文分享Java编写的时钟盘代码,供参考。内容涉及设计模拟时钟程序,显示时针、分针、秒针及当前时间数字。

本文实例为大家分享了java实现时钟表盘的具体代码,供大家参考,具体内容如下

设计并实现一个模拟时钟功能的应用程序。程序中应显示时针、分针和秒针,并同时以数字形式显示当前时间。

实现结果:

源代码如下:

如何用Java编写一个模拟时钟表盘的程序?

//ClockPanel.java import javax.swing.*; import java.util.Calendar;   import java.util.GregorianCalendar;   import java.util.Timer;   import java.util.TimerTask;   import java.text.SimpleDateFormat; import java.util.Locale;   import java.awt.*; import java.awt.event.*; public class ClockPanel extends JPanel{     private GregorianCalendar calendar;     private JButton btn;     private JButton btn2;     private int currentState=8;      private String zone;     private int hourTemp;     final int X=320, Y=240, R=120;   // 圆心坐标,半径     private int xPos,yPos;     private int hour,minute,second;      private int xHour,yHour,xMinute,yMinute,xSecond,ySecond;//表针位置(大端)     private int xHour1,yHour1,xMinute1,yMinute1,xSecond1,ySecond1;//表针位置(小端)     private double a_sec,a_min ,a_hour;//角度     ClockPanel() {   // 创建定时器对象         Timer t = new Timer();           Task task = new Task();           t.schedule(task, 0, 1000);          setLayout(new BorderLayout(10,20));          btn=new JButton("时区  上");         btn2=new JButton("时区 下");         btn.setBorder(BorderFactory.createRaisedBevelBorder());         btn2.setBorder(BorderFactory.createRaisedBevelBorder());         btn.setBackground(Color.green);         btn2.setBackground(Color.green);         btn.addActionListener(new ButtonListener());          btn2.addActionListener(new ButtonListener());          add(btn,BorderLayout.WEST);          add(btn2,BorderLayout.EAST);      }     //相关事件处理     private class ButtonListener implements ActionListener {         public void actionPerformed(ActionEvent event) {                 if (event.getSource()==btn)                 currentState++;             if (event.getSource()==btn2)                 currentState--;         }     }     public void paintComponent(Graphics g){          super.paintComponent(g);          double alfa;    //所画点对应的角度         Graphics2D g2d=(Graphics2D)g;         BasicStroke bstroke=new BasicStroke(1.0f);         BasicStroke bstroke2=new BasicStroke(2.0f);         BasicStroke bstroke3=new BasicStroke(3.0f);         g2d.setStroke(bstroke2);         for(int i=0;i<=360;i+=6)  {             alfa=Math.toRadians(i);  //角度用弧度表示             xPos=X+(int)(R*Math.cos(alfa));   // x坐标             yPos=Y-(int)(R*Math.sin(alfa));   // y坐标             int xBegin=320+(int)(144*Math.sin(alfa));             int yBegin=240-(int)(144*Math.cos(alfa));             int xEnd=320+(int)(159*Math.sin(alfa));             int yEnd=240-(int)(159*Math.cos(alfa));             g2d.setColor(Color.BLACK);             g2d.drawLine(xBegin,yBegin,xEnd,yEnd);             g2d.setColor(Color.RED);             switch(i){  // 写时钟数字刻度                 case 0: g2d.drawString("3", xPos,yPos);                         break;                 case 90: g2d.drawString("12", xPos,yPos);                         break;                 case 180: g2d.drawString("9", xPos,yPos);                         break;                 case 270: g2d.drawString("6",xPos,yPos);                         break;                   }             if(i%30==0){                 g2d.drawLine(xBegin,yBegin,xEnd,yEnd);             }         }         g2d.setColor(Color.BLACK);         g2d.setStroke(bstroke3);         g2d.drawLine(X, Y, xHour,yHour);    // 画时针         g2d.drawLine(X, Y, xHour1,yHour1);           g2d.setColor(Color.BLUE);         g2d.setStroke(bstroke2);         g2d.drawLine(X, Y, xMinute,yMinute);    // 画分针         g2d.drawLine(X, Y, xMinute1,yMinute1);         g2d.setColor(Color.RED);         g2d.setStroke(bstroke);         g2d.drawLine(X, Y, xSecond,ySecond);    // 画秒针         g2d.drawLine(X, Y, xSecond1,ySecond1);         //表盘中心点1         g2d.drawOval(317,237,6,6);          g2d.fillOval(317,237,6,6);         //表盘中心点2         g2d.setColor(Color.BLACK);         g2d.drawOval(319,238,4,4);          g2d.fillOval(319,238,4,4);         //表盘中心圆环         g2d.setColor(Color.ORANGE);         g2d.drawOval(300,220,40,40);          g2d.setColor(Color.black);         g2d.drawString("15010140079",290,376);          GregorianCalendar gre=new GregorianCalendar();          SimpleDateFormat dateforamt1=new SimpleDateFormat("yyyy年MM月dd日E");         //SimpleDateFormat dateforamt2=new SimpleDateFormat("H时m分s秒");         g2d.setColor(Color.black);         g2d.setFont(new Font("SAN_SERIF",Font.BOLD,20));          g2d.drawString(dateforamt1.format(gre.getTime()),250,50);         g2d.drawString(hour+"时"+minute+"分"+second+"秒",260,430);         //时区判断         if(currentState>12){             currentState=-11;         }         else if(currentState<-11){             currentState=12;         }         if(currentState<=12&&currentState>=1)             zone="东"+currentState+"区";         else             zone="西"+(1-currentState)+"区";         g2d.drawString(zone,170,50);      }     class Task extends TimerTask {           public void run() {               calendar = new GregorianCalendar();               hourTemp=currentState>0?(currentState-8):(currentState-1);             hour = calendar.get(Calendar.HOUR)+hourTemp;               minute = calendar.get(Calendar.MINUTE);               second = calendar.get(Calendar.SECOND);              a_sec = second * 2 * Math.PI / 60;             a_min = minute * 2 * Math.PI / 60 + a_sec / 60;             a_hour = hour * 2 * Math.PI / 12 + a_min / 12;             // 计算时、分、秒针的末端位置             xSecond=320+(int)(110*Math.sin(a_sec));             ySecond=240-(int)(110*Math.cos(a_sec));             xMinute=320+(int)(90 *Math.sin(a_min));             yMinute=240-(int)(90 *Math.cos(a_min));             xHour=  320+(int)(70 *Math.sin(a_hour));             yHour=  240-(int)(70 *Math.cos(a_hour));             xSecond1=320-(int)(22*Math.sin(a_sec));             ySecond1=240+(int)(22*Math.cos(a_sec));             xMinute1=320-(int)(15*Math.sin(a_min));             yMinute1=240+(int)(15*Math.cos(a_min));             xHour1  =320-(int)(5 *Math.sin(a_hour));             yHour1  =240+(int)(5 *Math.cos(a_hour));             repaint();           }       }   } // //Clock.java import javax.swing.*; public class Clock{      public static void main(String[] args) {          JFrame frame=new JFrame("Clock");    //创建图文框          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          frame.getContentPane().add(new ClockPanel()); //添加面板          frame.setVisible(true);          frame.setSize(640,480);              } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。