﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Ray Studio-文章分类-SWT/JFace</title><link>http://www.blogjava.net/raysen0128/category/6444.html</link><description>博学之，审问之，慎思之，明辨之，笃行之</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:08:54 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:08:54 GMT</pubDate><ttl>60</ttl><item><title>SWT和SWT/JFace的GUI编程对比（一）</title><link>http://www.blogjava.net/raysen0128/articles/26131.html</link><dc:creator>蓉之恋</dc:creator><author>蓉之恋</author><pubDate>Fri, 30 Dec 2005 16:44:00 GMT</pubDate><guid>http://www.blogjava.net/raysen0128/articles/26131.html</guid><wfw:comment>http://www.blogjava.net/raysen0128/comments/26131.html</wfw:comment><comments>http://www.blogjava.net/raysen0128/articles/26131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/raysen0128/comments/commentRss/26131.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/raysen0128/services/trackbacks/26131.html</trackback:ping><description><![CDATA[<P><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>本文主要对于</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">SWT</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>和</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">SWT/JFace</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">GUI</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>编程的对比，将介绍两个</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">SWT</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>重要的类：</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Display</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>和</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Shell ;</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>和</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">JFace</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">ApplicationWindow</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>类，两者在程序设计的时候对基层系统窗口类的调用和实现的不同之处和优缺点的对比。本文主要参考了《</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">SWT JFace In Action</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">》。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></P>
<P><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>一，首先我们还是从一个例子出发吧</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">~<o:p></o:p></SPAN></P>
<P><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">HelloSWT.java<o:p></o:p></SPAN></P>
<P><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">package net.kilu.jopen.helloswt;<BR>import org.eclipse.swt.*;<BR>import org.eclipse.swt.widgets.*;<BR>public class HelloSWT<BR>{<BR>public static void main (String [] args)<BR>{<o:p></o:p></SPAN></P>
<P><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">// a, </SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>配置和初始化</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><BR>Display display = new Display();<BR>Shell shell = new Shell(display);<o:p></o:p></SPAN></P>
<P><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">//b, </SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>添加</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">widgets</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>到</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>中</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><BR>Text helloText = new Text(shell, SWT.CENTER);<BR>helloText.setText("Hello SWT!");<BR>helloText.pack();<o:p></o:p></SPAN></P>
<P><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">//c, GUI</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>操作</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><BR>shell.pack();<BR>shell.open();<BR>while (!shell.isDisposed())<BR>{<BR>if (!display.readAndDispatch())<BR>display.sleep();<BR>}<BR>display.dispose();<BR>}<BR>}<o:p></o:p></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>以上例子主要分成</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">3</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">部分：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><o:p></o:p></SPAN></FONT></P>
<P><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">a, </SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>首先创建了</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Display</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>和</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>类的两个实例，使得</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">GUI</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">操作能访问最底层平台的资源并创建主要的窗口察看组件。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><o:p></o:p></SPAN></FONT></P>
<P><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">b, </SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>下一步添加</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Text</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>文本组件到</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>中，这些文本是根据构建</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">GUI</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>的函数模块来添加配置的。</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Widgets</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>和成组的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">widgets</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>是以</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>的子类添加的，也可以添加相应的监听器和事件都是根据需要的，在这里</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">pack()</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>方法是告诉</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>和</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Text</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">组件能够使用可能大的空间。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><o:p></o:p></SPAN></FONT></P>
<P><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">c, </SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>最后部分就是描述了</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">GUI</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>的操作了，从这点出发，所以的程序代码除了初始化变量外什么都不做，但是当</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">open()</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>方法被调用时，程序的主窗口和它的子类就显示出来了，只要</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>一直是被调用的，</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Display</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>的实例使用</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">readAndDispatch()</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>方法保持循环执行并等待平台的事件的响应。当被用户使用关闭事件时，相关的</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Display</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>对象（像</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Shell</SPAN><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>和</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Shell</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的子类等）就会跟系统底层平台断开。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><o:p></o:p></SPAN></FONT></P>
<P><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT face=宋体>附</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">SWT</SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的类之间的通信和构建用户界面：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><o:p></o:p></SPAN></FONT></P>
<P><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><o:p><IMG alt="class communicationg structure of the SWT User Interface" hspace=0 src="D:\www\swt.gif" align=baseline border=0></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P><img src ="http://www.blogjava.net/raysen0128/aggbug/26131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/raysen0128/" target="_blank">蓉之恋</a> 2005-12-31 00:44 <a href="http://www.blogjava.net/raysen0128/articles/26131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>