自己编写的Java Swing 时钟 比较繁琐 请指教
来源:互联网 发布:python 性能测试脚本 编辑:程序博客网 时间:2024/05/22 12:56
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Timer;
public class ClockTest {
public static void main(String[] args) {
ClockFrame cf = new ClockFrame();
cf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cf.setVisible(true);
}
}
class ClockFrame extends JFrame {
private static final long serialVersionUID = 1L;
private ClockPanel panel;
private Calendar calendar;
public ClockFrame() {
setTitle("Clock");
setResizable(false);
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screen = kit.getScreenSize();
int screenX = screen.width;
int screenY = screen.height;
setLocation(screenX / 3,screenY / 3);
ActionListener listener = new ActionListener(){
public void actionPerformed(ActionEvent e) {
calendar = getClock();
String h = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY));
String m = String.valueOf(calendar.get(Calendar.MINUTE));
String s = String.valueOf(calendar.get(Calendar.SECOND));
TextPanel tp = new TextPanel(h,m,s);
add(tp,BorderLayout.NORTH);
panel = new ClockPanel(h,m,s);
add(panel,BorderLayout.CENTER);
pack();
}
};
new Timer(1000,listener).start();
}
public Calendar getClock() {
Calendar calendar = Calendar.getInstance();
return calendar;
}
}
class TextPanel extends JPanel {
private static final long serialVersionUID = 1L;
private JTextField hourField;
private JTextField minuteField;
private JTextField secondField;
public TextPanel(String h,String m,String s) {
setBackground(Color.WHITE);
add(new JLabel("Hour:"));
hourField = new JTextField(h,3);
hourField.setEditable(false);
add(hourField);
add(new JLabel("Minute:"));
minuteField = new JTextField(m,3);
minuteField.setEditable(false);
add(minuteField);
add(new JLabel("Second:"));
secondField = new JTextField(s,3);
secondField.setEditable(false);
add(secondField);
}
}
class ClockPanel extends JPanel {
private static final long serialVersionUID = 1L;
private double seconds = 0;
private double minutes = 0;
private double hours = 0;
private int RADIUS = 100;
private double SECOND_HAND_LENGTH = 0.8 * RADIUS;
private double MINUTE_HAND_LENGTH = 0.8 * RADIUS;
private double HOUR_HAND_LENGTH = 0.7 * RADIUS;
private int centerX = 0;
private int centerY = 0;
public ClockPanel(String h,String m,String s) {
setBackground(Color.BLACK);
hours = Double.parseDouble(h);
minutes = Double.parseDouble(m);
seconds = Double.parseDouble(s);
setPreferredSize(new Dimension(2 * RADIUS + 100,2 * RADIUS + 100));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D gs = (Graphics2D)g;
centerX = this.getWidth() / 2;
centerY = this.getHeight() / 2;
gs.setColor(Color.GREEN);
gs.drawString("MAN 表", centerX - 20, centerY - RADIUS / 2);
gs.drawString("MADE IN CHINA", centerX - 40, centerY + RADIUS / 2);
gs.setColor(Color.WHITE);
for(double nlLoop = 0; nlLoop <= 2; nlLoop = nlLoop + 0.1) {
Ellipse2D circle = new Ellipse2D.Double(
centerX - RADIUS + 15 + nlLoop,
centerY - RADIUS + 15 + nlLoop,
2 * (RADIUS - 15),
2 * (RADIUS - 15));
gs.draw(circle);
}
for(double nlLoop = 0; nlLoop <= 2; nlLoop = nlLoop + 0.1) {
Ellipse2D circle = new Ellipse2D.Double(
centerX - RADIUS - 9 + nlLoop,
centerY - RADIUS - 9 + nlLoop,
2 * (RADIUS + 9),
2 * (RADIUS + 9));
gs.draw(circle);
}
String[] timer = {"Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ","Ⅹ","Ⅺ","Ⅻ"};
gs.setColor(Color.RED);
int gX = centerX - 3;
int gY = centerY - RADIUS + 5;
for(int i = 0; i < 12; i ++) {
int x = (int) (gX + RADIUS * Math.sin(2 * Math.PI * (i + 1) / 12));
int y = (int) (gY + RADIUS * (1.0 - Math.cos(2 * Math.PI * (i + 1) / 12)));
gs.drawString(timer[i], x, y);
}
double secondAngle = Math.toRadians(360 * seconds / 60);
drawHand(gs,secondAngle,SECOND_HAND_LENGTH,"s");
double minuteAngle = Math.toRadians(360 * (minutes + seconds / 60) / 60);
drawHand(gs,minuteAngle,MINUTE_HAND_LENGTH,"m");
double hourAngle = Math.toRadians(360 * (hours - 12) / 12 + 360 * minutes / (60 * 12));
drawHand(gs,hourAngle,HOUR_HAND_LENGTH,"h");
}
private void drawHand(Graphics2D gc,double angle,double hand,String l) {
Point2D center = new Point2D.Double(centerX,centerY);
Point2D end = new Point2D.Double(
centerX + hand * Math.sin(angle),
centerY - hand * Math.cos(angle));
if(l.equals("h")) {
gc.setColor(Color.RED);
} else if(l.equals("m")) {
gc.setColor(Color.green);
} else if(l.equals("s")) {
gc.setColor(Color.BLUE);
}
gc.draw(new Line2D.Double(center,end));
}
}
- 自己编写的Java Swing 时钟 比较繁琐 请指教
- 自己写的java 2048,请大家指教
- 用Verilog编写的4位数值比较器,输出端波形不对,请高手指教一二,多谢!!!
- Java编写的时钟
- 自己的作品(1)(截图),请多多指教
- 自己的作品(2)(截图),请多多指教
- 一个比较繁琐的导航
- 初级java学习小结----不对的地方还请指教
- 初学的,请多指教
- 最近比较闲,外加想敦促自己学习,所以来准备写博客了,请多指教
- 关于LinkedList和ArrayList 插入元素的性能比较疑惑,知道的请指教......
- 自己重新写的KeUserModeCallBack 例子,比网上的代码改进很多,请大家指教!
- 看VC孙鑫的 自己一点小心得 不对的请指教
- 自己写的一种仿qq留言,评论的简单实现方式。请多指教
- 原创】自己重新写的KeUserModeCallBack 例子,比网上的代码改进很多,请大家指教!
- 自己写的回调函数的注册与使用例子,请多指教
- 自己实现的my_strtok函数,不妥的地方请各位多多指教
- 请大神指教,自己设计的给任意整数排序的程序
- 应用级集群系统的设计
- 需要去做的
- CObject类
- lucene整理3 -- 排序、过滤、分词器
- 求助——求助
- 自己编写的Java Swing 时钟 比较繁琐 请指教
- 使用iexpress制作控件本地安装程序
- SuperMap IS.NET项目互联网发布IP设置
- Clutter使用的问题总结
- lucene整理4 -- 各种Query
- 一个小程序重新透视C语言Switch语句
- 从今天开始
- 转]EBS中客户化表结构的设计原则
- VC tab control 使用简单例子