java swt 画直线_在Java中使用Draw2D和SWT绘图

Draw2D 简介  Draw2D 是一个驻留在 SWT Composite 之上的轻量级窗口小部件系统。一个 Draw2D 实例 由一个 SWT Composite、一个轻量级系统及其内容的图形组成。图形 是 Draw2D 的构建块。关于 Draw2D API 的所有细节,可以从 Draw2D Developer’s Guide 的 Eclipse 帮助文件中找到。因为本文不打算成为一篇讲述 Draw2D 的教程,所以,为了简便起见,只要您了解 Draw2D API 可以帮助您在 SWT Canvas 上进行绘图就足够了。您可以直接使用一些标准的图形,比如 Ellipse、Polyline、RectangleFigure 和 Triangle,或者,您可以扩展它们来创建自己的图形。此外,一些容器图形,如 Panel,可以充当所有子图形的总容器。  Draw2D 有两个重要的包:org.eclipse.draw2d.geometry 和 org.eclipse.draw2d.graph,本文中使用了这两个包。org.eclipse.draw2d.geometry 包有一些有用的类,比如 Rectangle、Point 和 PointList,这些类都是自我解释的。另一个包 org.eclipse.draw2d.graph 开发人员使用的可能不是太多。这个包提供了一些重要的类,比如 DirectedGraph、Node、Edge、NodeList 和 EdgeList,这些类有助于创建图表。  在本文中,我将解释如何使用 Draw2D 编写代码,帮助您以图形的方式形象化您的数据。我将从一项技术的描述开始,该技术将位于某一范围内的数据值(比如,从 0 到 2048)按比例缩放成另一范围内的等效数据值(例如,从 0 到 100)。然后,我将举例说明如何绘制出任意个级数的 X-Y 坐标图,每个级数都包含一组数据元素。在学习了本文中的概念之后,就可以很容易地绘制其他类型的图表,比如饼图和条形图。   具体的绘图过程  步骤 1:您想绘制什么样的图形?  显然,您想以图形方式描绘来自数据源的数据。所以,您需要那些您想以图形形式形象化的数据。为了简便起见,我使用了一个名为 dataGenerator 的简单函数生成的数据,而不是从 XML 文件或其他一些数据源读取数据,该函数使用了一个 for(;;) 循环,并以数组列表的形式返回生成的值。 清单 1. 生成一些数据

private ArrayList dataGenerator() {

double series1[] = new double[5];

for(int i=0; i2048 / 1024 equals 2.

line 2---> 100 - 0 equals 100.

line 3---> 100 / 2 equals 50, which is the desired scaled value.

步骤 3:您想在哪儿进行绘图?  您还需要进行绘图的地方。可以通过扩展 Eclipse ViewPart 和使用 SWT Composite 来创建您自己的视图。此外,也可以使用从 main() 函数中调用的 SWT shell。  在扩展 Eclipse ViewPart 时,至少必须实现两个函数:createPartControl(Composite parent) 和 setFocus()。函数 createPartControl(Composite parent) 是在屏幕上绘制视图时自动调用的。您的兴趣只在所接收的 SWT Composite 上。因此,将它传递给某个类,然后通过对这个类进行编码来绘制图形。清单 3. 使用 Eclipse ViewPart 绘图

public class MainGraFixView extends ViewPart{

public void createPartControl(Composite parent) {

//create or get data in an arraylist

ArrayList seriesData = dataGenerator();

//instantiate a plotter, and provide data to it.

DirectedGraphXYPlotter dgXYGraph = new DirectedGraphXYPlotter(parent);

dgXYGraph.setData(seriesData);

dgXYGraph.plot(); //ask it to plot

}

public void setFocus() {

}

}

步骤 4;您需要绘制哪种图形?  一旦拥有了数据以及想用来绘制图形的区域,就必须确定您需要哪种类型的可视化。在本文中,我演示了如何编写代码来创建 X-Y 坐标图和线形图。一旦知道了绘制 X-Y 坐标图的技术,就应该能够绘制出其他图形,比如条形图和饼图。要想更多地了解 X-Y 坐标图,请参阅我为本文编写的 DirectedGraphXYPlotter 类(参见所附源代码中的 \src\GraFix\Plotters\DirectedGraphXYPlotter.java)。  步骤 5:创建自己的 X-Y 坐标图  X-Y 坐标图应该能够绘制出 2-D 飞机上的任意数量的级数线。每个级数线都应该以图形形式显示出引用 X 和 Y 引用线的那些级数中的每个点的位置。每个点都应该通过一条线连接到级数中的下一个点上。通过使用表示一个点和一条线的 Draw2D 图形,您应该能够创建这样一个坐标图。例如,为了表示一个点,我通过扩展 Ellipse 图形创建了一个 Dot 图形,并使用 PolylineConnection 图形来表示连接线。  DirectedGraphXYPlotter 类只有两个公共函数:setData(ArrayList seriesData) 和 plot()。函数 setData(ArrayList seriesData) 接受您想要以图形形式形象化的数据(参见步骤 1),而 plot() 函数则开始绘图。  一旦调用了 plot() 函数,就必须依次采用以下步骤:

采用一个 SWT Composite,并将 FigureCanvas 放在它之上。然后,将一个类似 Panel 的通用容器图放在画布上。

计算将要绘制的级数的数量,然后填充创建 DirectedGraphs 所需数量的 NodeLists 和 EdgeLists。

在 Panel 图上绘制 X 坐标轴和 Y 坐标轴。(参见所附源代码中 \src\GraFix\Figure 目录下的 XRulerBar.java 和 YRulerBar.java。)

创建和级数一样多的 DirectedGraphs,以便进行绘图。

在 Panel 图上绘制点和连接线,同时采用步骤 d 中创建的 DirectedGraphs 中的图形数据。

最后,通过提供 Panel 图来设置画布的内容,其中包括到目前为止您已经准备好的所有的点和连接线。  在以下代码中:

第 6-11 行代码对应于上述的步骤 a。 第 14 行,即函数 populateNodesAndEdges(),对应于上述的步骤 b。

第 16 行,即函数 drawAxis(),对应于上述的步骤 c。

第 17 行、第 18 行和第 19 行对应于上述的步骤 d 和步骤 e。

第 20 行对应于上述的步骤 f。 清单 4. plot() 函数

1. public void plot(){

2. //if no place to plot, or no data to plot, return.

3. if(null==_parent || null==_seriesData)

4. return;

5.

6. Composite composite = new Composite(_parent, SWT.BORDER);

7. composite.setLayout(new FillLayout());

8. FigureCanvas canvas = new FigureCanvas(composite);

9.

10. Panel contents = new Panel();//A Panel is a general purpose container figure

11. contents.setLayoutManager(new XYLayout());

12. initializeSpan(contents.getClientArea());

13.

14. populateNodesAndEdges();

15.

16. drawAxis(contents);

17. for(int i=0; iDraw2D 简介  Draw2D 是一个驻留在 SWT Composite 之上的轻量级窗口小部件系统。一个 Draw2D 实例 由一个 SWT Composite、一个轻量级系统及其内容的图形组成。图形 是 Draw2D 的构建块。关于 Draw2D API 的所有细节,可以从 Draw2D Developer’s Guide 的 Eclipse 帮助文件中找到。因为本文不打算成为一篇讲述 Draw2D 的教程,所以,为了简便起见,只要您了解 Draw2D API 可以帮助您在 SWT Canvas 上进行绘图就足够了。您可以直接使用一些标准的图形,比如 Ellipse、Polyline、RectangleFigure 和 Triangle,或者,您可以扩展它们来创建自己的图形。此外,一些容器图形,如 Panel,可以充当所有子图形的总容器。  Draw2D 有两个重要的包:org.eclipse.draw2d.geometry 和 org.eclipse.draw2d.graph,本文中使用了这两个包。org.eclipse.draw2d.geometry 包有一些有用的类,比如 Rectangle、Point 和 PointList,这些类都是自我解释的。另一个包 org.eclipse.draw2d.graph 开发人员使用的可能不是太多。这个包提供了一些重要的类,比如 DirectedGraph、Node、Edge、NodeList 和 EdgeList,这些类有助于创建图表。  在本文中,我将解释如何使用 Draw2D 编写代码,帮助您以图形的方式形象化您的数据。我将从一项技术的描述开始,该技术将位于某一范围内的数据值(比如,从 0 到 2048)按比例缩放成另一范围内的等效数据值(例如,从 0 到 100)。然后,我将举例说明如何绘制出任意个级数的 X-Y 坐标图,每个级数都包含一组数据元素。在学习了本文中的概念之后,就可以很容易地绘制其他类型的图表,比如饼图和条形图。   具体的绘图过程  步骤 1:您想绘制什么样的图形?  显然,您想以图形方式描绘来自数据源的数据。所以,您需要那些您想以图形形式形象化的数据。为了简便起见,我使用了一个名为 dataGenerator 的简单函数生成的数据,而不是从 XML 文件或其他一些数据源读取数据,该函数使用了一个 for(;;) 循环,并以数组列表的形式返回生成的值。 清单 1. 生成一些数据

private ArrayList dataGenerator() {

double series1[] = new double[5];

for(int i=0; i2048 / 1024 equals 2.

line 2---> 100 - 0 equals 100.

line 3---> 100 / 2 equals 50, which is the desired scaled value.

步骤 3:您想在哪儿进行绘图?  您还需要进行绘图的地方。可以通过扩展 Eclipse ViewPart 和使用 SWT Composite 来创建您自己的视图。此外,也可以使用从 main() 函数中调用的 SWT shell。  在扩展 Eclipse ViewPart 时,至少必须实现两个函数:createPartControl(Composite parent) 和 setFocus()。函数 createPartControl(Composite parent) 是在屏幕上绘制视图时自动调用的。您的兴趣只在所接收的 SWT Composite 上。因此,将它传递给某个类,然后通过对这个类进行编码来绘制图形。清单 3. 使用 Eclipse ViewPart 绘图

public class MainGraFixView extends ViewPart{

public void createPartControl(Composite parent) {

//create or get data in an arraylist

ArrayList seriesData = dataGenerator();

//instantiate a plotter, and provide data to it.

DirectedGraphXYPlotter dgXYGraph = new DirectedGraphXYPlotter(parent);

dgXYGraph.setData(seriesData);

dgXYGraph.plot(); //ask it to plot

}

public void setFocus() {

}

}

步骤 4;您需要绘制哪种图形?  一旦拥有了数据以及想用来绘制图形的区域,就必须确定您需要哪种类型的可视化。在本文中,我演示了如何编写代码来创建 X-Y 坐标图和线形图。一旦知道了绘制 X-Y 坐标图的技术,就应该能够绘制出其他图形,比如条形图和饼图。要想更多地了解 X-Y 坐标图,请参阅我为本文编写的 DirectedGraphXYPlotter 类(参见所附源代码中的 \src\GraFix\Plotters\DirectedGraphXYPlotter.java)。  步骤 5:创建自己的 X-Y 坐标图  X-Y 坐标图应该能够绘制出 2-D 飞机上的任意数量的级数线。每个级数线都应该以图形形式显示出引用 X 和 Y 引用线的那些级数中的每个点的位置。每个点都应该通过一条线连接到级数中的下一个点上。通过使用表示一个点和一条线的 Draw2D 图形,您应该能够创建这样一个坐标图。例如,为了表示一个点,我通过扩展 Ellipse 图形创建了一个 Dot 图形,并使用 PolylineConnection 图形来表示连接线。  DirectedGraphXYPlotter 类只有两个公共函数:setData(ArrayList seriesData) 和 plot()。函数 setData(ArrayList seriesData) 接受您想要以图形形式形象化的数据(参见步骤 1),而 plot() 函数则开始绘图。  一旦调用了 plot() 函数,就必须依次采用以下步骤:

采用一个 SWT Composite,并将 FigureCanvas 放在它之上。然后,将一个类似 Panel 的通用容器图放在画布上。

计算将要绘制的级数的数量,然后填充创建 DirectedGraphs 所需数量的 NodeLists 和 EdgeLists。

在 Panel 图上绘制 X 坐标轴和 Y 坐标轴。(参见所附源代码中 \src\GraFix\Figure 目录下的 XRulerBar.java 和 YRulerBar.java。)

创建和级数一样多的 DirectedGraphs,以便进行绘图。

在 Panel 图上绘制点和连接线,同时采用步骤 d 中创建的 DirectedGraphs 中的图形数据。

最后,通过提供 Panel 图来设置画布的内容,其中包括到目前为止您已经准备好的所有的点和连接线。  在以下代码中:

第 6-11 行代码对应于上述的步骤 a。 第 14 行,即函数 populateNodesAndEdges(),对应于上述的步骤 b。

第 16 行,即函数 drawAxis(),对应于上述的步骤 c。

第 17 行、第 18 行和第 19 行对应于上述的步骤 d 和步骤 e。

第 20 行对应于上述的步骤 f。 清单 4. plot() 函数

1. public void plot(){

2. //if no place to plot, or no data to plot, return.

3. if(null==_parent || null==_seriesData)

4. return;

5.

6. Composite composite = new Composite(_parent, SWT.BORDER);

7. composite.setLayout(new FillLayout());

8. FigureCanvas canvas = new FigureCanvas(composite);

9.

10. Panel contents = new Panel();//A Panel is a general purpose container figure

11. contents.setLayoutManager(new XYLayout());

12. initializeSpan(contents.getClientArea());

13.

14. populateNodesAndEdges();

15.

16. drawAxis(contents);

17. for(int i=0; i在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图在Java中使用Draw2D和SWT绘图

阅读(125) | 评论(0) | 转发(0) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SWT可以使用Java发送验证码,具体步骤如下: 1. 导入JavaMail和Java Activation Framework(JAF)的jar包到SWT项目。 2. 创建一个JavaMail的Properties对象,设置SMTP服务器的相关信息,例如端口号、认证方式、用户名、密码等。 3. 创建一个Session对象,将Properties对象作为参数传入。 4. 创建一个MimeMessage对象,设置发送者、接收者、主题、内容等信息。 5. 使用Transport类的sendMessage()方法发送邮件,将MimeMessage对象作为参数传入。 以下是具体的代码实现: ```java import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class SendMail { public static void main(String[] args) { String to = "[email protected]"; // 收件人地址 String from = "[email protected]"; // 发件人地址 String host = "smtp.example.com"; // SMTP服务器地址 String user = "username"; // 用户名 String password = "password"; // 密码 // 创建Properties对象,设置SMTP服务器的相关信息 Properties props = new Properties(); props.put("mail.smtp.host", host); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.starttls.enable", "true"); // 创建Session对象 Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user, password); } }); try { // 创建MimeMessage对象 Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject("验证码"); // 设置主题 message.setText("您的验证码为:123456"); // 设置内容 // 发送邮件 Transport.send(message); System.out.println("邮件已发送。"); } catch (MessagingException e) { System.out.println("发送邮件失败。"); e.printStackTrace(); } } } ``` 注意:需要替换上述代码的收件人地址、发件人地址、SMTP服务器地址、用户名和密码等信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值