Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>Eclipse>>Eclipse中用SWT和JFace开发入门(二)
Eclipse中用SWT和JFace开发入门(二)
2005-06-22   来源:blog  作者:Barry
  复合控件

  至此,我们已经讨论了一些单独的控件。在多数 GUI 中,许多控件被组合在一起以提供丰富的用户体验。在 SWT 中,这种组合是通过 Composite 类实现的。

  复合控件可以在任何级别上进行嵌套,并且可以混合和匹配控件,将它们作为子控件进行组合。这样做可以极大地减少 GUI 开发的复杂性,并为 GUI 代码重用(通过封装内部 GUI)创造了机会。复合控件可以是有边界的,并且这些边界很容易在视觉上产生混淆,或者它们也可以是无边界的,无缝集成到更大的组中。

  清单 6. 创建一个有边界的复合控件。

  单 6. 创建一个有边界的复合控件

 
import org.eclipse.swt.widget.*; 
 : 
Composite parent = ...; 
 : 
Composite border = new Composite(parent, SWT.BORDER); 

  除了边界之外,Group 复合子类还支持标题。在定义排他性按钮集合时,组通常被用来包含单选类型的按钮。

  清单 7 创建了一个有边界的组。

  清单 7. 创建一个有边界的组

 
import org.eclipse.swt.widget.*; 
 : 
Composite parent = ...; 
 : 
Group border = new Group(parent, SWT.SHADOW_OUT); 
border.setText("Group Description"); 

  shell

  shell 是一种可能没有父复合控件的复合控件(框架或窗口);此外,它还有一个作为父控件的 Display,这通常也是默认设置。shell 有很多种样式,但最常见的样式是 SWT.SHELL_TRIMSWT.DIALOG_TRIM。shell 可以是模态的,也可以是非模态的。模态 shell 常常用于对话框,防止父 GUI(如果有的话)在关闭子 shell 之前被处理。

  清单 8 创建了一个框架样式的顶级非模态 shell。

  清单 8. 创建一个顶级 shell

 
import org.eclipse.swt.widget.*; 
 : 
Shell frame = new Shell(SWT.SHELL_TRIM); 
 : 

  shell 可以有子 shell。这些子 shell 是与父 shell 相关的独立桌面窗口(也就是说,如果父 shell 关闭,那么其所有子 shell 也将关闭)。

  清单 9 创建了一个对话框样式的子 shell。

  清单 9. 创建一个对话框 shell

 
: 
Shell dialog = new Shell(frame, SWT.DIALOG_TRIM); 
 : 

  参见图 4 中具有 SWT.SHELL_TRIMSee 的 shell,以及图 5 中具有 SWT.DIALOG_TRIM 的 shell,了解这些值如何影响 shell 的整洁性。

图 4. 具有 SWT.SHELL_TRIM 的 shell
具有 SWT.SHELL_TRIM 的 shell

图 5. 具有 SWT.DIALOG_TRIM 的 shell
具有 SWT.DIALOG_TRIM 的 shell 

  布局管理器

  复合控件常常包含多个控件。可以使用以下两种方法安排这些控件:
  1. 绝对定位 —— 为每个控件设置明确的 X 和 Y 位置,并通过代码设置一定的宽度和高度。
  2. 托管定位 —— 每个控件的 X、Y、宽度和高度都是通过LayoutManager 设置的。

  在多数情况下,应该选择使用 LayoutManagers,因为很容易调整它们来适应可变大小的 GUI。SWT 也提供了一些布局管理器供您使用;在这一期的系列文章中,我们将讨论两种基本的布局管理器:FillLayout 和 GridLayout。在这两种情况下,每当重新设置复合控件的大小,都需要进行定位。

  一些布局管理器常常是专为某一个复合控件分配的。一些布局管理器只使用它们自身的参数就可以控制,而另一些布局管理器还需要其他参数 —— LayoutData,该参数是在它们管理的复合控件中的每个控件上指定的。

  FillLayout

  FillLayout 以行或列的形式安排控件。每个控件所设置的大小将与填充该复合控件所需的宽度和高度相同,在这些控件之间,空间是平均分配的。一种特殊情况是:在仅有一个子控件时,该控件的大小被设置为填充整个父复合控件的大小。

  清单 10. 使用 FillLayout 创建一列控件

 
