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

📄 clock.java

📁 java GUI使用实现的日历
💻 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 + -