欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一个简单的时钟程序

程序员文章站 2022-03-30 10:41:46
...
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实现的。

相关标签: Swing