用JAVA实现一个时钟
2021/4/11 12:26:14
本文主要是介绍用JAVA实现一个时钟,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
用JAVA实现一个时钟
用图形库绘制表盘,然后用事件处理机制刷新窗口,反复重绘,让表针转动起来
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.geom.*; import java.awt.geom.Line2D.Double; import java.math.*; import java.time.LocalTime; public class MyClock { public static void main(String[] args) { // TODO Auto-generated method stub ActionListener listener = new TimerClock(); Timer t = new Timer(1000, listener); t.start(); //System.exit(0); } } class ClockWindow extends JFrame { ClockWindow() { add(new ClockInfo()); pack(); } } class ClockInfo extends JComponent { private static final int DEFAULT_WIDTH = 500; private static final int DEFAULT_HEIGHT = 500; public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.draw(new Ellipse2D.Double(50.0, 50.0, 400.0, 400.0)); //圆心为250, 250 //绘制小时刻度 g2.setPaint(Color.red); double r1 = 190, r2 = 200; double cx = 250.0, cy = 250.0; for(double i = 0; i < 2.0 * Math.PI; i += (Math.PI / 6.0)) { double lx, ly, rx, ry; lx = r1 * Math.sin(i); ly = r1 * Math.cos(i); rx = r2 * Math.sin(i); ry = r2 * Math.cos(i); g2.draw(new Line2D.Double(cx + lx, cy - ly, cx + rx, cy - ry)); } //绘制分钟刻度 r1 = 195.0; for(double i = 0; i < 2.0 * Math.PI; i += (Math.PI / 30.0)) { double lx, ly, rx, ry; lx = r1 * Math.sin(i); ly = r1 * Math.cos(i); rx = r2 * Math.sin(i); ry = r2 * Math.cos(i); g2.draw(new Line2D.Double(cx + lx, cy - ly, cx + rx, cy - ry)); } //绘制指针 double hour = LocalTime.now().getHour() * Math.PI / 6.0; double minute = LocalTime.now().getMinute() * Math.PI / 30.0; double second = LocalTime.now().getSecond() * Math.PI / 30.0; //时针 g2.setPaint(Color.black); g2.setStroke(new BasicStroke(4.0f)); g2.draw(new Line2D.Double(cx, cy, cx + 120.0 * Math.sin(hour), cy - 120.0 * Math.cos(hour))); //分针 g2.setPaint(Color.green); g2.setStroke(new BasicStroke(2.0f)); g2.draw(new Line2D.Double(cx, cy, cx + 140.0 * Math.sin(minute), cy - 140.0 * Math.cos(minute))); //秒针 g2.setPaint(Color.red); g2.setStroke(new BasicStroke(1.0f)); g2.draw(new Line2D.Double(cx, cy, cx + 160.0 * Math.sin(second), cy - 160.0 * Math.cos(second))); //文字 Font f = new Font("Serif", Font.PLAIN, 30);//逻辑字体 g2.setFont(f); g2.setColor(Color.orange); int h = LocalTime.now().getHour(); int m = LocalTime.now().getMinute(); int s = LocalTime.now().getSecond(); g2.drawString("" + h + ":" + m + ":" + s,10,50); } public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); } } class TimerClock implements ActionListener { ClockWindow frame; TimerClock() { frame = new ClockWindow(); frame.setTitle("MyClock"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub frame.repaint(); } }
这篇关于用JAVA实现一个时钟的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Java创意资料:新手入门的创意学习指南
- 2024-11-25JAVA对接阿里云智能语音服务资料详解:新手入门指南
- 2024-11-25Java对接阿里云智能语音服务资料详解
- 2024-11-25Java对接阿里云智能语音服务资料详解
- 2024-11-25JAVA副业资料:新手入门及初级提升指南
- 2024-11-25Java副业资料:入门到实践的全面指南
- 2024-11-25Springboot应用的多环境打包项目实战
- 2024-11-25SpringBoot应用的生产发布项目实战入门教程
- 2024-11-25Viite多环境配置项目实战:新手入门教程
- 2024-11-25Vite多环境配置项目实战入门教程