java时钟面板clock
2015-09-09 20:12
525 查看
时钟面板程序可以直接用了
背景图片:
百度云链接:http://pan.baidu.com/s/1dD9AWnB
//ClockPanel.java import static java.util.Calendar.HOUR; import static java.util.Calendar.MILLISECOND; import static java.util.Calendar.MINUTE; import static java.util.Calendar.SECOND; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Composite; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; import java.awt.event.MouseEvent; import java.util.Calendar; import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; /** * 时钟面板 * */ public class ClockPanel extends JPanel implements Runnable { // 3个指针的粗细 private static final BasicStroke HOURS_POINT_WIDTH = new BasicStroke(5); private static final BasicStroke MINUETES_POINT_WIDTH = new BasicStroke(3); private static final BasicStroke SEC_POINT_WIDTH = new BasicStroke(2); private ImageIcon background; private int centerX; // 中心坐标 private int centerY; private final static int secLen = 60; // 指针长度 private final static int minuesLen = 55; // 指针长度 private final static int hoursLen = 36; // 指针长度 private Point fp; // 拖曳窗体之前的鼠标位置 /** * 构造方法 */ public ClockPanel() { setOpaque(false); background = new ImageIcon(getClass().getResource("Core.png")); int iconWidth = background.getIconWidth(); centerX = iconWidth / 2; int iconHeight = background.getIconHeight(); centerY = iconHeight / 2; setPreferredSize(new Dimension(532, 286)); new Thread(this).start(); } @Override public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g.create(); Composite composite = g2.getComposite(); g2.setComposite(AlphaComposite.SrcOver.derive(0.6f)); Calendar calendar = Calendar.getInstance(); drawClock(g2, calendar);// 绘制时钟 g2.setComposite(composite); g2.drawImage(background.getImage(), 0, 0, this); g2.dispose(); } private void drawClock(Graphics2D g2, Calendar calendar) { int millisecond = calendar.get(MILLISECOND); int sec = calendar.get(SECOND); int minutes = calendar.get(MINUTE); int hours = calendar.get(HOUR); double secAngle = (60 - sec) * 6 - (millisecond / 150); // 秒针角度 int minutesAngle = (60 - minutes) * 6;// 分针角度 int hoursAngle = (12 - hours) * 360 / 12 - (minutes / 2);// 时针角度 // 计算秒针、分针、时针指向坐标 int secX = (int) (secLen * Math.sin(Math.toRadians(secAngle))); int secY = (int) (secLen * Math.cos(Math.toRadians(secAngle))); int minutesX = (int) (minuesLen * Math .sin(Math.toRadians(minutesAngle))); int minutesY = (int) (minuesLen * Math .cos(Math.toRadians(minutesAngle))); int hoursX = (int) (hoursLen * Math.sin(Math.toRadians(hoursAngle))); int hoursY = (int) (hoursLen * Math.cos(Math.toRadians(hoursAngle))); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 分别绘制时针、分针、秒针 g2.setColor(Color.BLACK); g2.setStroke(HOURS_POINT_WIDTH); g2.drawLine(centerX, centerY, centerX - hoursX, centerY - hoursY); g2.setStroke(MINUETES_POINT_WIDTH); g2.setColor(new Color(0x2F2F2F)); g2.drawLine(centerX, centerY, centerX - minutesX, centerY - minutesY); g2.setColor(Color.RED); g2.setStroke(SEC_POINT_WIDTH); g2.drawLine(centerX, centerY, centerX - secX, centerY - secY); // 绘制3个指针的中心园 g2.fillOval(centerX - 5, centerY - 5, 10, 10); } @Override public void run() { try { while (true) { if (getRootPane() != null) { JFrame main = (JFrame) getRootPane().getParent(); if (main != null && main.isVisible()) { EventQueue.invokeLater(new Runnable() { public void run() { ClockPanel.this.repaint();//每隔1秒绘制clock } }); } } Thread.sleep(100); } } catch (InterruptedException e) { e.printStackTrace(); } } protected void do_this_mouseDragged(final MouseEvent e) { JDialog frame = (JDialog) getRootPane().getParent(); Point point = e.getLocationOnScreen(); frame.setLocation(point.x - fp.x, point.y - fp.y); } protected void do_this_mousePressed(final MouseEvent e) { fp = e.getPoint(); } }
//使用时钟面板的组件中 //添加时钟面板,实例化面板对象就好 JPanel panel = new ClockPanel(); panel.setBounds(377, 54, 151, 142); getContentPane().add(panel);
背景图片:
百度云链接:http://pan.baidu.com/s/1dD9AWnB
相关文章推荐
- java内存分配 常量池详解
- Java中安全终止超时线程的方案
- Java习题1
- Struts2的常量详解开发配置
- spring MethodInterceptor 与 反射
- Java简单彩票系统(35选7)
- 1001--Java 多线程 并发编程
- Spring Data中手动实现Repository方法
- struts2的constant配置
- struts2之constant 讲解
- Struts2 常用的常量配置
- java 排序算法---插入排序
- Spring MVC介绍
- Java ClassLoader
- struts2处理.do后缀的请求
- 浅谈java单例模式——优点以及为什么使用到synchronized
- Java环境变量的搭建
- Java泛型中的标记符含义
- java上传图片放大(小图等比放大,大图等比裁剪)
- Java quartz 定时任务