一个用于构建图形接口的图形化工具 |
级别: 初级 David Gallardo (david@gallardo.org ), 软件顾问 2004 年 5 月 01 日 与 许多 Eclipse.org 项目类似,Visual Editor 项目的目标是构建一个用于构建工具(在这里是用于构建图形用户接口的工具)的工具。关于 Visual Editor 项目最有趣的事情是它已经发布了一个参考实现。Visual Editor 版本 0.5 是用于构建 AWT/Swing 应用程序的 GUI 构建器,这是一个期待已久的 Eclipse 特性。在很快就要发布的、预定在 2004 年中期提交的 1.0 版中,将增加对于 SWT 的支持。在本文中,您将获得关于 Visual Editor 及其背后技术的概览,以及 Visual Editor 0.5 用于构建 AWT/Swing 应用程序的特性的一个简短示范,以及关于 Visual Editor 1.0 中的 SWT 支持的预览。<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!-- END RESERVED FOR FUTURE USE INCLUDE FILES--> 与 Eclipse 自身类似,Visual Editor 也基于 IBM 的代码贡献。熟悉 Websphere Studio Application Developer 5.x 中的 Visual Editor 的开发人员将会发现 Eclipse 的 Visual Editor 几乎与之完全相同。要想了解如何使用 Visual Editor,请参阅 Websphere Studio Visual Editor 文档,该文档在本文末尾的 参考资料 一节中列出。 与 Eclipse.org 组织下的许多其他项目(包括 Eclipse)类似,Visual Editor 项目所确定的目标是非常宏伟的:构建一个用于构建图形化编辑工具的工具。尽管最初发行版中对于 AWT/Swing 的支持已经完成,但是 Visual Editor 的计划远不止于此。技术基础正在进行重新设计,从而使得它对于编程语言和所支持的图形工具集来说是不相关的。 在 将来,您会看到除了 AWT/Swing 以外的其他的 Visual Editor 实现(比如 SWT),以及潜在的除了 Java 语言以外的其他语言的实现(比如 C++)。有关增加 SWT 支持的工作已经在进行之中,事实上,这将会包括在 Visual Editor 版本 1.0 中,预定在 2004 年中期,大概与 Eclipse 3.0 同期完成。
Visual Editor 所利用的最为明显的工具是 GEF,即图形化编辑框架(Graphical Editing Framework)。GEF 建立于本地 Eclipse 图形化工具集 SWT 之上,以使得开发一个图形化编辑器或者所见即所得文本编辑器更为容易。如果您熟悉 SWT (或者 AWT/Swing,在这方面它们是类似的)中的图形原语,那么您会知道绘制和处理任意的形状(比如矩形、箭头和椭圆)是比较困难的,更不用说管理它们之 间的关系以及它们所代表的数据模型了。 GEF 被划分为两个部分:第一部分是 Draw2D 插件,这是一个轻量级的绘图和呈现包,用于帮助您绘制图形。第二部分是 GEF 插件,除了其他工具以外,这一部分中还增加了选择和创建工具、工具选项板,以及用于在数据模型和视图之间进行映射的控制器框架。 GEF 是一个模型无关的框架,但是作为 Visual Editor (以及其他生成代码的图形化工具)的一部分,它在后台使用 Eclipse 建模框架(Eclipse Modeling Framework, EMF),以在模型、Java 类和图形化表示之间进行映射,其中模型是使用 XML 元数据交换(XML Metadata Interchange, XMI)在内部存储的。EMF 的重要特性之一是它确保所有这些映射都是一对一的;所以尽管 XMI 可以被认为是模型的标准表示,但是在代码和图形之间来回切换并不会丢失任何信息。这就是为什么 Visual Editor 只需要保存模型的一种表示(即 Java 源代码),以及开发人员可以自由地在图形化编辑器之外编辑该源代码的原因。 要更多地了解 GEF 和 EMF,请参阅本文 参考资料 小节中的链接。
利用 Visual Editor 开发 AWT/Swing 应用程序 在手工构建 Swing 应用程序时,最为乏味的任务之一就是使用布局管理器来管理组件的位置。因为 Visual Editor 是一个所见即所得图形化编辑器,所以利用它很容易在用户接口中获得您想要的外观和行为。而且,因为它可以在不同的布局管理器之间自动映射,所以您可以使用 一个 null 布局来创建您的应用程序外观,然后切换到一个栅格单元(grid-bag)布局。使用 null 布局能够容易地准确获取您想要的布局,栅格单元布局则允许布局在窗口尺寸改变时能够运行良好。 在下面几节 中,我们将快速地浏览 Visual Editor 0.5 以及它的一些最有趣的特性。如果您想随同实践的话,需要安装 Eclipse 2.1.x 和 Visual Editor 0.5。而且,Visual Editor 还需要另外两个插件,即 EMF 和 GEF。关于下载链接和安装信息,请参阅 参考资料 小节。
为该类输入一个名字,比如 图 1. 创建新的可视类 选择完之后,按 Finish 创 建可视类并使用 Visual Editor 打开它。您将会注意到,与常规的 Java 编辑器不同,Visual Editor 具有三个不同的部分。顶部是一个图形化编辑器,其中显示您的可视类在运行时的可能形状。左边是窗口部件的一个列表,这些窗口部件可以被拖放到您的应用程序 中。底部是源代码(见图 2)。 图 2. 利用 Visual Editor 编辑 Swing 类 通过向下滚动源代码并找到
如果将第一个数字(即宽度)改变为一个新值,比如 600,您将看到上面的图形化表示马上会改变宽度以反映这个新值。如果您在做大量源代码的改动,那么可以单击 Eclipse 状态栏中的 Stop Round Tripping 按钮来关闭同步;否则,编辑器有可能会变得没有您所希望的那样反应迅速。 除 了 Visual Editor 之外,您会注意到 Java 透视图中还有两个新的视图:位于左下部的 Java Beans 视图和位于右上部的 Properties 视图。您可能知道,Swing 的设计特性之一是,每个组件,比如您刚才创建的框架类以及添加到它之上的任何其他窗口部件,都是一个 Java Bean。Java Beans 视图允许您容易地在类中导航到这些组件。最初,在“this”(指当前在 Visual Editor 中的类)之下的惟一入口是 jContentPanel。您可能知道,并不直接向 JFrame 添加组件,而是将组件添加到它的内容面板。单击 jContentPanel 将指向框架类中的 图 3. Java Beans 视图 Visual Editor 所增加的另一个视图是 Properties 视图,它显示一个 Java Bean 的属性。在这里,例如在 JavaBeans 视图中选择 jContentPane 之后,您可以改变它所使用的布局管理器。(在这样做之前,您可能希望在 Editor 窗口中浏览一下源代码,查看它是通过调用带有一个 图 4. 选择 null 布局管理器 在做出该改动之后,您将看到在源代码中,
接着,单击 JLabel 窗口部件并在前面所添加的复选框中单击 Next 。使用 Properties 视图,将文本改为“Unchecked”,然后调整文本框的尺寸使得文本能够恰好适中。(另一个方法是,首先扩展该框然后单击左上角;这将打开一个文本域,在这里您可以键入文本。) 现在,如果您愿意的话,可以使用调整工具(alignment tool)来整理窗口部件。通过按下 Control 键并且依次单击每个组件来选择它们,然后单击 Show Alignment Window 按钮和 Align Top 按钮,如图 5 所示。 图 5. 使用调整工具来对齐组件 现在,您的框架看起来应该类似于图 6 所示。 图 6. 具有两个窗口部件的框架 如 果您现在开始运行该应用程序,当然不会发生太多的事情。您可以将该复选框单击为打开或者关闭,因为 Swing 会为您负责这件事情,但是要想让它实际做某些事情,您还需要添加一些代码。如果熟悉 Swing 事件模型,您就知道需要为复选框添加一个活动监听器,从而每当用户改变它时,监听器都可以执行某个动作。要使用 Visual Editor 添加一个监听器,可在图形化编辑器中右击该复选框,并且从显示的上下文菜单中选择 Events > Action Performed 。这将把实现为匿名类的活动监听器的代码添加到复选框的初始化代码中:
您可以看到,在需要添加代码的地方已经利用一个 TODO 注释进行标识。让我们改动代码,以便每当复选框发生变化时,它旁边的标签也会发生变化以反映该复选框的状态。在您做出改动之后,新的代码看起来应该是这样的:
现在到了测试应用程序的时候了。
另一个方法是,由于这是一个 JFrame,您还可以通过像下面这样完成
从主菜单中选择 Run > Run As > Java Application 来运行它。无论以哪种方式运行它,您都应该看到,每当单击该复选框时,标签就会相应地发生变化。 如果您并没有在 Eclipse 中跟着实践,但是希望看到代码的样子,您可以使用 参考资料 中提供的链接下载它。
了解 Visual Editor 1.0 中的 SWT 支持 当 您下载一个非发布版本(non-release build)的 Visual Editor 1.0 时,例如我们这里所使用的 I20040325 集成版本(integration build),则还需要下载相应的 Eclipse、EMF 和 GEG 版本(build)。这些并不一定要是发布版本(release build),并且您不能混合和匹配版本。VEP 下载页面(请参阅 参考资料 )将指定需要哪些版本并且包含指向这些版本的链接。 当安装完 Eclipse、Visual Editor、EMF 和 GEF 之后,启动 Eclipse,并创建一个新的 Java 项目。为了使用 SWT,您需要将 SWT 库添加到项目的 Java 构建路径。右击该项目并选择 Properties > Java Build Path 。单击 Libraries 选项卡,单击 Add Library 按钮,选中 Standard Widget Toolkit (SWT),然后单击 Next 。在下一个对话框中,接受缺省的“Use Platform SWT Level”并单击 Finish 。单击 OK 关闭属性对话框。 与前面一样,通过右击该项目并选择 New > Visual Class 来创建一个新的 Visual Class。为该类输入名字,比如 图 7. 创建 SWT 可视类 开始,图形化编辑器的画布是空的。为了创建应用程序,您需要添加一个 SWT shell。您应该发现在 Visual Editor 左侧的窗口部件选项板中包含一个 SWT 窗口部件的选择项(除了 AWT 和 Swing 窗口部件之外)。单击 Shell ,然后在画布上单击并拖动以创建应用程序窗口(见图 8)。 图 8. 将 SWT shell 添加到图形化编辑器 现在,您可以给 shell 添加窗口部件了。这里我只是添加单个文本域。单击 Text ,然后在 shell 中单击并拖动以放置该文本域。单击该域的左上角以添加一些文本,比如“Hello, SWT!”。 图 9. Hello, SWT! 在完成这些步骤之后,您将发现 Visual Editor 已经创建了一个
接着,我们需要向
在键入这些代码之后,您可以在源代码窗口中右击并选择 Source > Reorganize Imports ,以解析对 Display 的引用。 为了运行该应用程序,您需要添加一个平台特定的 SWT 共享库或者 DLL 到您的路径。一种方式是使用启动配置。从 Eclipse 主菜单中选择 Run > Run... ,然后在所显示的对话框中单击 Arguments 选项卡。在 VM arguments 框中,添加一个带有库路径的 -D 参数;在 Windows 中,如果您已经将 Eclipse 安装到 图 10. 将到 Windows SWT DLL 的路径添加到启动配置 在输入该参数之后,单击 Run 启动 SWT 应用程序。如果一切都正确的话,应用程序窗口将打开并且带有“Hello, SWT!”消息,如图 11 所示。 图 11. “Hello, SWT!”应用程序窗口
|