📄 clock.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import java.util.concurrent.*;
import java.lang.*;
public class Clock {
public static void main(String[] args){
Date me = new Date();
System.out.println(me.getHours());
long s = new Date().getTime();
System.out.println(s);
ClockTestFrame frame = new ClockTestFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class ClockTestFrame extends JFrame {
public ClockTestFrame(){
JLabel titleLabel;
titleLabel = new JLabel(new ImageIcon(".\\background.jpg"));
add(titleLabel, BorderLayout.CENTER);
setTitle("小型模拟时钟");
DocumentListener listener = new ClockFieldListener();
JPanel panel = new JPanel();
Date your = new Date();
int i = your.getHours();
panel.add(new JLabel("小时:"));
hourField = new JTextField( Integer.toString(i),3);
panel.add(hourField);
hourField.getDocument().addDocumentListener(listener);
panel.add(new JLabel("分钟:"));
minuteField = new JTextField(Integer.toString(your.getMinutes()),3);
panel.add(minuteField);
minuteField.getDocument().addDocumentListener(listener);
panel.add(new JLabel("秒:"));
secondField = new JTextField(Integer.toString(your.getSeconds()),3);
panel.add(secondField);
secondField.getDocument().addDocumentListener(listener);
add(panel,BorderLayout.SOUTH);
clock = new ClockPanel();
add(clock,BorderLayout.CENTER);
pack();
}
public void setClock(){
try{
int hours = Integer.parseInt(hourField.getText().trim());
int minutes = Integer.parseInt(minuteField.getText().trim());
int second = Integer.parseInt(secondField.getText().trim());
clock.setTime(hours,minutes,second);
}
catch (NumberFormatException e){}
}
public static final int DEFAULT_WIDTH = 600;
public static final int DEFAULT_HEIGHT = 600;
private JTextField hourField;
private JTextField minuteField;
private JTextField secondField;
private ClockPanel clock;
private class ClockFieldListener implements DocumentListener{
public void insertUpdate(DocumentEvent event){setClock();}
public void removeUpdate(DocumentEvent event){setClock();}
public void changedUpdate(DocumentEvent event){}
}
}
class ClockPanel extends JPanel{
public ClockPanel(){
setPreferredSize(new Dimension(2*RADIUS + 1,2*RADIUS+1));
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
Ellipse2D circle = new Ellipse2D.Double(0,0,2*RADIUS,2*RADIUS);
g2.draw(circle);
double hourAngle = Math.toRadians(90-360*minutes/(12*60));
drawHand(g2,hourAngle,HOUR_HAND_LENGTH);
double minuteAngle = Math.toRadians(90-360*minutes/60);
drawHand(g2,minuteAngle,MINUTE_HAND_LENGTH);
double secondAngle = Math.toRadians(90-360*minutes);
drawHand(g2,secondAngle,SECOND_HAND_LENGTH);
}
public void drawHand(Graphics2D g2,double angle,double handLength){
Point2D end = new Point2D.Double(
RADIUS + handLength * Math.cos(angle),
RADIUS + handLength * Math.sin(angle));
Point2D center = new Point2D.Double(RADIUS,RADIUS);
g2.draw(new Line2D.Double(center,end));
}
public void setTime(int h,int m,int s){
minutes = h *60+m;
second = minutes*60+s;
repaint();
}
private double minutes = 0;
private double second = 0;
private int RADIUS = 100;
private double MINUTE_HAND_LENGTH = 0.8*RADIUS;
private double HOUR_HAND_LENGTH = 0.6*RADIUS;
private double SECOND_HAND_LENGTH = 1.0*RADIUS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -