13.2 SWT程序
SWT是一套独立的库,用户可以在SWT的基础上很容易地建立自己的应用,本节的目的就是要在SWT上建立一个简单的“Hello world”程序,读者可以在这个简单的程序上建立自己的应用。
13.2.1 加入SWT依赖的包
SWT为用户提供了一套API,用户如果要使用SWT进行开发,必须把所需的JAR包放在Eclipse项目的ClassPath中。在此笔者采用新建一个插件项目,插件项目会自动引用SWT相关的包,步骤如下。
(1)运行Eclipse。单击“File”→“New”→“Other”菜单项,在弹出的对话框中选择 Select 对话框左边的 Plug-in Development 向导。如图13-3所示,选择 Plug-in Project。
(2)单击“Next”按钮,弹出新建对话框,输入项目名称。此处使用了“com.free. swtjface.demo”。单击“Next”按钮后弹出新建对话框页,如图13-4所示。
图13-3 新建插件对话框
图13-4 新建项目
(3)单击“Next”按钮,在接下来的对话框中单击“Finish”按钮,建立一个空的插件项目在此项目中,Eclipse中已经自动引入了此插件所需要依赖的包,其中包括SWT/JFace所用到的包如图13-5所示。
图13-5 插件依赖的包
如果用户想加入SWT/JFace相关的包,也可以手动加入下面几个包“org.eclipse.swt.win32. win32.x86_3.1.1.jar”、“org.eclipse.swt_3.1.0.jar”和“org.eclipse.jface_3.1.1.jar”到插件的类路径中。
13.2.2 “Hello world”程序
现在SWT所依赖的包已经加入到了项目的ClassPath中,SWT程序和Java的程序一样,也是通过main函数运行的,如例程13-1所示。
例程13-1 HelloWorldSwt.java
package com.free.helloworld; … public class HelloWorldSwt { public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("hello world! Window");
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
} }
|
这段程序虽然很简单,但是它反映了书写SWT程序的步骤:
(1)创建一个Display对象。Display对象是SWT和操作系统通信的桥梁。
(2)创建一个或者多个Shell对象。可以认为Shell代表了程序的窗口。
(3)在Shell内创建各种部件(widget),如按钮、下拉框和列表等。
(4)对各个部件进行初始化(外观、状态等),同时为各种部件的事件创建监听器 (listener)。监听器可以监听窗口的消息,在此没有添加监听器,将会在后面的章节重点介绍监听器的注册。
(5)调用Shell对象的open()方法以显示窗体。
(6)对各种事件进行监听并处理,直到程序发出退出消息。
(7)调用Display对象的dispose()方法以结束程序。
提示:SWT程序的运行和例程13-1类似,读者如果不清楚SWT程序的运行机制,可以直接复制上面的样板代码就可以了。
13.2.3 运行SWT应用
SWT程序的运行要通过JNI调用相应的操作系统控件,运行SWT程序和运行Java应用程序有点不同,在Eclipse中用户可以选择运行SWT程序(SWT Application),步骤如下:
(1)打开Java的默认视图,在“Hello world”程序的文件上单击鼠标右键。
(2)选择“SWT Application”菜单,如图13-6所示。
图13-6 运行SWT程序
(3)单击“SWT Application”菜单运行,运行效果如图13-7所示。
图13-7 SWT“Hello world”程序
HelloWorldSwt程序只创建了一个窗口(shell),读者可以把shell当成其他组件的父窗口,创建其他组件。
13.3 使用Swing组件
SWT和Swing其实在概念上有很多相似的地方,它们之间最大的一个不同点是:Swing完全从跨平台的角度考虑,用Swing实现的组件完全是用Java编写的,没有用到和操作系统相关的组件。但SWT采用了更聪明的方式,如果操作系统有相关的组件,那么SWT只会采用JNI的方式调用相关的组件,如果操作系统不提供组件才会考虑用Java来创建。
13.3.1 添加Swing的组件
在项目开发中,如果用Swing开发了前期的工作,又不想用SWT重写这些代码,该怎么做呢?SWT提供了完美的解决方案,用户可以把用Swing编写出来的组件放在SWT的组件之上,而不需要放弃以前的代码(但可能会牺牲界面的风格和效率)。
在SWT的组件中可以添加Swing组件。SWT的组件只是作为Swing组件的一个父容器,要在SWT中加入Swing组件的步骤如下:
(1)添加SWT的组件。
(2)在SWT的组件上添加Swing的Frame。
(3)在Frame上添加其他Swing的组件。
如例程13-2展示了如何在SWT中添加Swing的Table组件。
例程13-2 SwingTableInSwt.java
public class SwingTableInSwt {public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout()); //新建SWT组件
Composite composite = new Composite(shell, SWT.NO_BACKGROUND
| SWT.EMBEDDED); try {
System.setProperty("sun.awt.noerasebackground", "true");
} catch (NoSuchMethodError error) {
} //在SWT组件上新建一个Frame容器
Frame frame = SWT_AWT.new_Frame(composite);
Panel panel = new Panel(new BorderLayout()) {
public void update(java.awt.Graphics g) {
paint(g);
}
};
//在容器中添加子容器
frame.add(panel);
JRootPane root = new JRootPane();
panel.add(root);
java.awt.Container contentPane = root.getContentPane(); int nrows = 1000, ncolumns = 10;
Vector rows = new Vector();
for (int i = 0; i < nrows; i++) {
Vector row = new Vector();
for (int j = 0; j < ncolumns; j++) {
row.addElement("Item " + i + "-" + j);
}
rows.addElement(row);
}
Vector columns = new Vector();
for (int i = 0; i < ncolumns; i++) {
columns.addElement("Column " + i);
}
JTable table = new JTable(rows, columns);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.createDefaultColumnsFromModel();
JScrollPane scrollPane = new JScrollPane(table);
contentPane.setLayout(new BorderLayout());
//添加相应的组件
contentPane.add(scrollPane); shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
} }
|
按照添加Swing组件的步骤,创建了Composite作为安置Swing组件的窗口,JTable为一个Swing的组件,而通过“Frame frame = SWT_AWT.new_Frame(composite);”创建的frame为SWT和Swing创建了桥梁。
13.3.2 程序运行效果
在上例中,SWT组件添加了一个Swing的JTable组件,程序运行效果如图13-8所示
图13-8 SWT组件上加入Swing的组件
要把基于Swing的产品移植到Eclipse中,为了最大限度地减少工作量,通常会用到通过SWT组件集成Swing的组件,虽然显示的界面会有一些不协调,但也已大大减少重新开发的时间。
分享到:
相关推荐
你可以通过`Display`实例创建一个`Shell`,并为其设置布局和属性。 3. **布局管理**:布局管理是控制GUI元素在窗口中如何排列的关键。SWT提供了多种布局,如`null`布局、`FillLayout`、`GridLayout`、`RowLayout`等...
在"Jigloo 开发 SWT 的入门教程 - BeanSoft's Java Blog - BlogJava.htm"这篇博客文章中,作者BeanSoft详细解释了这些步骤,并可能提供了实例和截图来帮助理解。配合"Jigloo 开发 SWT 的入门教程 - BeanSoft's Java ...
通常只需创建一个Display实例,它可以继承Device类,并且管理操作系统的资源、控件和事件。Display的主要方法包括: - `setData()`和`getData()`:用于存储和检索自定义数据。 - `getShells()`:返回Display上所有未...
### Eclipse SWT和JFace入门详解 #### SWT与JFace概览 SWT(Standard Widget Toolkit)和JFace是Eclipse平台中的两个核心图形用户界面(GUI)开发框架。SWT专注于提供高性能、本地外观和感觉的GUI控件,而JFace则...
《Eclipse Web开发从入门到精通(实例版)》是一本详尽的指南,旨在帮助读者掌握使用Eclipse这一流行的开源集成开发环境(IDE)进行Web开发的技术和实践。本书覆盖了从Eclipse的基本操作到高级特性,以及如何利用...
这些实例可以帮助开发者理解SWT的工作原理,并提供实际操作经验。 5. **Eclipse开发入门**:对于初学者,资源包可能会涵盖Eclipse的基本操作,如安装、工作空间设置、创建项目、编写和运行代码、调试技巧等,帮助...
SWT是一个IBM开发的跨平台GUI(Graphical User Interface,图形用户界面)开发工具包。本文包括一些SWT的基础知识和基本组件,以及布局事件的相关源代码实例。
1.5 SWT 界面开发实例... 13 1.5.1 使用Shell 创建窗口... 13 1.5.2 简单的用户密码验证器... 16 1.5.3 文件选择器... 19 第 2 章 在 Eclipse 中进行重构... 22 2.1 重命名实例... 22 2.2 移动实例... ...
### SWT入门 #### HelloWorld示例解析 以下是对SWT HelloWorld示例的详细解析: ```java import org.eclipse.swt.widgets.*; public class HelloWorld { public static void main(String[] args) { Display ...
### Eclipse中用SWT和JFace开发入门 #### 一、引言 Eclipse平台以其强大的功能和灵活性闻名,尤其适合开发复杂的图形用户界面(GUI)应用程序。本文将深入探讨如何利用Standard Widget Toolkit (SWT) 和 JFace 库在...
在“入门教程三”中,我们将关注如何实现在表格中直接编辑数据,这是提高用户体验的重要特性。 1. **创建TableViewer** 在Swt中,我们首先需要创建一个`Table`对象,然后通过`TableViewer`的构造函数将其传递进去...
在创建控件时,它们都需要一个父控件(通常是Composite的实例),并会自动添加到父控件中,这种自上而下的构造方式简化了GUI的设计。 每个控件都有自己的构造函数,其中一些参数允许设置样式选项,这些选项可以决定...
本入门教程旨在帮助初学者理解和掌握JavaApplet的基本概念、开发环境设置以及实际编程技巧。 1. **JavaApplet基本概念** JavaApplet是一种小型的Java应用程序,它能够在Web浏览器中运行,提供丰富的用户界面和交互...
"swt.rar"和"51CTO下载-eclipse入门到精通(第一版)源代码—第二篇 SWT_JFace篇(6-16章).rar"可能分别提供了更多的SWT实例代码和Eclipse集成开发环境下的SWT-JFace教程。JFace是建立在SWT之上的一层抽象,简化了GUI...
王占全,苏玲 著; ISBN:7-121-05152-4 学习 SWT/JFace 的好书!
这篇博客文章可能是关于SWT的基础介绍,适合初学者入门。SWT的使用通常涉及以下几个关键知识点: 1. **控件基础**: SWT提供了一系列基本的GUI控件,如按钮(Button)、文本框(Text)、标签(Label)、列表(List)、树...
Eclipse从入门到精通 (第1版+第2版)随书光盘 陈刚 清华大学出版社 第1版 2005 年6月 第2版 2007 年7月 国内第一本详细讲解SWT/JFace开发的书; 国内第一本详细讲解如何开发Eclipse插件的书; 一本写给程序员的书,是...
《SWT开发者手记》是一本专为Java开发者设计的指南,旨在帮助读者从入门到精通SWT(Standard Widget Toolkit)技术。SWT是Eclipse基金会开发的一个开源GUI(图形用户界面)库,它提供了与操作系统原生界面的紧密集成...