﻿<?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-jazzy--努力夺回jazzy的google权-随笔分类-SWT/JFACE</title><link>http://www.blogjava.net/jazzy/category/1991.html</link><description>我是一个死程序员</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 10:22:42 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 10:22:42 GMT</pubDate><ttl>60</ttl><item><title>SWT快速上手向导</title><link>http://www.blogjava.net/jazzy/archive/2005/07/06/7191.html</link><dc:creator>jazzy</dc:creator><author>jazzy</author><pubDate>Wed, 06 Jul 2005 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/jazzy/archive/2005/07/06/7191.html</guid><wfw:comment>http://www.blogjava.net/jazzy/comments/7191.html</wfw:comment><comments>http://www.blogjava.net/jazzy/archive/2005/07/06/7191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jazzy/comments/commentRss/7191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jazzy/services/trackbacks/7191.html</trackback:ping><description><![CDATA[<P style="MARGIN: 17pt 0cm 16.5pt" align=left><SPAN lang=EN-US>(呵呵,去年刚开始研究swt时写的文档,PDF教程在<A href="http://www.cs.umanitoba.ca/~eclipse/">http://www.cs.umanitoba.ca/~eclipse/</A>处下载)</SPAN></P>
<H1 style="MARGIN: 17pt 0cm 16.5pt" align=center><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">快速上手向导</SPAN></H1>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt" align=center><SPAN style="FONT-FAMILY: 宋体">作者</SPAN><SPAN lang=EN-US>:jazzy </SPAN><SPAN style="FONT-FAMILY: 宋体">创建时间</SPAN><SPAN lang=EN-US>:2004-10</SPAN></P>
<H2 style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt"><SPAN lang=EN-US><SPAN><FONT face=Arial>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体">前言</SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt"><SPAN style="FONT-FAMILY: 宋体">本文面向需要使用</SPAN><SPAN lang=EN-US>swt</SPAN><SPAN style="FONT-FAMILY: 宋体">开发</SPAN><SPAN lang=EN-US>GUI</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US>java</SPAN><SPAN style="FONT-FAMILY: 宋体">程序员。本文不是</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">教程，千万别指望读了本文就可以使用</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings"><SPAN>:)</SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">。本文仅仅是对希望采用</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">开发</SPAN><SPAN lang=EN-US>GUI</SPAN><SPAN style="FONT-FAMILY: 宋体">的人员提供一些建议和学习指南以及一些经验分享，旨在降低大家使用</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">的学习坡度，达到节约时间，提高效率的目的。详细教程请参阅本文推荐的必读教程。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt"><SPAN lang=EN-US><SPAN><FONT face=Arial>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><FONT face=Arial>Eclipse</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体">下</SPAN><SPAN lang=EN-US><FONT face=Arial>SWT</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体">开发环境搭建</SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt"><SPAN style="FONT-FAMILY: 宋体">使用</SPAN><SPAN lang=EN-US>SWT Designer_v<?xml:namespace prefix = st1 /><st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">2.1.1</st1:chsdate>(</SPAN><SPAN style="FONT-FAMILY: 宋体">去年的版本了</SPAN><SPAN lang=EN-US>,3.0</SPAN><SPAN style="FONT-FAMILY: 宋体">版本好像上半年就出来了</SPAN><SPAN lang=EN-US>)</SPAN><SPAN style="FONT-FAMILY: 宋体">插件</SPAN><SPAN lang=EN-US>,</SPAN><SPAN style="FONT-FAMILY: 宋体">具体安装过程不罗嗦了，截图下来让大家先睹为快<BR></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><?xml:namespace prefix = v /><v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><?xml:namespace prefix = o /><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype></SPAN></P>
<H2 style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt"><SPAN lang=EN-US><SPAN><FONT face=Arial><IMG title=swt height=380 alt=image002.jpg src="http://www.blogjava.net/images/blogjava_net/jazzy/SWT/image002.jpg" width=553 border=0></FONT></SPAN></SPAN></H2>
<H2 style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt"><SPAN lang=EN-US><SPAN><FONT face=Arial>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><FONT face=Arial>Step by step</FONT></SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">本节推荐</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">的入门必读教程。本节虽短，但却极其重要，以下几篇文档提供了</SPAN><SPAN lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋体">起步的，细致有序的</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">入门教程，强烈推荐仔细阅读。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>1-Install.pdf</SPAN><SPAN style="FONT-FAMILY: 宋体">，介绍了</SPAN><SPAN lang=EN-US>eclipse</SPAN><SPAN style="FONT-FAMILY: 宋体">下</SPAN><SPAN lang=EN-US>swt</SPAN><SPAN style="FONT-FAMILY: 宋体">环境的搭建</SPAN><SPAN lang=EN-US>(</SPAN><SPAN style="FONT-FAMILY: 宋体">不含插件</SPAN><SPAN lang=EN-US>)</SPAN><SPAN style="FONT-FAMILY: 宋体">，以及一个最简单的</SPAN><SPAN lang=EN-US>hi world</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US>swt</SPAN><SPAN style="FONT-FAMILY: 宋体">示例。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>2-Basic.pdf</SPAN><SPAN style="FONT-FAMILY: 宋体">，介绍了</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">几个常用的组件和监听器</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>3-Advanced.pdf</SPAN><SPAN style="FONT-FAMILY: 宋体">，进一步介绍</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">的常用高级组件</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>4-Layouts.pdf</SPAN><SPAN style="FONT-FAMILY: 宋体">，布局管理器的介绍，是设计美观</SPAN><SPAN lang=EN-US>GUI</SPAN><SPAN style="FONT-FAMILY: 宋体">的基础。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">建议亲自动手运行教程中的每一个例程。花些时间读罢上文，相信你已经可以自如的使用</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">开发常用的程序界面了。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">掌握了基本的</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">使用，你便可以进一步关心构建在</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">之上的</SPAN><SPAN lang=EN-US>Jface</SPAN><SPAN style="FONT-FAMILY: 宋体">包，以及</SPAN><SPAN lang=EN-US>GUI</SPAN><SPAN style="FONT-FAMILY: 宋体">组建的自定义等高级应用了。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<H2 style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt"><SPAN lang=EN-US><SPAN><FONT face=Arial>4.</FONT><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体">初学</SPAN><SPAN lang=EN-US><FONT face=Arial>SWT</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体">的一些经验分享以及注意事项</SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体">本节介绍我在</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">开发中碰到的问题以及一些经验总结。欢迎批评指正。</SPAN></P>
<UL>
<LI><SPAN lang=EN-US style="FONT-FAMILY: Wingdings"><SPAN><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">上文提到的</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">插件功能十分强大</SPAN><SPAN lang=EN-US>,</SPAN><SPAN style="FONT-FAMILY: 宋体">可以随时打开编辑</SPAN><SPAN lang=EN-US>SWT/Swing GUI</SPAN><SPAN style="FONT-FAMILY: 宋体">，而不像</SPAN><SPAN lang=EN-US>NetBeans</SPAN><SPAN style="FONT-FAMILY: 宋体">一定需要一个对应</SPAN><SPAN lang=EN-US>form</SPAN><SPAN style="FONT-FAMILY: 宋体">配置文件才可以编辑一旦该文件丢失就无法可视化编辑了。但是也有</SPAN><SPAN lang=EN-US>bug</SPAN><SPAN style="FONT-FAMILY: 宋体">和不完善的地方，例如复制</SPAN><SPAN lang=EN-US>/</SPAN><SPAN style="FONT-FAMILY: 宋体">粘贴功能，如果你要复制一个多层结构的</SPAN><SPAN lang=EN-US>Composite</SPAN><SPAN style="FONT-FAMILY: 宋体">时候会导致莫名错误，另外，在跨</SPAN><SPAN lang=EN-US>Class</SPAN><SPAN style="FONT-FAMILY: 宋体">复制</SPAN><SPAN lang=EN-US>Composite</SPAN><SPAN style="FONT-FAMILY: 宋体">的时候会导致</SPAN><SPAN lang=EN-US>Image</SPAN><SPAN style="FONT-FAMILY: 宋体">，</SPAN><SPAN lang=EN-US>font</SPAN><SPAN style="FONT-FAMILY: 宋体">等属性的丢失。请注意。</SPAN> </LI></UL>
<UL>
<LI><SPAN lang=EN-US style="FONT-FAMILY: Wingdings"><SPAN><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">运行时需要指定</SPAN><SPAN lang=EN-US>DLL</SPAN><SPAN style="FONT-FAMILY: 宋体">，所以要在运行时加参数，如果觉得在</SPAN><SPAN lang=EN-US>eclipse</SPAN><SPAN style="FONT-FAMILY: 宋体">中每次</SPAN><SPAN lang=EN-US>run</SPAN><SPAN style="FONT-FAMILY: 宋体">都要手工加参数太麻烦的话，你可以把那些</SPAN><SPAN lang=EN-US>dll</SPAN><SPAN style="FONT-FAMILY: 宋体">拷贝到</SPAN><SPAN lang=EN-US>windows</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US>system32</SPAN><SPAN style="FONT-FAMILY: 宋体">目录下，这样就可以直接</SPAN><SPAN lang=EN-US>run/debug</SPAN><SPAN style="FONT-FAMILY: 宋体">而无需手工指定参数了。</SPAN> </LI></UL>
<UL>
<LI><SPAN lang=EN-US style="FONT-FAMILY: Wingdings"><SPAN><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">对于熟悉</SPAN><SPAN lang=EN-US>Swing</SPAN><SPAN style="FONT-FAMILY: 宋体">的开发人员来说，初次使用</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">可能对</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">中的组件创建时需要指定父亲组件而感到不适应。</SPAN> </LI></UL>
<UL>
<LI><SPAN lang=EN-US style="FONT-FAMILY: Wingdings"><SPAN><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">因为</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">是原生</SPAN><SPAN lang=EN-US>Widget</SPAN><SPAN style="FONT-FAMILY: 宋体">，</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US>GUI</SPAN><SPAN style="FONT-FAMILY: 宋体">大多直接用</SPAN><SPAN lang=EN-US>JNI</SPAN><SPAN style="FONT-FAMILY: 宋体">调用系统资源</SPAN><SPAN lang=EN-US>(</SPAN><SPAN style="FONT-FAMILY: 宋体">例如</SPAN><SPAN lang=EN-US>Color,Font</SPAN><SPAN style="FONT-FAMILY: 宋体">等</SPAN><SPAN lang=EN-US>)</SPAN><SPAN style="FONT-FAMILY: 宋体">，这些系统资源是无法用</SPAN><SPAN lang=EN-US>JVM</SPAN><SPAN style="FONT-FAMILY: 宋体">的垃圾回收机制回收的，所以记得显式的调用</SPAN><SPAN lang=EN-US>dispose()</SPAN><SPAN style="FONT-FAMILY: 宋体">方法在不需要的时候释放资源。否则有内存溢出的危险。</SPAN> </LI></UL>
<UL>
<LI><SPAN lang=EN-US style="FONT-FAMILY: Wingdings"><SPAN><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">多线程问题：</SPAN><SPAN lang=EN-US>SWT</SPAN><SPAN style="FONT-FAMILY: 宋体">使用</SPAN><SPAN lang=EN-US>Display</SPAN><SPAN style="FONT-FAMILY: 宋体">类来维护</SPAN><SPAN lang=EN-US>GUI</SPAN><SPAN style="FONT-FAMILY: 宋体">及其使用的系统资源。它禁止用户在其他线程下访问</SPAN><SPAN lang=EN-US>GUI</SPAN><SPAN style="FONT-FAMILY: 宋体">资源。例如：</SPAN> </LI></UL>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt"><SPAN lang=EN-US>public void run() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; butt.setText("test");<BR>&nbsp;&nbsp;&nbsp; }<BR></SPAN><SPAN style="FONT-FAMILY: 宋体">这样的写法会导致非法线程异常。如果需要在其他线程下访问</SPAN><SPAN lang=EN-US>GUI</SPAN><SPAN style="FONT-FAMILY: 宋体">资源可以使用如下方法：</SPAN><SPAN lang=EN-US><BR>Display.getCurrent().asyncExec(new Thread () {<BR>&nbsp;&nbsp;&nbsp; public void run() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; butt.setText("test");<BR>&nbsp;&nbsp;&nbsp; }<BR>})<o:p></o:p></SPAN></P>
<UL>
<LI><SPAN lang=EN-US style="FONT-FAMILY: Wingdings"><SPAN><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US>Display</SPAN><SPAN style="FONT-FAMILY: 宋体">提供同步异步方法分别是</SPAN><SPAN lang=EN-US>: syncExec(Runnable)</SPAN><SPAN style="FONT-FAMILY: 宋体">和</SPAN><SPAN lang=EN-US>asyncExec(Runnable)</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN> </LI></UL>
<UL>
<LI><SPAN lang=EN-US style="FONT-FAMILY: Wingdings"><SPAN><SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">对于</SPAN><SPAN lang=EN-US>Display</SPAN><SPAN style="FONT-FAMILY: 宋体">，在同一个线程里，不能申明</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体">个</SPAN><SPAN lang=EN-US>Display</SPAN><SPAN style="FONT-FAMILY: 宋体">实例。同样的，一个</SPAN><SPAN lang=EN-US>Display</SPAN><SPAN style="FONT-FAMILY: 宋体">实例也不能跨线程使用。也就是说，如果你要在另外一个线程中显示一个窗体，你必须另外创建一个</SPAN><SPAN lang=EN-US>Display</SPAN><SPAN style="FONT-FAMILY: 宋体">实例。不然会导致异常。)</SPAN> </LI></UL><img src ="http://www.blogjava.net/jazzy/aggbug/7191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jazzy/" target="_blank">jazzy</a> 2005-07-06 14:32 <a href="http://www.blogjava.net/jazzy/archive/2005/07/06/7191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>