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库的平台,通过这个例子,你可以学习到如何在Eclipse环境下使用Draw2d创建动态的曲线图形。这将对开发基于Eclipse的图形编辑工具或可视化应用具有极大的帮助。
在这个"用draw2d画uml图源码实例"中,我们看到开发者利用GEF和Draw2D库创建了一个简单的UML类图绘制工具。下面将详细解释这两个技术以及如何结合它们来实现UML图的绘制。 1. **Draw2D**: Draw2D是Java Swing或 SWT...
在Java编程中,Draw2D库是一个强大的工具,它允许开发者使用SWT(Standard Widget Toolkit)来创建复杂的图形用户界面,特别适用于绘制图形和图表。Draw2D是Eclipse项目的一部分,它提供了一套丰富的API,可以方便地...
在"GEF Draw2D 使用例子"中,提供的"test"文件可能是包含一个或多个示例项目的压缩包。这些示例通常会展示如何使用Draw2D和GEF来创建图形界面,包括以下关键知识点: 1. **模型-视图-控制器(MVC)**:理解GEF的MVC...
Draw2d.js是一个开源的JavaScript图形库,专为在Web应用程序中绘制和操作二维图形而设计。这个库特别适用于创建流程图、UML类图、网络拓扑图和其他复杂的图表。它提供了丰富的API和功能,使得开发人员可以轻松地创建...
Draw2D是Eclipse项目的组成部分,是一个基于Java的2D图形库,它提供了低级别的几何形状操作和渲染能力。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是一个强大的图形绘制库,常用于在Java环境中创建二维图形用户界面。这个"Draw2d教程"可能包含了从基础到高级的各种概念和技术,帮助学习者深入理解如何利用Draw2d来构建交互式图形应用。以下是教程可能涵盖的...
在计算机编程领域,可视化和交互式界面设计是不可或缺的部分,而draw2d库正是这样一个专注于二维图形绘制的工具。draw2d库,全称为Draw2D,是一个开源的JavaScript库,它允许开发者在HTML5的Canvas元素上创建复杂的...
Graphics是一个抽象类,它允许Draw2D封装SWT的GC(Graphics Context),以实现扩展功能和性能优化。例如,Graphics支持压栈和出栈操作,这可以保存和恢复当前的绘制状态,包括颜色、透明度、笔触等设置,从而避免...
Draw2d是Java图形库Swing或 SWT中的一个子库,主要用于创建2D图形和复杂的图形用户界面,尤其适用于绘制流程图、图表和其他图形结构。它提供了丰富的图形绘制功能,如线条、形状、文本和图像的处理,以及交互式操作...
例如,开发一个流程审批系统,可以使用Draw2D创建流程图,动态展示任务流转过程;在电子设计自动化领域,Draw2D则可用来构建电路原理图,支持用户交互式编辑。 总结,Eclipse Draw2D 提供了丰富的图形绘制和交互...
Draw2D是SWT中的一个子项目,专门用于在SWT组件上进行图形绘制,提供了一组丰富的API,使得开发者可以创建出复杂的2D图形用户界面。本总结将深入探讨SWT和Draw2D在绘图方面的知识。 1. SWT基础: SWT是一个与操作...
Draw2D,全称为Eclipse Draw2D,是Eclipse项目中的一部分,它提供了一套丰富的图形绘制和交互处理的API,主要用于在Java环境中创建2D图形用户界面。这个强大的工具库使得开发者能够轻松地在SWT(Standard Widget ...
在`Draw2DLayoutExample.java`这个示例代码中,我们可以看到如何使用Draw2D库来构建一个动态的图形布局。这个例子可能涉及到以下几个关键知识点: 1. **图形对象创建**:Draw2D允许开发者创建各种形状,如矩形、...
总结来说,GEF/Draw2D是一个强大的工具集,对于需要创建图形化界面或图形编辑工具的开发者来说,它是理想的解决方案。通过深入学习和实践,你可以充分利用这两个库的功能,创建出功能丰富、用户体验优秀的图形编辑...
Draw2D UML Diagram是一个用于创建UML类图的工具,通过源码驱动,能够帮助开发者高效地绘制出清晰、准确的类图,便于团队沟通和代码实现。本文将深入探讨Draw2D UML Diagram的使用,以及与其相关的源码解析。 首先...
Draw2D.js是一个专门用于创建和编辑二维图形的JavaScript库,特别适用于绘制工作流图。最新版本v2.9.1为开发者提供了更多功能和优化,使其在前端应用中的表现更加出色。本文将详细介绍Draw2D.js的核心特性、使用方法...
【标题】"org.eclipse.draw2d.examples" 是一个与Eclipse Draw2D相关的开发实例集合,主要用于展示和学习如何在Eclipse环境中使用Draw2D库进行图形界面编程。 【描述】提到的内容暗示了这个工程可能存在一定的兼容...
Draw2d API Draw2d是一个宿主在SWT Composite控件中的轻量级的构件(widge)系统。一个Draw2d应用程序由一个 SWT Composite控件, 一个轻量级系统, 以及其内容(figures)组成。