📄 clock.java
字号:
package MyCalender;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.event.*;import javax.swing.*;import javax.swing.Timer;public class Clock extends JFrame implements ActionListener { Timer timer; int x, y, old_X, old_Y, r, x0, y0, w, h, ang; int sdo, mdo, hdo, old_M, old_H; final double RAD = Math.PI / 180.0; // -------------------------------------------------------------------------------------------- public static void main(String[] args) { Clock cl = new Clock(); } // -------------------------------------------------------------------------------------------- /* 实现ActionListener接口里面的方法 */ public void actionPerformed(ActionEvent e) { timer.restart(); } // -------------------------------------------------------------------------------------------- /** * 方法说明:构造器,显示窗体,并添加了一个秒表 */ public Clock() { super("Clock");/* 用窗体标题构造 */ getContentPane().setLayout(null); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setBackground(new Color(0, 0, 192)); /* 设置背景颜色 */ setSize(418, 394); /* 钟表窗口的大小 */ show(); /* 显示窗口 */ int delay = 1000; // 窗体添加事件监听,监听秒表的触发 ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent evt) { repaint(); }// Timer将要触发的任务 }; new Timer(delay, taskPerformer).start();/* 启动Timer记时器 */ } /*************************************************************************** * 方法说明:绘制图形 <br> * 输入参数:Graphics g <br> * 返回类型:void <br> * 重写系统的paint()方法 **************************************************************************/ public void paint(Graphics g) { this.setBackground(Color.BLUE); Insets insets = getInsets(); System.out.println("insets left"+insets.left); System.out.println("insets top"+insets.top); int L0 = (insets.left) / 2, T0 = (insets.top) / 2;// int L0 = 15, T0 = 2; int hh, mm, ss; String st; h = getSize().height; // 绘制圆形 g.setColor(Color.white); g.drawOval(L0 + 30, T0 + 30, h - 60, h - 60); g.drawOval(L0 + 32, T0 + 32, h - 64, h - 64); r = h / 2 - 30; x0 = 30 + r - 5 + L0; y0 = 30 + r - 5 - T0; ang = 60; for (int i = 1; i <= 12; i++) { x = (int) ((r + 10) * Math.cos(RAD * ang) + x0); y = (int) ((r + 10) * Math.sin(RAD * ang) + y0); g.drawString("" + i, x, h - y); ang -= 30; } x0 = 30 + r + L0; y0 = 30 + r + T0; // 获取时间 Calendar now = Calendar.getInstance(); hh = now.get(Calendar.HOUR_OF_DAY);// 小时 mm = now.get(Calendar.MINUTE);// 分钟 ss = now.get(Calendar.SECOND);// 秒 g.setColor(Color.pink); g.fillRect(L0, T0, 60, 28);// 填充的矩形 g.setColor(Color.blue); if (hh < 10) st = "0" + hh; else st = "" + hh; if (mm < 10) st = st + ":0" + mm; else st = st + ":" + mm; if (ss < 10) st = st + ":0" + ss; else st = st + ":" + ss; g.drawString(st, L0, T0 + 25); // 计算时间和图形的关系 sdo = 90 - ss * 6; mdo = 90 - mm * 6; hdo = 90 - hh * 30 - mm / 2; // 擦除秒针 if (old_X > 0) { g.setColor(getBackground()); g.drawLine(x0, y0, old_X, (h - old_Y)); } else { old_M = mdo; old_H = hdo; } // 绘制秒针 g.setColor(Color.yellow); x = (int) ((r - 8) * Math.cos(RAD * sdo) + x0); y = (int) ((r - 8) * Math.sin(RAD * sdo) + y0) - 2 * T0; g.drawLine(x0, y0, x, (h - y)); old_X = x; old_Y = y; // 擦除分针和时针 if (mdo != old_M) { line(g, old_M, (int) (r * 0.7), getBackground()); old_M = mdo; } if (hdo != old_H) { line(g, old_H, (int) (r * 0.5), getBackground()); old_H = hdo; } // 绘制分针 line(g, mdo, (int) (r * 0.7), Color.green); // 绘制时针 line(g, hdo, (int) (r * 0.5), Color.red); } // end paint /** * 方法说明:绘制线,用于绘制时针和分针 输入参数: 返回类型: */ // -------------------------------------------------------------------------------------------- public void line(Graphics g, int t, int n, Color c) { int[] xp = new int[4]; int[] yp = new int[4]; xp[0] = x0; yp[0] = y0; xp[1] = (int) ((n - 10) * Math.cos(RAD * (t - 4)) + x0); yp[1] = h - (int) ((n - 10) * Math.sin(RAD * (t - 4)) + y0); xp[2] = (int) (n * Math.cos(RAD * t) + x0); yp[2] = h - (int) (n * Math.sin(RAD * t) + y0); xp[3] = (int) ((n - 10) * Math.cos(RAD * (t + 4)) + x0); yp[3] = h - (int) ((n - 10) * Math.sin(RAD * (t + 4)) + y0); g.setColor(c); g.fillPolygon(xp, yp, 4); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -