⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clockanimation.java

📁 在十种技术中
💻 JAVA
字号:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Font;
import java.util.*;
import javax.swing.Timer;
public class ClockAnimation extends StillClock implements ActionListener{
    
    Timer timer=new Timer(1000,this);
    public ClockAnimation() {
        //StillClock p=new StillClock();
        //Timer timer=new Timer(1000,this);
        timer.start();
    }
    public void actionPerformed(ActionEvent e){
        setCurrentTime();
        repaint();
    }
    public static void main(String []arg){
        JFrame frame=new JFrame("ClockAnimation");
        ClockAnimation clock=new ClockAnimation();
        MessagePanel messagePanel=new MessagePanel(clock.getHour()+":"+clock.getMinute()+":"+clock.getSecond());
        messagePanel.setCentered(true);
        messagePanel.setForeground(Color.blue);
        messagePanel.setFont(new Font("Courier",Font.BOLD,16));
        
        frame.getContentPane().add(messagePanel);
        
        frame.getContentPane().add(clock,BorderLayout.SOUTH);
        //frame.getContentPane().add(clock);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200,200);
        frame.setVisible(true);
        
        
    }
    
}
class MessagePanel extends JPanel{
    private String message="";
    private int x=20;
    private int y=20;
    private boolean centered;
    private int interval=10;
    public MessagePanel(){}
    public MessagePanel(String message){
        this.message=message;
    }
    public String getMessage(){
        return message;
    }
    public void setMessage(String message){
        this.message=message;
    }
    public int getX(){
        return x;
    }
    public void setX(int x){
        this.x=x;
        repaint();
    }
    public int getY(){
        return y;
    }
    public void setY(int y){
        this.y=y;
        repaint();
    }
    public boolean isCentered(){
        return centered;
    }
    public void setCentered(boolean centered){
        this.centered=centered;
        repaint();
    }
    public int getInterval(){
        return interval;
    }
    public void setInterval(int interval){
        this.interval=x;
        repaint();
    }
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        if(centered){
            FontMetrics fm=g.getFontMetrics();
            int stringWidth=fm.stringWidth(message);
            int stringAscent=fm.getAscent();
            x=getWidth()/2-stringWidth/2;
            y=getHeight()/2+stringAscent/2;
        }
        g.drawString(message,x,y);
    }
    public void moveLeft(){
        x-=interval;
        repaint();
    }
    public void moveRight(){
        x+=interval;
        repaint();
    }
    public void moveUp(){
        y-=interval;
        repaint();
    }
    public void moveDown(){
        y+=interval;
        repaint();
    }
    public Dimension getPreferredSize(){
        return new Dimension(200,30);
    }
}
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(int second){
        this.second=second;
        repaint();
    }
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        int clockRadius=(int)(Math.min(getWidth(),getHeight())*0.5*0.8);
        int xCenter=getWidth()/2;
        int yCenter=getHeight()/2;
        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);
        
        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);
        
        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);
        
        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.green);
        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);
        }
        public Dimension getPreferredSize(){
            return new Dimension(200,200);
        }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -