JAVA程序设计(15.3)----- 图形用户界面GUI 制作挂钟

1.自动读取系统时间转换成挂钟 ,随系统时间走秒的

设置字体 JFrame加入各种组件  初始化并调整组件 2D画笔 双缓冲 监听器 Timer  大概就这些练习吧……

package com.lovo.homework3;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.text.DecimalFormat;
import java.util.Calendar;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

/**
 * 类:时钟~ 自动读取系统时间 并走秒
 * @author Abe
 *
 */
@SuppressWarnings("serial")
public class Clock extends JFrame implements ActionListener {
	private int[] timeNum = new int[3];
	private double[] radian = new double[3];
	private Timer timer;
	private String str = new String();
	private JLabel lbl;
	private Color[] color = { Color.red, Color.BLUE, Color.black };
	private Image offImage = new BufferedImage(400, 500,
			BufferedImage.TYPE_INT_RGB);// 双缓冲
	private JLabel[] lbls = new JLabel[4];

	public Clock() {
		this.setTitle("时钟");
		this.setSize(400, 500);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setLayout(null);

		timer = new Timer(200, this);
		lbl = new JLabel(str); // 显示数字时间
		lbl.setFont(new Font("Consolas", Font.PLAIN, 37));
		lbl.setBounds(120, 400, 400, 50);
		this.add(lbl);
		for (int i = 0; i < lbls.length; i++) { // 显示刻度盘的数字
			lbls[i] = new JLabel(0 + 3 * i + "");
			lbls[i].setFont(new Font("Consolas", Font.PLAIN, 25));
			this.add(lbls[i]);
		}
		lbls[0].setBounds(190, 50, 50, 50);
		lbls[1].setBounds(310, 170, 50, 50);
		lbls[2].setBounds(190, 285, 50, 50);
		lbls[3].setBounds(70, 170, 50, 50);
	}

	@Override
	public void paint(Graphics g) {
		Graphics newG = offImage.getGraphics();
		super.paint(newG);
		this.draw(newG);
		g.drawImage(offImage, 0, 0, 400, 500, null);
		timer.start();
	}

	public void draw(Graphics newG) {
		newG.setColor(Color.black);
		newG.drawOval(50, 70, 300, 300);// 外圆
		Graphics2D g2d = (Graphics2D) newG;

		for (int i = 0; i < timeNum.length; i++) { // 指针
			g2d.setStroke(new BasicStroke(1 + i * 2));
			g2d.setColor(color[i]);
			g2d.drawLine(200, 220,
					200 + (int) (Math.sin(radian[i]) * (120 - 20 * i)),
					220 - (int) (Math.cos(radian[i]) * (120 - 20 * i)));
		}
		for (int i = 0; i < 60; i++) { // 刻度盘
			Double radMark = 2 * Math.PI * i / 60;
			int j;
			if (i % 5 != 0) {
				g2d.setStroke(new BasicStroke(1));
				j = 145;
			} else {
				g2d.setStroke(new BasicStroke(5));
				j = 135;
			}
			g2d.drawLine(200 + (int) (Math.sin(radMark) * j),
					220 - (int) (Math.cos(radMark) * j),
					200 + (int) (Math.sin(radMark) * 145),
					220 - (int) (Math.cos(radMark) * 145));
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == timer) {
			Calendar cal = Calendar.getInstance(); // 读取系统时间
			this.timeNum[0] = cal.get(Calendar.SECOND);
			this.timeNum[1] = cal.get(Calendar.MINUTE);
			this.timeNum[2] = cal.get(Calendar.HOUR_OF_DAY);
			DecimalFormat df = new DecimalFormat("00");
			str = df.format(timeNum[2]) + ":" + df.format(timeNum[1]) + ":"
					+ df.format(timeNum[0]);
			lbl.setText(str);

			for (int i = 0; i < radian.length; i++) {	// 时间换算成弧度
				if (i < 2) {
					radian[i] = 2 * Math.PI * timeNum[i] / 60;
				} else {								//小时换算弧度时,加上分钟提供的弧度
					radian[i] = 2 * Math.PI
							* (timeNum[i] + timeNum[i - 1] / 60.0) / 12;
				}
			}
			repaint();
		}
	}

