• Java程序显示正在运行的时钟(timer类)



    (本程序主要来自Java语言程序设计(基础篇)(Y.Daniel Liang))

    类javax.swing.Timer是一个按照预定频率触发ActionEvent事件的源组件。一个Timer对象可以作为ActionEvent事件的源,监听器必须是ActionListener的实例并且要用Timer对象注册。利用给定的时延和监听器可以使用它唯一的构造方法创建Timer对象其中时延是两个事件行为之间间隔的毫秒数。可以使用addActionListener方法添加其他监听器,用setDelay方法调整时延。用start()方法开始,stop()方法停止。

    效果图

    首先是ClockAnimation类

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    
    public class ClockAnimation extends StillClock{
        public ClockAnimation(){
            //创建Timer对象
            Timer timer=new Timer(1000,new TimerLisener());
            timer.start();
        }
        private class TimerLisener implements ActionListener{
            //创建相关监听器
            public void actionPerformed(ActionEvent arg0) {
                setCurrentTime();
                repaint();
            }
        }
        
        public static void main(String[] args){
            JFrame frame = new JFrame("ClockAnimation");
            ClockAnimation clock=new ClockAnimation();
            frame.add(clock);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(200,200);
            frame.setVisible(true);
        }
    
    }

     StillClock类是(继承Jpanel):

    import java.awt.*;
    import java.util.*;
    import javax.swing.*;
    
    public class StillClock extends JPanel{
        private int hour;
        private int minute;
        private int second;
        
        public StillClock(){
            setCurrentTime();
        }
        
        public StillClock(int hour,int minute,int second){
            this.hour=hour;
            this.minute=minute;
            this.second=second;
        }
        
        public int getHour(){
            return hour;
        }
        
        public void setHour(int hour){
            this.hour=hour;
            repaint();
        }
        
        public int getMinute(){
            return minute;
        }
        public void setMinute(int minute){
            this.minute = minute;
            repaint();
        }
        public int getSecond(){
            return second;
        }
        public void setSecond(){
            this.second=second;
            repaint();
        }
        
        protected void paintComponent(Graphics g){
            
            super.paintComponent(g);
            
            int clockRadius=(int)(Math.min(getWidth(), getHeight())*0.4);//*0.8*0.5);
            int xCenter=getWidth()/2;
            int yCenter=getHeight()/2;
            //System.out.println(clockRadius);
            g.setColor(Color.black);
            g.drawOval(xCenter-clockRadius, yCenter-clockRadius, 2*clockRadius, 2*clockRadius);
            g.drawString("12", xCenter-5, yCenter-clockRadius+12);
            g.drawString("9", xCenter-clockRadius+3, yCenter+5);
            g.drawString("3", xCenter+clockRadius-10, yCenter+3);
            g.drawString("6", xCenter-3, yCenter+clockRadius-3);
            
            //draw second hand
            int sLength=(int)(clockRadius*0.8);
            int xSecond=(int)(xCenter+sLength*Math.sin(second*(2*Math.PI/60)));
            int ySecond=(int)(yCenter-sLength*Math.cos(second*(2*Math.PI/60)));
            g.setColor(Color.red);
            g.drawLine(xCenter, yCenter, xSecond, ySecond);
            
            //draw minute hand
            int mLength=(int)(clockRadius*0.65);
            int xMinute=(int)(xCenter+mLength*Math.sin(minute*(2*Math.PI/60)));
            int yMinute=(int)(yCenter-mLength*Math.cos(minute*(2*Math.PI/60)));
            g.setColor(Color.blue);
            g.drawLine(xCenter, yCenter, xMinute, yMinute);
            
            //draw hour hand
            int hLength=(int)(clockRadius*0.5);
            int xHour=(int)(xCenter+hLength*Math.sin((hour%12+minute/60.0)*(2*Math.PI/12)));
            int yHour=(int)(yCenter-hLength*Math.cos((hour%12+minute/60.0)*(2*Math.PI/12)));
            g.setColor(Color.black);
            g.drawLine(xCenter, yCenter, xHour, yHour);
        }
        
        public void setCurrentTime(){
            Calendar calendar = new GregorianCalendar();
            this.hour=calendar.get(Calendar.HOUR_OF_DAY);
            this.minute=calendar.get(Calendar.MINUTE);
            this.second=calendar.get(Calendar.SECOND);
        }
    }
  • 相关阅读:
    用mathematica求六元一次方程组且方程个数比变量个数少一个
    abaqus学习笔记-abaqus与umat调用基本原理
    abaqus UMAT二次开发能用fortran90吗?
    vba遗传算法之非一致性突变
    学习刘伟择优excel视频
    EXCEL中R1C1样式引用
    Oracle常见问题
    Oracle数据库 —— DML完结
    Bootstrap前端框架
    Jsoup学习笔记
  • 原文地址:https://www.cnblogs.com/redlight/p/2559595.html
Copyright © 2020-2023  润新知