`

一个简单的时钟程序

阅读更多
public class Sample2 {
	private Color black = Display.getCurrent().getSystemColor(SWT.COLOR_BLACK);
	private Color white = Display.getCurrent().getSystemColor(SWT.COLOR_WHITE);
	private Color yellow = Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW);
	private Color red = Display.getCurrent().getSystemColor(SWT.COLOR_RED);
	private Color blue = Display.getCurrent().getSystemColor(SWT.COLOR_BLUE);
	private Color green = Display.getCurrent().getSystemColor(SWT.COLOR_GREEN);

	Timer timer;
	
	int x,y,x0,y0,r,h,olds_x,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,ss,mm,hh,old_m,old_h,ang;
	final double RAD = Math.PI/180;   //

	public static void main(String[] args) {
		Display display = new Display();
		Shell shell = new Shell(display);
		new Sample2().createArea(shell);
//		shell.pack();
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	private void createArea(Shell shell) {
		shell.setText("Sample");
		shell.setLayout(new GridLayout());
		shell.setSize(400, 400);
//		parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
		Composite container = new Composite(shell, SWT.BORDER);
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 1;	gridLayout.marginLeft = 10;	gridLayout.marginRight = 10;
		gridLayout.marginHeight = 10;	gridLayout.marginWidth = 10;	gridLayout.verticalSpacing=0;
		container.setLayout(gridLayout);
		GridData gridData = new GridData(GridData.FILL_BOTH);
		container.setLayoutData(gridData);
		
		final Canvas drawingCanvas = new Canvas(container, SWT.BORDER);
		gridData = new GridData(GridData.FILL_BOTH);
		drawingCanvas.setLayoutData(gridData);
		drawingCanvas.setBackground(black);
		addPaintListener(drawingCanvas);
		
		int delay = 1000;
		ActionListener drawClock = new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				Display.getDefault().syncExec(new Runnable() {
					public void run() {
						if(drawingCanvas.isDisposed())
							return;
						drawingCanvas.redraw();
					}
				});
			}
		};
		timer = new Timer(delay,drawClock);
		timer.start() ;
	}
	
	protected void addPaintListener(Canvas drawingCanvas) {
		drawingCanvas.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent e) {
				e.gc.setForeground(white);
				Point size = ((Canvas) e.widget).getSize();
				int radius = (Math.min(size.x,size.y)-40)/2;
				Point center = new Point(size.x/2,size.y/2);
				e.gc.setLineCap(SWT.CAP_ROUND);
				e.gc.setLineWidth(3);
				//drawOval (int x, int y, int width, int height)
				e.gc.drawOval(center.x-radius, center.y-radius, 2*radius, 2*radius);
				
				e.gc.setLineWidth(1);
				e.gc.setForeground(red);
				
				e.gc.setForeground(yellow);
				
				//int radius = 
				x0=center.x; y0=center.y; r=radius; h=center.y + radius + 15;
				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);
		        	e.gc.drawString(""+i,x,h-y);
		        	ang-=30;
		        }
		        
		        Calendar now = new GregorianCalendar();
		        int nowh = now.get(Calendar.HOUR_OF_DAY );
		        int nowm = now.get(Calendar.MINUTE );
		        int nows = now.get(Calendar.SECOND );
		        String st;
		        if(nowh<10) st = "0"+nowh ; else st = ""+nowh;
		        if(nowm<10) st += ":0"+nowm; else st += ":"+nowm;
		        if(nows<10) st += ":0"+nows; else st += ":"+nows;
//		        System.out.println(st);
		        e.gc.setBackground(green);
		        e.gc.fillRectangle(0+4,0+4,50,14);
		        e.gc.setForeground(blue);
		        e.gc.drawString(st,0+5,0+5);
		        
		        ss = 90-nows*6;
		        mm = 90-nowm*6;
		        hh = 90-nowh*30-nowm/2;
		        x0=center.x; y0=center.y;
//		        g2D.setStroke(new BasicStroke(1.2f));
		        if(olds_x > 0) {
		        	e.gc.setForeground(black);
		        	e.gc.drawLine(x0,y0,olds_x,h-olds_y);
		        } else {
		             old_m = mm;
		             old_h = hh;
		        }
		        x = (int)(r*0.8*Math.cos(RAD*ss))+x0;
		        y = (int)(r*0.8*Math.sin(RAD*ss))+y0;
		        e.gc.setForeground(yellow);
		        e.gc.drawLine(x0,y0,x,h-y);
		        olds_x = x;
		        olds_y = y;
		        e.gc.setLineWidth(2);
		        if(old_m!=mm) {
		        	e.gc.setForeground(black);
		        	e.gc.drawLine(x0,y0,oldm_x,h-oldm_y);
		        }
		        x = (int)(r*0.6*Math.cos(RAD*mm))+x0;
		        y = (int)(r*0.6*Math.sin(RAD*mm))+y0;
		        e.gc.setForeground(green );
		        e.gc.drawLine(x0,y0,x,h-y);
		        oldm_x = x;
		        oldm_y = y;
		        old_m = mm;
		        e.gc.setLineWidth(3);
		        if(old_h!=hh) {
		        	e.gc.setForeground(black);
		        	e.gc.drawLine(x0,y0,oldh_x,h-oldh_y);
		        }
		        x = (int)(r*0.5*Math.cos(RAD*hh))+x0;
		        y = (int)(r*0.5*Math.sin(RAD*hh))+y0;
		        e.gc.setForeground(red );
		        e.gc.drawLine(x0,y0,x,h-y);
		        oldh_x = x;
		        oldh_y = y;
		        old_h = hh;
			}
		});
	}

}

 效果图:



 

感觉还行,是仿照书上的一个例子写的,书上使用swing实现的。

  • 大小: 23.2 KB
分享到:
评论

相关推荐

    简易时钟程序-VC6.0实现

    【简易时钟程序-VC6.0实现】 在编程领域,创建一个时钟程序是学习基础知识的常见练习。本项目是使用Visual C++ 6.0(简称VC6.0)开发的一个简单时钟程序,它能显示当前系统时间,并且实时更新。尽管这个程序非常...

    设计一个动态时钟程序,指针

    在本实验中,我们将设计一个动态时钟程序,利用Java的多线程特性来模拟时钟的指针移动。这个程序的核心在于理解和运用Java线程的相关知识点,包括线程的创建、调度、同步以及生命周期管理。以下是关于这些知识点的...

    C51单片机 一个简单的时钟程序

    本篇文章将详细讲解如何利用C51单片机编写一个简单的时钟程序,这对于初学者来说是一次很好的实践机会。 首先,理解8051单片机的架构至关重要。8051内含一个8位CPU、4KB的ROM(或EPROM)、128B的RAM、32个I/O引脚,...

    用C#编写的简单的时钟程序

    这个“用C#编写的简单的时钟程序”是为初学者设计的一个实例,旨在帮助他们更好地理解和掌握C#编程的基础知识。 首先,创建一个时钟程序涉及到的主要知识点包括: 1. **C#基础语法**:理解C#的基本结构,如类...

    基于51单片机电子时钟程序

    本资源是关于基于51单片机的电子时钟程序,旨在实现一个基本的电子时钟,显示小时和分钟,并以最后一位的小数点闪烁一次表示一秒。按下INT0键后显示日期。并在所设定的时间蜂铃器响5次以此为闹钟;按下INT1键后,可...

    简单时钟程序-clock.rar

    【标题】"简单时钟程序-clock.rar"是一个包含基本时钟功能的应用程序,可能是由一个初学者或爱好者创建的。这个项目可能旨在帮助开发者学习如何在编程中实现时间显示功能,或者是作为个人项目的初次尝试。 【描述】...

    mfc写的一个时钟小程序

    mfc写的一个时钟小程序

    指针式简易时钟程序

    在本文中,我们将深入探讨如何使用C++编程语言和Microsoft Foundation Classes (MFC)库来创建一个指针式简易时钟程序。MFC是微软提供的一套C++类库,它封装了Windows API,简化了Windows应用程序的开发。 首先,...

    最简单的时钟.rar

    "最简单的时钟.rar"这个压缩包文件似乎包含了一个简易时钟程序的相关资源。虽然描述内容重复,并没有提供额外信息,但我们可以从标题和标签中推测出一些IT相关的知识点。 首先,我们要理解“时钟”在计算机编程中的...

    基于AVR的简易时钟程序

    本项目"基于AVR的简易时钟程序"旨在为初学者提供一个理解嵌入式系统和AVR编程的基础平台。时钟程序是嵌入式系统中常见的应用,它通过内部的定时器/计数器来实现时间的精确测量和显示。 首先,我们需要了解AVR的...

    简单的电子时钟程序源码

    这个"简单的电子时钟程序源码"就是一个很好的学习实例,它使用了C#语言,并基于.Net 4.0框架的Winform平台构建。Winform是微软提供的一种用于开发桌面应用程序的用户界面框架,它允许开发者创建具有丰富图形界面的...

    用C语言编写的一个电子时钟程序

    这个是用C语言编写的 一个时钟电路的程序,软件仿真和硬件都通过,可以直接使用。。。

    java大作业 一个时钟程序

    【Java大作业——一个时钟程序】 在Java编程学习中,设计一个时钟程序是一项常见的实践任务,旨在帮助学生巩固面向对象编程的概念、线程处理以及用户界面设计。这个Java大作业可能涉及到以下几个核心知识点: 1. *...

    模拟时钟程序

    本篇文章将聚焦于如何使用Microsoft Foundation Classes (MFC)库来创建一个简单的模拟时钟程序,该程序能够实时显示当前时间,提升开发者对MFC的理解。 MFC是微软提供的一套C++类库,用于简化Windows应用程序开发。...

    一个小的java时钟程序

    在Java编程语言中,创建一个简单的时钟程序是一项常见的练习,可以帮助初学者更好地理解线程、GUI设计以及日期和时间处理。在这个项目中,我们有一个包含界面时钟的小型Java程序,它能够实时显示数字时间,包括小时...

    MFC指针式时钟程序

    通过以上步骤,一个简单的MFC指针式时钟程序就完成了。这个过程不仅涉及到了MFC的基本使用,也涵盖了Windows消息循环、定时器机制以及图形绘制等方面的知识。对于初学者来说,这个项目既具有实践性,又能够帮助理解...

    mfc编写的时钟程序

    在这个“mfc编写的时钟程序”中,我们主要探讨的是如何使用MFC框架来实现一个简单的桌面时钟应用。 1. **MFC框架介绍**: MFC提供了一系列预先定义的类,这些类代表了Windows操作系统的核心对象,如窗口、菜单、...

    51单片机时钟程序

    时钟程序是51单片机开发中的一个重要实践项目,它可以帮助开发者掌握基础的编程技巧和硬件控制能力。本文将深入探讨51单片机时钟程序的相关知识点。 首先,51单片机是Intel公司8051系列的CISC(复杂指令集计算)微...

    c++桌面时钟程序

    在本项目中,我们将探讨如何利用C++构建一个功能完备的桌面时钟程序,该程序不仅显示当前时间,还包含自定义logo以及闹钟功能。 首先,我们需要理解C++中的时间处理。在C++标准库中,`&lt;chrono&gt;`头文件提供了处理...

    MSP430时钟程序

    在时钟程序中,可能需要设置一个定时中断,定期更新LCD上的时间显示。 8. **LCD驱动编程**:1602 LCD的驱动编程包括初始化LCD、发送命令和数据、移动光标、清屏等功能。这些都需要了解LCD的指令集,并正确地在MSP...

Global site tag (gtag.js) - Google Analytics