	public static void main(String[] args) {
		new Clock().setVisible(true);
	}
}
时间: 2024-08-04 19:35:46

JAVA程序设计(15.3)----- 图形用户界面GUI 制作挂钟的相关文章

JAVA程序设计(15.1)----- 图形用户界面GUI 制作红绿灯~

GUI  Graphics User Interrface图形化的用户界面,让用户通过点击鼠标就能完成想要做的事情: 主要是练习界面设置 界面布局 添加组件 设置组件 接口 重写 监听器 制作一个信号灯,点击下面的单选按钮 指定的信号灯亮起,代码如下: package com.lovo.homework1; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ItemEvent; import java.a

Java基础学习总结 -- 图形用户界面GUI(持更)

虽然目前Java算不上前端开发的主力,但是作为Java入门基础的一部分,学习Java的GUI编程还是有必要的,而且可以做出一些小且有趣的图形程序来提高学习热情.本篇学习总结均为一个Beginner的笔记与心得,如有描述不到或错误之处,敬请指正. 1. JavaGUI主要开发工具 -- Swing类库的诞生与功能 一个合格的Java Developer,不仅要掌握技术,还要有一定的Java历史背景知识储备.所以先简要介绍一下用于JavaGUI开发的主要类库:Swing. 在Java 1.0时代便有

图形用户界面 - GUI

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口) python常用: Tkinter PyQt wxPython 其中Tkinter为python内置库 原文地址:https://www.cnblogs.com/id19910408/p/8343658.html

黑马程序员——图形用户界面(GUI)总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 什么是GUI? GUI就是计算机通过图形化界面与用户产生的交互. 注意:Java提供的GUI对象都存储在Java.Awt和Java.Swing包中 GUI的体系结构 容器的布局管理器 FlowLayout(流式布局管理器) 从左到右的顺序排列 Panel的默认布局管理器 BorderLayout(边界布局管理器) 东南西北中顺序排列 Frame默认布局管理器 GirdLayout(网格布局管理

201671010128 2017-11-12《Java程序设计》之图形程序设计

一.基本概念 Java的抽象窗口工具箱(Abstract Window Toolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类. AWT库处理用户界面元素的方法:把图形元素的创建和行为委托给本地GUI工具箱进行处理. 应用AWT编写依赖于本地用户界面元素GUI会暴露出一些缺陷.例如,菜单.滚动条和文本域这些用户界面元素,在不同的平台上,操作行为上存在一些微妙的差异. Swing用户界面库是非基于对等体的GUI工具箱. Swing具有更丰富并且更方便的用户

图形用户界面GUI

1. 丰富的平台 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK平台,在linux上很流行. PyQt 使用Qt平台,跨平台. 2.wxpython 创建实例GUI 实例要求: 2.1 简单的示例程序: 1 2 3 >>> i

python基础教程总结11——图形用户界面GUI

1. 丰富的平台 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK平台,在linux上很流行. PyQt 使用Qt平台,跨平台. 2.wxpython 创建实例GUI 实例要求: 2.1 简单的示例程序: >>> import

Python中利用tkinter模块构建图形用户界面GUI

1 >>> from tkinter import *; 2 >>> root=Tk() 3 >>> myLabel=Label(root,text="Hello world!"); 4 >>> myLabel.grid() 5 >>> root.mainloop() 先使用from tkinter import *;导入tkinter模块,输入上面的代码,出项GUI界面如上:

第七周 项目一-图形用户界面(GUI)应用程序开发初体验

第一次 用vc++感觉很蒙 第一次在4408在舍友指导下做的 感觉不太好 今天来机房又做了一次 顺手了些 vc++开始的样子 简单操作后的样子 我添加的代码 我们想要的样子 学习心得: 我在许多同学身上看到了贺老师的影子,这是种很特殊的力量在引领者我们前进,我们需要她.