时钟类---swing画图、Timer、JFrame用法示例

1、运行结果

2、源代码如下:

package demo.others;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimerTask;

import javax.swing.*;

/**
 * 时钟类
 */
public class Clock extends JFrame {
	// 画时钟的面板
	private paintPanel clock = new paintPanel();
	// 定时器
	private java.util.Timer timer = new java.util.Timer();
	// 显示时间的label
	JLabel messageLabel = new JLabel("", SwingConstants.CENTER);

	public Clock() {
		setTitle("时钟");
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// this.setLocationRelativeTo(null);
		this.setSize(400, 400);

		add(clock);
		messageLabel.setForeground(Color.RED);
		messageLabel.setFont(new Font("Courier", Font.BOLD, 18));
		add(messageLabel, BorderLayout.SOUTH);

		// 定时器执行任务
		timer.schedule(new TimerTask() {
			@Override
			public void run() {
				clock.setCurrentTime();// 设置为当前时间
				messageLabel.setText(clock.getHour() + ":" + clock.getMinute() + ":" + clock.getSecond() + '\n');
				repaint();
			}
		}, 0, 1000);

	}

	public static void main(String[] args) {
		new Clock();
	}

	private class paintPanel extends JPanel {
		private int hour, minute, second;

		public paintPanel() {
			setCurrentTime();
		}

		// 设置时钟为当前时间
		private void setCurrentTime() {
			Calendar calendar = new GregorianCalendar();
			hour = calendar.get(Calendar.HOUR_OF_DAY);
			minute = calendar.get(Calendar.MINUTE);
			second = calendar.get(Calendar.SECOND);
		}

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			int xCenter = getWidth() / 2;
			int yCenter = getHeight() / 2;

			// 计算半径
			int radius = (int) (Math.min(this.getWidth(), this.getHeight()) * 0.8 * 0.5);
			// 画圆
			g.drawOval(xCenter - radius, yCenter - radius, radius * 2, radius * 2);

			// 画钟面上显示的数字
			g.drawString("12", xCenter - 6, yCenter - radius + 12);
			g.drawString("3", xCenter + radius - 12, yCenter + 4);
			g.drawString("6", xCenter - 4, yCenter + radius - 8);
			g.drawString("9", xCenter - radius + 4, yCenter + 6);

			// 画时针、分针、秒针
			g.drawLine(xCenter, yCenter, (int) (xCenter + radius * 0.8 * Math.sin(second * 2 * Math.PI / 60)), (int) (yCenter - radius * 0.8 * Math.cos(second * 2 * Math.PI / 60)));
			g.drawLine(xCenter, yCenter, (int) (xCenter + radius * 0.6 * Math.sin(minute * 2 * Math.PI / 60)), (int) (yCenter - radius * 0.6 * Math.cos(minute * 2 * Math.PI / 60)));
			g.drawLine(xCenter, yCenter, (int) (xCenter + radius * 0.4 * Math.sin((hour + minute / 60.0) * 2 * Math.PI / 12)), (int) (yCenter - radius * 0.4
					* Math.cos((hour + minute / 60.0) * 2 * Math.PI / 12)));
		}

		public int getHour() {
			return hour;
		}

		public int getMinute() {
			return minute;
		}

		public int getSecond() {
			return second;
		}
	}
}


 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用`javax.swing.Timer`来实现记时功能。`Timer`Swing组件库中的一个定时器,用于在指定的时间间隔内执行某个任务。 使用`Timer`实现记时功能的步骤如下: 1. 创建一个`javax.swing.Timer`对象,并设置时间间隔和动作监听器。时间间隔指定定时器的触发时间,动作监听器则指定每次定时器触发时执行的代码。 2. 调用`start()`方法启动定时器。 3. 在动作监听器中编写相应的代码来实现记时功能。 下面是一个简单的记时器示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TimerExample extends JFrame implements ActionListener { private JLabel timeLabel; private Timer timer; private int seconds; public TimerExample() { super("Timer Example"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 100); setLayout(new FlowLayout()); // 创建一个标签来显示计时器的时间 timeLabel = new JLabel("Time: 0 seconds"); add(timeLabel); // 创建一个定时器对象,每隔1秒触发一次 timer = new Timer(1000, this); seconds = 0; // 启动定时器 timer.start(); } // 定时器动作监听器 public void actionPerformed(ActionEvent e) { seconds++; timeLabel.setText("Time: " + seconds + " seconds"); } public static void main(String[] args) { new TimerExample().setVisible(true); } } ``` 在这个例子中,我们创建了一个`JLabel`标签来显示计时器的时间,然后创建了一个定时器对象`timer`,并设置了时间间隔为1秒,并将动作监听器设置为当前对象。在动作监听器中,每次定时器触发时,将计时器的时间加1秒,并更新标签的显示内容。 注意:定时器的时间间隔单位是毫秒。在上面的例子中,我们设置时间间隔为1000毫秒,即1秒。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值