﻿<?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-Get busy living or get busy dying!-文章分类-SWT/JFACE</title><link>http://www.blogjava.net/hackest/category/23336.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 15 Jul 2007 06:57:25 GMT</lastBuildDate><pubDate>Sun, 15 Jul 2007 06:57:25 GMT</pubDate><ttl>60</ttl><item><title>SWT/JFACE的table中加入控件</title><link>http://www.blogjava.net/hackest/articles/129720.html</link><dc:creator>一条辉</dc:creator><author>一条辉</author><pubDate>Wed, 11 Jul 2007 15:29:00 GMT</pubDate><guid>http://www.blogjava.net/hackest/articles/129720.html</guid><wfw:comment>http://www.blogjava.net/hackest/comments/129720.html</wfw:comment><comments>http://www.blogjava.net/hackest/articles/129720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hackest/comments/commentRss/129720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hackest/services/trackbacks/129720.html</trackback:ping><description><![CDATA[一提到表格，人们就想得到EXCEL。不错，这个优秀的软件一共提供了几千个功能点，但人们平常一般只用到其常用的几十个功能。<br>SWT/JFACE提供的表格虽然不能完成EXCEL的所有功能，但其常用的功能已经具备。比如：双击编辑表格、操作单元格、在单元格中加入控件。<br>其关键就在于CellEditor的使用！<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_35_682_Open_Image onclick="this.style.display='none'; Codehighlighter1_35_682_Open_Text.style.display='none'; Codehighlighter1_35_682_Closed_Image.style.display='inline'; Codehighlighter1_35_682_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_35_682_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_35_682_Closed_Text.style.display='none'; Codehighlighter1_35_682_Open_Image.style.display='inline'; Codehighlighter1_35_682_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">items.length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_35_682_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_35_682_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableEditor&nbsp;editor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TableEditor&nbsp;(table);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CCombo&nbsp;combo&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CCombo&nbsp;(table,&nbsp;SWT.NONE);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;combo.setText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">CCombo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;combo.add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">item&nbsp;1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;combo.add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">item&nbsp;2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor.grabHorizontal&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor.setEditor(combo,&nbsp;items[i],&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TableEditor&nbsp;(table);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text&nbsp;text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Text&nbsp;(table,&nbsp;SWT.NONE);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text.setText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Text</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor.grabHorizontal&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor.setEditor(text,&nbsp;items[i],&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TableEditor&nbsp;(table);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button&nbsp;button&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Button&nbsp;(table,&nbsp;SWT.CHECK);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.pack&nbsp;();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor.minimumWidth&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;button.getSize&nbsp;().x;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor.horizontalAlignment&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;SWT.LEFT;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor.setEditor&nbsp;(button,&nbsp;items[i],&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
用以上代码加入CCombo和Check。<br>关键在于：<br>editor.setEditor(combo, items[i], 0);<br>combo为控件对象，item[i]和0为确定editor（单元格）的位置。<br>有了这个函数就可以任意加控件了。特殊情况加入text控件就可实现双击编辑，代码如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_50_836_Open_Image onclick="this.style.display='none'; Codehighlighter1_50_836_Open_Text.style.display='none'; Codehighlighter1_50_836_Closed_Image.style.display='inline'; Codehighlighter1_50_836_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_50_836_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_50_836_Closed_Text.style.display='none'; Codehighlighter1_50_836_Open_Image.style.display='inline'; Codehighlighter1_50_836_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">table.addSelectionListener(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SelectionAdapter()&nbsp;</span><span id=Codehighlighter1_50_836_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_50_836_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_99_833_Open_Image onclick="this.style.display='none'; Codehighlighter1_99_833_Open_Text.style.display='none'; Codehighlighter1_99_833_Closed_Image.style.display='inline'; Codehighlighter1_99_833_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_99_833_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_99_833_Closed_Text.style.display='none'; Codehighlighter1_99_833_Open_Image.style.display='inline'; Codehighlighter1_99_833_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;widgetSelected(SelectionEvent&nbsp;e)&nbsp;</span><span id=Codehighlighter1_99_833_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_99_833_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Clean&nbsp;up&nbsp;any&nbsp;previous&nbsp;editor&nbsp;control</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;oldEditor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;editor.getEditor();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(oldEditor&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;oldEditor.dispose();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Identify&nbsp;the&nbsp;selected&nbsp;row</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableItem&nbsp;item&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(TableItem)e.item;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(item&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;The&nbsp;control&nbsp;that&nbsp;will&nbsp;be&nbsp;the&nbsp;editor&nbsp;must&nbsp;be&nbsp;a&nbsp;child&nbsp;of&nbsp;the&nbsp;Table</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text&nbsp;newEditor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Text(table,&nbsp;SWT.NONE);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newEditor.setText(item.getText(EDITABLECOLUMN));<br><img id=Codehighlighter1_560_722_Open_Image onclick="this.style.display='none'; Codehighlighter1_560_722_Open_Text.style.display='none'; Codehighlighter1_560_722_Closed_Image.style.display='inline'; Codehighlighter1_560_722_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_560_722_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_560_722_Closed_Text.style.display='none'; Codehighlighter1_560_722_Open_Image.style.display='inline'; Codehighlighter1_560_722_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newEditor.addModifyListener(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ModifyListener()&nbsp;</span><span id=Codehighlighter1_560_722_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_560_722_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_605_717_Open_Image onclick="this.style.display='none'; Codehighlighter1_605_717_Open_Text.style.display='none'; Codehighlighter1_605_717_Closed_Image.style.display='inline'; Codehighlighter1_605_717_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_605_717_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_605_717_Closed_Text.style.display='none'; Codehighlighter1_605_717_Open_Image.style.display='inline'; Codehighlighter1_605_717_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;modifyText(ModifyEvent&nbsp;me)&nbsp;</span><span id=Codehighlighter1_605_717_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_605_717_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text&nbsp;text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Text)editor.getEditor();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor.getItem().setText(EDITABLECOLUMN,&nbsp;text.getText());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newEditor.selectAll();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newEditor.setFocus();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editor.setEditor(newEditor,&nbsp;item,&nbsp;EDITABLECOLUMN);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">);</span></div>
哈哈 这样就可以了哦！<br><br>
<img src ="http://www.blogjava.net/hackest/aggbug/129720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hackest/" target="_blank">一条辉</a> 2007-07-11 23:29 <a href="http://www.blogjava.net/hackest/articles/129720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF中POLICY的位置。。。</title><link>http://www.blogjava.net/hackest/articles/124847.html</link><dc:creator>一条辉</dc:creator><author>一条辉</author><pubDate>Sun, 17 Jun 2007 14:19:00 GMT</pubDate><guid>http://www.blogjava.net/hackest/articles/124847.html</guid><wfw:comment>http://www.blogjava.net/hackest/comments/124847.html</wfw:comment><comments>http://www.blogjava.net/hackest/articles/124847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hackest/comments/commentRss/124847.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hackest/services/trackbacks/124847.html</trackback:ping><description><![CDATA[刚刚看了几篇文档，对GEF中的POLICY的位置有了更清楚的理解。<br>POLICY有几种类型：NOTEPOLICY,COMPONENTPOLICY,LAYOUTPOLICY;分别对应REQUEST的几种类型，一旦出现REQUEST就在EDITPART里面找相应的POLICY，然后在POLICY中执行COMMAND。当然要给COMMAND传递一定的参数，比如MODEL,CONSTRAINT等等<br>调用POLICY的GETCOMMAND（）函数，得到相应的一个或多个COMMAND，然后分别执行，这样就改变了MODEL。<br>最后在EDITPART里面添加监听器:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;EditPartWithListener&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;AbstractGraphicalEditPart&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_113_478_Open_Image onclick="this.style.display='none'; Codehighlighter1_113_478_Open_Text.style.display='none'; Codehighlighter1_113_478_Closed_Image.style.display='inline'; Codehighlighter1_113_478_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_113_478_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_113_478_Closed_Text.style.display='none'; Codehighlighter1_113_478_Open_Image.style.display='inline'; Codehighlighter1_113_478_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyChangeListener&nbsp;</span><span id=Codehighlighter1_113_478_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_113_478_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_142_306_Open_Image onclick="this.style.display='none'; Codehighlighter1_142_306_Open_Text.style.display='none'; Codehighlighter1_142_306_Closed_Image.style.display='inline'; Codehighlighter1_142_306_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_142_306_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_142_306_Closed_Text.style.display='none'; Codehighlighter1_142_306_Open_Image.style.display='inline'; Codehighlighter1_142_306_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;activate()&nbsp;</span><span id=Codehighlighter1_142_306_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_142_306_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.activate();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;It&nbsp;registers&nbsp;with&nbsp;a&nbsp;model&nbsp;by&nbsp;making&nbsp;self&nbsp;into&nbsp;listeners.</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((AbstractModel)&nbsp;getModel()).addPropertyChangeListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_338_475_Open_Image onclick="this.style.display='none'; Codehighlighter1_338_475_Open_Text.style.display='none'; Codehighlighter1_338_475_Closed_Image.style.display='inline'; Codehighlighter1_338_475_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_338_475_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_338_475_Closed_Text.style.display='none'; Codehighlighter1_338_475_Open_Image.style.display='inline'; Codehighlighter1_338_475_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;deactivate()&nbsp;</span><span id=Codehighlighter1_338_475_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_338_475_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.deactivate();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;It&nbsp;deletes&nbsp;from&nbsp;a&nbsp;model.</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((AbstractModel)&nbsp;getModel()).removePropertyChangeListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>然后，HelloEditPart 要派生自这个抽象类，然后在模型改变时刷新视图。注意这里用到了<br>前面设置的变量P_CONSTRAINT。通过这个变量我们才知道是要改变HelloModel 模型的约束.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_58_332_Open_Image onclick="this.style.display='none'; Codehighlighter1_58_332_Open_Text.style.display='none'; Codehighlighter1_58_332_Closed_Image.style.display='inline'; Codehighlighter1_58_332_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_58_332_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_58_332_Closed_Text.style.display='none'; Codehighlighter1_58_332_Open_Image.style.display='inline'; Codehighlighter1_58_332_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;HelloEditorPart&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;EditPartWithListener&nbsp;</span><span id=Codehighlighter1_58_332_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_58_332_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_114_330_Open_Image onclick="this.style.display='none'; Codehighlighter1_114_330_Open_Text.style.display='none'; Codehighlighter1_114_330_Closed_Image.style.display='inline'; Codehighlighter1_114_330_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_114_330_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_114_330_Closed_Text.style.display='none'; Codehighlighter1_114_330_Open_Image.style.display='inline'; Codehighlighter1_114_330_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;propertyChange(PropertyChangeEvent&nbsp;event)&nbsp;</span><span id=Codehighlighter1_114_330_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_114_330_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;the&nbsp;model&nbsp;of&nbsp;change&nbsp;shows&nbsp;change&nbsp;of&nbsp;the&nbsp;position&nbsp;information&nbsp;on&nbsp;a&nbsp;model&nbsp;--&nbsp;do&nbsp;thing&nbsp;or&nbsp;not?</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(event.getPropertyName().equals(HelloModel.P_CONSTRAINT))<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refreshVisuals();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;A&nbsp;view&nbsp;is&nbsp;updated.</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>这样就能改变VIEW了！<br>REQUEST--&gt;POLICY--&gt;COMMAND--&gt;MODEL--&gt;VIEW<br>^_^ 
<img src ="http://www.blogjava.net/hackest/aggbug/124847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hackest/" target="_blank">一条辉</a> 2007-06-17 22:19 <a href="http://www.blogjava.net/hackest/articles/124847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UI框架的组织模式【转载】</title><link>http://www.blogjava.net/hackest/articles/124094.html</link><dc:creator>一条辉</dc:creator><author>一条辉</author><pubDate>Wed, 13 Jun 2007 14:32:00 GMT</pubDate><guid>http://www.blogjava.net/hackest/articles/124094.html</guid><wfw:comment>http://www.blogjava.net/hackest/comments/124094.html</wfw:comment><comments>http://www.blogjava.net/hackest/articles/124094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hackest/comments/commentRss/124094.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hackest/services/trackbacks/124094.html</trackback:ping><description><![CDATA[UI框架中有很多组件，很多类，很多细小而繁多的标准，这些特征使得UI框架成为一个业务逻辑和底层代码的复杂无序混合体，对它的类组织方式的研究也就显得特别有模式化编程的意义。 <br>&nbsp;<strong>&nbsp;&nbsp; Pattern 1：Composite </strong><br>&nbsp;&nbsp;&nbsp; 几乎所有时下流行的UI组件都会遵循Composite模式，比如AWT、Swing、Java2D、SWT、JFace、EclipseUI、 Draw2D、GEF以及.NET世界的Windows Forms。该模式的大概含义是，子组件和母组件是同一个类型的。比如一个Button应该是安排在一个Panel上的，但是Button和Panel可能都是一个Container或者都是一个Composite。 <br><strong><br>&nbsp;&nbsp;&nbsp; Pattern 2：绘制前组织 </strong><br>&nbsp;&nbsp;&nbsp; 目前公共领域的设计模式还没有可以精确的表达这个思路的名词，所以我就自做主张，起了个名字，后面的Pattern如果用中文命名，也是这个原因。该模式的大概含义是，子组件应赶在母组件绘制之前将自己显式的加入母组件。比如说，如果Button要继承Panel的某个属性（我是指Button要得到 Panel的某个知识），那么就要赶在绘制之前显式的将这个Button对象add到Panel中去。绘制前组织的典型例子是AWT、Swing、 Java2D、Draw2d等。 <br><br>&nbsp;&nbsp;&nbsp;<strong> Pattern 3：构建时组织 </strong><br>&nbsp;&nbsp;&nbsp; 和某种工厂方式相似，构建时组织是在类的构造器上做文章。该模式的大概含义是，子组件在构建时就必须确定它属于哪个母组件，以便在后面的操作中与母组件户动。比如Button所有的构建器都要求传入一个Composite对象作为parent。这个模式与上面的Pattern 2完全不同，其典型例子有SWT、JFace、EclipseUI、GEF（都是一家的）。 <br><br>&nbsp;<strong>&nbsp;&nbsp; Pattern 4：MVC</strong> <br>&nbsp;&nbsp;&nbsp; 几乎所有时下流行的UI组件都或多或少的使用了MVC，或不太严格的MVC，或MVC某个角度的思想。该模式用在UI系统上的大概含义是，将组件的绘制、设置和事件处理分开，在不同的角色中完成。我在本文所举的所有例子中，只有GEF实现了严格和完美的MVC，而AWT、Swing、Java2D等组件（都是由Sun开发或Sun和Netscape合作开发的）则使用了一个著名的同时也是最容易被搞混淆的MVC变种。该变种中也有三个角色，绘图器代理、无知的模型和监听器、原型组件和事件处理方法。而微软的MFC也采用了MVC的另一个著名变种，Document-View，这个变种显然只有两个角色。 <br><br>&nbsp;&nbsp;<strong>&nbsp; Pattern 5：Delegate </strong><br>&nbsp;&nbsp;&nbsp; 性能和可移植性是一直是UI平台最关注的两个问题。性能依靠尽量少的载入类，可移植性则依靠对更多图形库的支持，这两件事都需要将硬性的绘图方法或事件处理方式分离出去，交给代理完成。该模式的含义是，绘图工具本身不绘图，它只负责决定应该由它的哪个代理完成，并负责为代理绘制图形搜集参数。 Eclipse和Sun的主要工具都采用了这一模式，不同的是Eclipse也在事件处理环节应用了代理模式，因为事件被触发之前没有理由将它的实现读入内存，所以实现应该由代理完成。 <br><br>&nbsp;&nbsp;&nbsp; <strong>Pattern 6：Layer </strong><br>&nbsp;&nbsp;&nbsp; Eclipse采用了严格而完美的分层模型，有严格界限的层次至少有三个，分别是org.eclipse.swt, org.eclipse.jface, org.eclipse.ui。其中SWT负责绘制简单的组件，提供简单组件的功能。JFace负责绘制复杂交互方式的组件，有些JFace的组件包装了 SWT的组件，并提供了随组件而走的服务。这两个包都可以在Eclipse以外的平台上使用。UI层则完成Eclipse平台的主要UI功能，很多地方提供了系统唯一的服务，并包装了JFace的组件。Draw2D建立在SWT之上，包装了SWT使其能更好的为绘制二维复杂图形而服务。GEF建立在 Draw2D和EclipseUI层的基础之上，为Eclipse Workbench提供某些功能。 <br>
<img src ="http://www.blogjava.net/hackest/aggbug/124094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hackest/" target="_blank">一条辉</a> 2007-06-13 22:32 <a href="http://www.blogjava.net/hackest/articles/124094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>