文档章节

在SWT窗口中使用Draw2D绘制任意曲线

双子座
 双子座
发布于 2011/08/09 19:25
字数 306
阅读 1299
收藏 7

首先在工程中导入Draw2D包。

建立一个Java Project之后,在Package Explorer中右击工程名,选择下图所示菜单:

这样,工程下会出现一个META-INF文件夹,双击打开其中的.MF文件,选择Dependencies选项,在Required Plug-ins中单击Add...按钮,输入*.draw2d,添加draw2d后保存改.MF文件。

这样就可以使用Draw2D绘图了。

在工程下新建两个.java文件,分别如下:

DrawLineListener.java

import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MouseEvent;
import org.eclipse.draw2d.MouseListener;
import org.eclipse.draw2d.MouseMotionListener;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.swt.SWT;
public class DrawLineListener extends MouseMotionListener.Stub implements MouseListener{
	PolylineConnection connection=null;
	IFigure figure;
	public void addDrawLineListener(IFigure figure){
		
		this.figure=figure;
		figure.addMouseMotionListener(this);
		figure.addMouseListener(this);
	}
	@Override
	public void mousePressed(MouseEvent me) {
		connection=new PolylineConnection();
		connection.setLineStyle(SWT.LINE_DOT);
		connection.removeAllPoints();
		connection.addPoint(me.getLocation());
		figure.add(connection);
	}
	@Override
	public void mouseReleased(MouseEvent me) {
		connection.setLineStyle(SWT.LINE_CUSTOM);
	}
	@Override
	public void mouseDoubleClicked(MouseEvent me) {
		// TODO Auto-generated method stub
		
	}
	public void mouseDragged(MouseEvent e) {
		connection.addPoint(e.getLocation());
	}
}

DrawLineFrame.java

import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.Panel;
import org.eclipse.draw2d.XYLayout;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class DrawLineFrame {

	protected Shell shell;
	public static void main(String[] args) {
		try {
			DrawLineFrame window = new DrawLineFrame();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}
	protected void createContents() {
		shell = new Shell();
		shell.setSize(400, 300);;
		shell.setText("画线演示");
		Panel panel = new Panel();
		panel.setLayoutManager(new XYLayout());
		DrawLineListener drawLine=new DrawLineListener();
		drawLine.addDrawLineListener(panel);
		LightweightSystem lws = new LightweightSystem(shell);
		lws.setContents(panel);
	}
}

运行结果如下:

上图中松开鼠标后,虚线变成实线。

© 著作权归作者所有

双子座
粉丝 540
博文 78
码字总数 61009
作品 0
南京
程序员
私信 提问
加载中

评论(1)

guhanjie
guhanjie
这个功能终于实现了,太牛了,学习!
基于Eclipse GEF关键技术的分析与研究

基于Eclipse GEF关键技术的分析与研究(2007-03-31 16:54:28) 2.Draw2D技术 轻量级框架:轻量级框架[LightweightSystem类]把SWT和Draw2D 连接起来,它把鼠标事件和画图事件从SWT 转发给Draw2...

zhenghuazhi
2010/04/22
834
0
GEF(Graphical Editor Framework) Eclipse项目入门系列(1)---概述

GEF的英文全称是Graphical Editor Framework。GEF的中文书籍在市面上面基本没有的。但是很多的Eclipse的二次开发项目可能却需要用到Eclipse的GEF的相关技术。GEF是一个Eclipse的项目之一,著...

chancein007
2014/12/24
0
0
GEF(Graphical Editor Framework) Eclipse项目入门系列(2)---Draw2D开发环境的搭建

GEF(Graphical Editor Framework) Eclipse项目入门系列(1)---概述中,我们已经提到了Draw2D框架是GEF框架的重要组成部分。那么Draw2D的环境如何搭建起来呢?其实很简单,去Eclipse的官方网...

chancein007
2014/12/24
0
0
使用ChemDraw Std 14如何绘制曲线

ChemDraw可以说是世界上最好的化学绘图工具。它能轻松绘制有机材料、有机金属、聚合材料和生物聚合物(包括氨基酸、肽、DNA 及 RNA 序列等),以及处理立体化学等高级形式。chemdraw14.0序列...

学术研究软件
2016/04/11
58
0
绘制与可视化数据的存储库--plot

plot 是绘制与可视化数据的存储库,它提供了一个API,用于在Go中建立和绘制plot。 gonum/plot 被分成几个开发包: plot包提供简单的界面布局的接口,并绘制它提供了原函数。 绘图仪包提供了一...

匿名
2016/09/18
471
0

没有更多内容

加载失败,请刷新页面

加载更多

全面兼容IE6/IE7/IE8/FF的CSS HACK写法

浏览器市场的混乱,给设计师造成很大的麻烦,设计的页面兼容完这个浏览器还得兼容那个浏览器,本来ie6跟ff之间的兼容是很容易解决的。加上个ie7会麻烦点,ie8的出现就更头疼了,原来hack ie...

前端老手
24分钟前
5
0
常用快递电子面单批量打印api接口对接demo-JAVA示例

目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打...

程序的小猿
28分钟前
6
0
Yii 框架中rule规则必须搭配验证函数才能使用

public $store_id;public $user_id;public $page;public $limit;public $list;public $mch_list;public $cart_id;public $is_community;public $shop_id;public $cart_typ......

chenhongjiang
30分钟前
4
0
Flutter使用Rammus实现阿里云推送

前言: 最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之...

EmilyWu
30分钟前
43
0
Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

短网址顾名思义就是使用比较短的网址代替很长的网址。维基百科上面的解释是这样的: 短网址又称网址缩短、缩短网址、URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短...

阿里巴巴云原生
45分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部