SWT全接触 - 编程入门网
t一样,每一个布局于其中的窗口组件都可以有一 个与之相关联的布局数据类,称为GridData。GridLayout的强大功能是通过对于每一个窗口组件的 GridData 的灵活控制来实现的。
鉴于GridLayout的复杂性(原本我就怀疑它根本就不是为手工书写代 码而设计的),我并不建议各位直接手动书写GridData,最好借助可视化的工具(如VI)来帮助我们完成 用GridLayout进行的界面设计。这样我们只需要书写少量控制代码,就可以获得复杂的界面布局了。 FormLayout:如图所示 StackLayout:几乎完全等同于CardLayout的功能。 SWT全接触(6)时间:2011-11-09 IBM 薛笛在SWT中,位置和大小的变化并非自动发生的。应用程序既可以在Composite子类的构造函数中指定初 始位置和大小,也可以在一个改变窗口大小的监听器中用布局类来定位和改变Composite子类的大小。 下面的一幅图包含了我们将要讨论的有关布局的大部分细节。一个Composite类的可显示区域分为三个 部分,分别是 Location,clientArea和trim。Composite的大小就是clientArea和trim的区域之和。一个 布局类(Layout)的主要功能就是管理Composite子组件的大小和位置。通过布局类,我们可以管理子组 件之间的距离-即间距(Spaceing),子组件与布局边缘之间的距离-即边距(margin)。布局的大小同时 也是Composite的clientArea的大小。 至此,关于SWT的基础部分就告一段落,希望能够给大家以一个对于SWT的总体认识。下面的部分将主 要介绍SWT的弱项-绘图。JGraph的一个作者就表达了对SWT/JFace/Draw2D的不满,认为SWT在执行效率上 并没有什么改善,而且缺乏一些有用的API实现。话虽如此,但SWT的基本绘图功能还是不错的,如果有足 够的时间和耐心的话还是可以绘出想要的图形的。下面就让我们看看SWT如何绘制2D和3D图形。 3. 用SWT绘制2D图形 用SWT绘图通常由两种方法,一种是借助Graphics Context,另一种是利用Draw2D。然而Draw2D是一个 基于SWT Composite的轻量级组件,于是在效率上,它无法体现出SWT的Native Code的速度优势。故其虽 然强大,但仅适用于绘图工作不是系统瓶颈的应用程序。所以我在这里只介绍第一种方法。 3.1 Graphics Context 我们可以在任何实现了org.eclipse.swt.graphics.Drawable接口的类上绘制图形,这包括一个控件, 一幅图像,一个显示设备或一个打印设备。类org.eclipse.swt.graphics.GC是一个封装了所有可执行的 绘图操作的图形上下文(Graphics Context)。两种使用GC的方式我们已经在本节前言中提过,稍后会作 详细说明。 3.2 在一幅图像上绘制图形 下面一段代码创建了一个带有图像的GC并在上面绘制了两条线:
一旦你创建了一个GC,你就有责任通过它的dispose方法释放它的资源。一个由应用程序创建的GC需要 立即被绘制,然后尽快释放掉。这是因为每个GC都需要一个底层的系统资源,而在某些操作系统中这些资 源是稀缺的,像Win98就只允许同时创建五个GC对象。 SWT全接触(7)时间:2011-11-09 IBM 薛笛3.3 在Control上绘图 类org.eclipse.swt.widgets.Control是可绘制的,所以你可以用像在图像上一样的方式来绘制图形。 而和在图像上绘制所不同的是,如果你使用GC在一个Control上绘制图形,你需要知道当操作系统自身要 绘制这个control的时候,它将覆盖掉你的改动。所以在一个 Control上绘制图形的正确方法是加入其绘 制事件的监听器。监听器类为org.eclip |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |