﻿<?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!</title><link>http://www.blogjava.net/hackest/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 05:16:49 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 05:16:49 GMT</pubDate><ttl>60</ttl><item><title>gef中的policy与command的关系</title><link>http://www.blogjava.net/hackest/archive/2007/06/17/124843.html</link><dc:creator>一条辉</dc:creator><author>一条辉</author><pubDate>Sun, 17 Jun 2007 13:56:00 GMT</pubDate><guid>http://www.blogjava.net/hackest/archive/2007/06/17/124843.html</guid><wfw:comment>http://www.blogjava.net/hackest/comments/124843.html</wfw:comment><comments>http://www.blogjava.net/hackest/archive/2007/06/17/124843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hackest/comments/commentRss/124843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hackest/services/trackbacks/124843.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/124843.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 21:56 <a href="http://www.blogjava.net/hackest/archive/2007/06/17/124843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>