import org.eclipse.swt.widget.*; 
import org.eclipse.swt.layouts.*; 
 : 
Composite composite = ...; 
FillLayout fillLayout = new FillLayout(SWT.VERTICAL); 
composite.setLayout(fillLayout); 

  GridLayout

  GridLayout 提供了一个功能更强大的布局方法,该方法类似于使用 HTML 表的方法。它创建了 2-D 网格的单元格。可以将控件放置在一个或多个单元格中(可以称之为单元格跨越)。单元格的大小可以是相等的,或者是网格宽度或高度的某个给定可变百分比。可以将控件添加到某一行的下一个可用列中,如果这一行中没有更多的列,那么该控件将移动到下一行的第一列中。

  清单 11 创建了一个复合控件,该控件有两行和两个列,其中包含两个已标记的文本字段。这些列可以有不同的宽度。

  清单 11. 创建一个控件表

 
import org.eclipse.swt.widget.*; 
import org.eclipse.swt.layouts.*; 
 : 
Composite composite = ...; 
GridLayout gridLayout = new GridLayout(2, false); 
composite.setLayout(gridLayout); 
Label l1 = new Label(composite, SWT.LEFT); 
l1.settext("First Name: "); 
Text first = new Text(composite, SWT.SINGLE); 
Label l1 = new Label(composite, SWT.LEFT); 
l2.setText("Last Name: "); 
Text last = new Text(composite, SWT.SINGLE); 

  GridData

  考虑一下这种情况:您需要指定每个控件如何使用其单元格中的剩余空间。为了给每个单元格提供这种精确控制,添加到 GridLayout 的托管复合控件的控件可以拥有 GridData 实例(LayoutData 的子类)。

  清单 12 设置了这些文本字段,以便采用所有可用的剩余空间(根据前面的清单)。

  清单 12. 配置一个扩展到所有可用空间的布局

first.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
last.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

  构建一个运行程序

  现在是时候来看一下我们已经在简单的可执行例子 Basic1 中讨论过的所有 SWT 控件了。请参阅 参考资料,以获得该应用程序的完整源代码。

  SWT GUI 需要一个已配置好的环境来运行。这个环境是通过一个显示实例提供的,该实例提供了对主机操作系统显示设备的访问。这个显示实例允许您处理每个用户输入(鼠标或键盘)来处理您的 GUI。

  清单 13 创建了一个环境和一个 GUI,并显示了这个 GUI。

  清单 13. 创建一个 GUI 应用程序并启动它

 
import org.eclipse.swt.widget.*; 
 : 
Display display = new Display(); 
Shell shell = new Shell(display); 
shell.setText("Shell Title"); 

// *** construct Shell children here *** 

shell.open();       // open shell for user access 

// process all user input events 
while(!shell.isDisposed()) { 
   // process the next event, wait when none available 
   if(!display.readAndDispatch()) { 
       display.sleep(); 
   } 
} 
display.dispose();  // must always clean up 

  此代码创建了一个类似于图 6 的窗口。

图 6. 示例应用程序
SWT 应用程序

  结束语

  在 SWT 和 JFace 系列的第一期中,我们介绍了大多数基本 SWT 窗口小部件控件:标签、文本、按钮、复合控件和 shell。这些控件,与显示类(display class)相结合,允许创建全功能的 GUI。
  --相关文章--
· 解决运行eclipse内存不足的问题 (2007-04-17)
· 用 Eclipse 插件提高代码质量 (2007-04-17)
· 开源技术:在Eclipse中构建备忘单 (2007-04-17)
· 开源技术:Eclipse 插件功能研究 (2007-04-17)
· 开源技术:Eclipse 3.2冒险之旅 (2007-04-17)
· 开源技术 Eclipse使用技巧 (2007-04-17)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接