`
cutesunshineriver
  • 浏览: 201276 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用Draw2d画一个静止的时钟

阅读更多
package org.autumn.draw2d.example;

import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Ellipse;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.GridLayout;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Polyline;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * 
 * 用Draw2d画一个静止的时钟
 * 
 * @author sunny
 * 
 */
public class Clock {

	/**
	 * 圆半径
	 */
	private static final int RADIUS = 100;

	/**
	 * 时钟与窗体的间隔距离
	 */
	private static final int MARGIN = 20;

	/**
	 * 时钟上的小时数
	 */
	private static final int HOURS = 12;

	/**
	 * 时钟上的分钟数
	 */
	private static final int MINUTES = 60;

	/**
	 * 小时的刻度
	 */
	private static final int LEN_OF_HOUR = 10;

	/**
	 * 分钟的刻度
	 */
	private static final int LEN_OF_MINUTE = 5;

	public static void main(String[] args) {
		Shell shell = new Shell();
		shell.setText("Clock");
		shell.setSize(3 * RADIUS, 3 * RADIUS);
		shell.setLayout(new FillLayout());

		IFigure panel = new Figure();
		FigureCanvas fc = new FigureCanvas(shell);
		fc.setContents(panel);
		fc.getViewport().setContentsTracksHeight(true);
		fc.getViewport().setContentsTracksWidth(true);
		fc.setLayoutData(new GridData(GridData.FILL_BOTH));
		GridLayout gl = new GridLayout();
		gl.marginWidth = MARGIN;
		gl.marginHeight = MARGIN;
		panel.setLayoutManager(gl);

		// 画圆
		Ellipse ellipse = new Ellipse();
		ellipse.setFill(true);
		ellipse.setBackgroundColor(ColorConstants.white);
		ellipse.setBounds(new Rectangle(0, 0, 2 * RADIUS, 2 * RADIUS));
		panel.add(ellipse);

		// 时钟
		Polyline hour = new Polyline();
		hour.setForegroundColor(ColorConstants.red);
		hour.addPoint(new Point((RADIUS + MARGIN), (RADIUS / 10 * 3 + MARGIN)));
		hour.addPoint(new Point((RADIUS + MARGIN), (RADIUS + MARGIN)));
		hour.setLineWidthFloat(5f);
		ellipse.add(hour);

		// 分钟
		Polyline minute = new Polyline();
		minute.setForegroundColor(ColorConstants.green);
		minute.addPoint(new Point((RADIUS + MARGIN), (RADIUS + MARGIN)));
		minute.addPoint(new Point((RADIUS * 2 + MARGIN - LEN_OF_HOUR), (RADIUS + MARGIN)));
		minute.setLineWidthFloat(3f);
		ellipse.add(minute);

		// 秒钟
		Polyline second = new Polyline();
		second.setForegroundColor(ColorConstants.gray);
		second.addPoint(new Point((RADIUS + MARGIN), (RADIUS + MARGIN)));
		second.addPoint(new Point((RADIUS / 2 + MARGIN), (RADIUS + MARGIN + getEdge(RADIUS / 2))));
		second.setLineWidthFloat(2f);
		ellipse.add(second);

		// 刻度
		for (int i = 1; i <= MINUTES; i++) {
			int len = LEN_OF_MINUTE;
			float lineWidth = 1f;
			if (i % (MINUTES / HOURS) == 0) {
				len = LEN_OF_HOUR;
				lineWidth = 2f;
			}

			int relative = RADIUS + MARGIN;
			double angle = (2 * Math.PI / MINUTES) * i;
			Point from = new Point((relative + RADIUS * Math.sin(angle)), (relative + RADIUS * Math.cos(angle)));
			Point to = new Point((relative + (RADIUS - len) * Math.sin(angle)), (relative + (RADIUS - len)
					* Math.cos(angle)));

			Polyline line = new Polyline();
			line.setForegroundColor(ColorConstants.black);
			line.addPoint(from);
			line.addPoint(to);
			line.setLineWidthFloat(lineWidth);
			ellipse.add(line);
		}

		shell.open();
		Display display = Display.getDefault();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	private static double getEdge(int i) {
		return Math.sqrt(RADIUS * RADIUS - i * i);
	}

}




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

相关推荐

    Draw2d画线例子

    总之,"Draw2d画线例子"提供了一个实践Draw2d库的平台,通过这个例子,你可以学习到如何在Eclipse环境下使用Draw2d创建动态的曲线图形。这将对开发基于Eclipse的图形编辑工具或可视化应用具有极大的帮助。

    用draw2d画uml图源码实例

    在这个"用draw2d画uml图源码实例"中,我们看到开发者利用GEF和Draw2D库创建了一个简单的UML类图绘制工具。下面将详细解释这两个技术以及如何结合它们来实现UML图的绘制。 1. **Draw2D**: Draw2D是Java Swing或 SWT...

    Java中如何使用Draw2D和SWT绘图

    在Java编程中,Draw2D库是一个强大的工具,它允许开发者使用SWT(Standard Widget Toolkit)来创建复杂的图形用户界面,特别适用于绘制图形和图表。Draw2D是Eclipse项目的一部分,它提供了一套丰富的API,可以方便地...

    Draw2D 使用例子

    在"GEF Draw2D 使用例子"中,提供的"test"文件可能是包含一个或多个示例项目的压缩包。这些示例通常会展示如何使用Draw2D和GEF来创建图形界面,包括以下关键知识点: 1. **模型-视图-控制器(MVC)**:理解GEF的MVC...

    Draw2d js图形库

    Draw2d.js是一个开源的JavaScript图形库,专为在Web应用程序中绘制和操作二维图形而设计。这个库特别适用于创建流程图、UML类图、网络拓扑图和其他复杂的图表。它提供了丰富的API和功能,使得开发人员可以轻松地创建...

    在Java中使用Draw2D和SWT绘图的源码

    Draw2D是Eclipse项目的组成部分,是一个基于Java的2D图形库,它提供了低级别的几何形状操作和渲染能力。Draw2D允许开发者创建、编辑和显示各种形状,如线条、曲线、矩形、椭圆以及自定义图形。它支持基本的几何变换...

    eclipse draw2d实例大全 源码

    eclipse draw2d实例大全 org.eclipse.draw2d.examples.cg org.eclipse.draw2d.examples.connections org.eclipse.draw2d.examples.graph org.eclipse.draw2d.examples.hittest org.eclipse.draw2d.examples.images ...

    Draw2d 教程 很详细

    Draw2d是一个强大的图形绘制库,常用于在Java环境中创建二维图形用户界面。这个"Draw2d教程"可能包含了从基础到高级的各种概念和技术,帮助学习者深入理解如何利用Draw2d来构建交互式图形应用。以下是教程可能涵盖的...

    draw2d 绘制图形教程

    在计算机编程领域,可视化和交互式界面设计是不可或缺的部分,而draw2d库正是这样一个专注于二维图形绘制的工具。draw2d库,全称为Draw2D,是一个开源的JavaScript库,它允许开发者在HTML5的Canvas元素上创建复杂的...

    Draw2d Programmer Guide

    Graphics是一个抽象类,它允许Draw2D封装SWT的GC(Graphics Context),以实现扩展功能和性能优化。例如,Graphics支持压栈和出栈操作,这可以保存和恢复当前的绘制状态,包括颜色、透明度、笔触等设置,从而避免...

    使用Draw2d做的流程图工具

    Draw2d是Java图形库Swing或 SWT中的一个子库,主要用于创建2D图形和复杂的图形用户界面,尤其适用于绘制流程图、图表和其他图形结构。它提供了丰富的图形绘制功能,如线条、形状、文本和图像的处理,以及交互式操作...

    draw2d 示例代码

    例如,开发一个流程审批系统,可以使用Draw2D创建流程图,动态展示任务流转过程;在电子设计自动化领域,Draw2D则可用来构建电路原理图,支持用户交互式编辑。 总结,Eclipse Draw2D 提供了丰富的图形绘制和交互...

    swt总结draw2d绘图

    Draw2D是SWT中的一个子项目,专门用于在SWT组件上进行图形绘制,提供了一组丰富的API,使得开发者可以创建出复杂的2D图形用户界面。本总结将深入探讨SWT和Draw2D在绘图方面的知识。 1. SWT基础: SWT是一个与操作...

    Draw2D documents and samples

    Draw2D,全称为Eclipse Draw2D,是Eclipse项目中的一部分,它提供了一套丰富的图形绘制和交互处理的API,主要用于在Java环境中创建2D图形用户界面。这个强大的工具库使得开发者能够轻松地在SWT(Standard Widget ...

    draw2d_Demo_code

    在`Draw2DLayoutExample.java`这个示例代码中,我们可以看到如何使用Draw2D库来构建一个动态的图形布局。这个例子可能涉及到以下几个关键知识点: 1. **图形对象创建**:Draw2D允许开发者创建各种形状,如矩形、...

    GEF/Draw2D入门例子

    总结来说,GEF/Draw2D是一个强大的工具集,对于需要创建图形化界面或图形编辑工具的开发者来说,它是理想的解决方案。通过深入学习和实践,你可以充分利用这两个库的功能,创建出功能丰富、用户体验优秀的图形编辑...

    Draw2D UML Diagram

    Draw2D UML Diagram是一个用于创建UML类图的工具,通过源码驱动,能够帮助开发者高效地绘制出清晰、准确的类图,便于团队沟通和代码实现。本文将深入探讨Draw2D UML Diagram的使用,以及与其相关的源码解析。 首先...

    draw2d.js v2.9.1最新版本附带完整demo

    Draw2D.js是一个专门用于创建和编辑二维图形的JavaScript库,特别适用于绘制工作流图。最新版本v2.9.1为开发者提供了更多功能和优化,使其在前端应用中的表现更加出色。本文将详细介绍Draw2D.js的核心特性、使用方法...

    org.eclipse.draw2d.examples

    【标题】"org.eclipse.draw2d.examples" 是一个与Eclipse Draw2D相关的开发实例集合,主要用于展示和学习如何在Eclipse环境中使用Draw2D库进行图形界面编程。 【描述】提到的内容暗示了这个工程可能存在一定的兼容...

    Draw2d API (html版)

    Draw2d API Draw2d是一个宿主在SWT Composite控件中的轻量级的构件(widge)系统。一个Draw2d应用程序由一个 SWT Composite控件, 一个轻量级系统, 以及其内容(figures)组成。

Global site tag (gtag.js) - Google Analytics