📄 clockanimation.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 + -