﻿<?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-aegeanllh-文章分类-GEF</title><link>http://www.blogjava.net/aegeanllh/category/11553.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 03 Mar 2007 04:38:25 GMT</lastBuildDate><pubDate>Sat, 03 Mar 2007 04:38:25 GMT</pubDate><ttl>60</ttl><item><title>在GEF中如何使用DirectedGraph来对图中的对象进行位置的排放 （转载）</title><link>http://www.blogjava.net/aegeanllh/articles/48413.html</link><dc:creator>llh</dc:creator><author>llh</author><pubDate>Fri, 26 May 2006 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/aegeanllh/articles/48413.html</guid><wfw:comment>http://www.blogjava.net/aegeanllh/comments/48413.html</wfw:comment><comments>http://www.blogjava.net/aegeanllh/articles/48413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aegeanllh/comments/commentRss/48413.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aegeanllh/services/trackbacks/48413.html</trackback:ping><description><![CDATA[
		<h2> </h2>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在使用</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行开发的时候，对于需要绘制的图形的节点，往往除了模型对象本身之外，还需要有一个相应的“图”对象来保存图中这个节点的位置，以及大小等图相关，但是与<u><strong>业务模型</strong></u>无关的一个对象。而在一开始希望显示一个初始模型文件的时候，再对应保存图信息的文件不存在的情况下，如何能够很好的显示这个图，是一个比较麻烦的问题，涉及到对布局算法的一些分析与实现。这片文章就是介绍，如何使用</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内的</span>
				<span lang="EN-US">DirectedGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个类以及其相应的布局算法类</span>
				<span lang="EN-US">DirectedGraphLayout</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，来解决这个问题。<br /><strong>基本思想是：为</strong></span>
				<strong>
						<span lang="EN-US">GEF</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
						<span lang="EN-US">EditPart</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模型生成一个</span>
						<span lang="EN-US">DirectedGraph</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，然后使用</span>
						<span lang="EN-US">DirectedGraphLayout</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来计算布局，最后将布局的结果通过</span>
						<span lang="EN-US">GEF</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">显示出来。</span>
				</strong>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在参考了</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">flow example</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之后，对其代码作了部分重构，写了这片文章，希望对遇到同样问题的同志能够有一定的帮助。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先引入一个接口：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">public interface GraphBuilder {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void contributeNodesToGraph(DirectedGraph graph, Map map);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void contributeEdgesToGraph(DirectedGraph graph, Map map);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void applyGraphResults(DirectedGraph graph, Map map);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个接口中定义了几个方法，其含义从其方法名中可以猜出：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<strong>contributeNodesToGraph</strong>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：将当前对象作为节点（</span>
				<span lang="EN-US">Node</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）添加到</span>
				<span lang="EN-US">DirectedGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<strong>contributeEdgesToGraph</strong>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：将当前对象所对应的连线作为边（</span>
				<span lang="EN-US">Edge</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）添加到</span>
				<span lang="EN-US">DirectedGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<strong>applyGraphResults</strong>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：将图中生成的布局信息取出，对本对象进行重新布局。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口中的</span>
				<span lang="EN-US">graph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数就是保存的图的信息，</span>
				<span lang="EN-US">map</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数维持一个对象到节点</span>
				<span lang="EN-US">/</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">边的映射，使得每个对象能够方便的找到其对应的图中的节点或者边。这个接口的使用，在后面会有涉及。下面先看看显示图的容器是如何构建的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图的容器定义为</span>
				<span lang="EN-US">GraphDiagramEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对应于要显示的有向图的容器。它实现了</span>
				<span lang="EN-US">GraphBuider</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口，这也是我们主要需要关注的接口：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">public class GraphDiagramEditPart extends AbstractGraphicalEditPart implements</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>GraphBuilder.</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">contributeNodesToGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法将自身作为节点添加到图中，但是因为</span>
				<span lang="EN-US">GraphDiagramEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对应的是容器，因此它不需要向图中添加信息，只是调用其子</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，将其添加到图中。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void contributeNodesToGraph(DirectedGraph graph, Map map) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>for (int i = 0; i &lt; getChildren().size(); i++) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>NodeEditPart activity = (NodeEditPart)getChildren().get(i);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>activity.contributeNodesToGraph(graph, map);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">contributeEdgesToGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法将这个</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的所有子</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">取出，调用其</span>
				<span lang="EN-US">contributeEdgesToGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法，通过这个方法，就可以将所有的边添加到图中了：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void contributeEdgesToGraph(DirectedGraph graph, Map map) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>for (int i = 0; i &lt; getChildren().size(); i++) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>NodeEditPart child = (NodeEditPart)children.get(i);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>child.contributeEdgesToGraph(graph, map);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">applyGraphResults</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法将所有取出所有的子</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并调用其</span>
				<span lang="EN-US">applyGraphResults</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，使得图中所生成的布局信息能够被应用到显示上。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void applyGraphResults(DirectedGraph graph, Map map) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>applyChildrenResults(graph, map);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>protected void applyChildrenResults(DirectedGraph graph, Map map) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>for (int i = 0; i &lt; getChildren().size(); i++) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>GraphBuilder part = (GraphBuilder) getChildren().get(i);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>part.applyGraphResults(graph, map);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面要介绍的是</span>
				<span lang="EN-US">NodeEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，它作图中所有节点所对应的</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的抽象父类，也实现了</span>
				<span lang="EN-US">GraphBuilder</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口。每一个要做为节点添加到图中的</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，应该继承这个类。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">public abstract class NodeEditPart extends AbstractGraphicalEditPart implements</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>GraphBuilder{</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font color="#a52a2a"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void contributeNodesToGraph(DirectedGraph graph, </font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>Map map) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>Node n = new Node(this);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>n.outgoingOffset = 7;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>n.incomingOffset = 7;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>n.width = getFigure().getPreferredSize().width;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>n.height = getFigure().getPreferredSize().height;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>n.setPadding(new Insets(10,8,10,12));</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>map.put(this, n);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>graph.nodes.add(n);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font color="#a52a2a"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void contributeEdgesToGraph(DirectedGraph graph, Map map) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>List outgoing = getSourceConnections();</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>for (int i = 0; i &lt; outgoing.size(); i++) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>EdgeEditPart part = (EdgeEditPart)getSourceConnections().get(i);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>part.contributeEdgesToGraph(graph, map);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font color="#a52a2a"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void applyGraphResults(DirectedGraph graph, Map map) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>Node n = (Node)map.get(this);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>getFigure().setBounds(new Rectangle(n.x, n.y, n.width, n.height));</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>for (int i = 0; i &lt; getSourceConnections().size(); i++) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>EdgeEditPart trans = (EdgeEditPart) getSourceConnections().get(i);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>trans.applyGraphResults(graph, map);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">再就是边所对应</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的抽象类</span>
				<span lang="EN-US">EdgeEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。每一个要作为边添加到图中的</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，需要继承这个类。在上面</span>
				<span lang="EN-US">NodeEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中对其所对应的</span>
				<span lang="EN-US">Figure</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实并没有什么要求，但是对</span>
				<span lang="EN-US">EdgeEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所对应的</span>
				<span lang="EN-US">Figure</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，要求其</span>
				<span lang="EN-US">Figure</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须由一个</span>
				<span lang="EN-US">BendpointConnectionRouter</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，作为其</span>
				<span lang="EN-US">ConnectionRouter</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span>
				<span lang="EN-US">setConnectionRouter(new BendpointConnectionRouter())</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这样图的边的路径信息才能够被显示出来。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">public abstract class EdgeEditPart extends AbstractConnectionEditPart implements</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>GraphBuilder {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font color="#a52a2a"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void contributeEdgesToGraph(DirectedGraph graph, Map map) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>Node source = (Node)map.get(getSource());</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>Node target = (Node)map.get(getTarget());</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>Edge e = new Edge(this, source, target);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>e.weight = 2;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>graph.edges.add(e);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>map.put(this, e);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font color="#a52a2a"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void applyGraphResults(DirectedGraph graph, Map map) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>Edge e = (Edge)map.get(this);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>NodeList nodes = e.vNodes;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>PolylineConnection conn = (PolylineConnection)getConnectionFigure();</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>conn.setTargetDecoration(new PolygonDecoration());</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>if (nodes != null) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>List bends = new ArrayList();</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>for (int i = 0; i &lt; nodes.size(); i++) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 4">                            </span>Node vn = nodes.getNode(i);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 4">                            </span>int x = vn.x;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 4">                            </span>int y = vn.y;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 4">                            </span>if (e.isFeedback) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 5">                                   </span>bends.add(new AbsoluteBendpoint(x, y + vn.height));</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 5">                                   </span>bends.add(new AbsoluteBendpoint(x, y));</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font color="#a52a2a"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 4">                            </span>} else {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 5">                                   </span>bends.add(new AbsoluteBendpoint(x, y));</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 5">                                   </span>bends.add(new AbsoluteBendpoint(x, y + vn.height));</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>conn.setRoutingConstraint(bends);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>} else {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>conn.setRoutingConstraint(Collections.EMPTY_LIST);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最后的就是一个</span>
				<span lang="EN-US">LayoutManager</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来初始化图的创建，以及对图的信息进行解释了，生成最终布局了。这个</span>
				<span lang="EN-US">GraphLayoutManager</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为</span>
				<span lang="EN-US">GraphDiagramEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所对应的</span>
				<font color="#a52a2a">
						<span lang="EN-US">GraphDiagram</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
						<span lang="EN-US">LayoutManager</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，来显示图的内容。</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">public class GraphLayoutManager extends AbstractLayout {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>private GraphBuilder diagram;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font color="#a52a2a"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>GraphLayoutManager(GraphBuilder diagram) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>this.diagram = diagram;</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font color="#a52a2a"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>protected Dimension calculatePreferredSize(IFigure container, int wHint,</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>int hHint) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>container.validate();</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>List children = container.getChildren();</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>Rectangle result = new Rectangle().setLocation(container</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 4">                            </span>.getClientArea().getLocation());</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>for (int i = 0; i &lt; children.size(); i++)</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 3">                     </span>result.union(((IFigure) children.get(i)).getBounds());</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>result.resize(container.getInsets().getWidth(), container.getInsets()</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 4">                            </span>.getHeight());</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>return result.getSize();</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font color="#a52a2a"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>public void layout(IFigure container) {</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>DirectedGraph graph = new DirectedGraph();</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>Map partsToNodes = new HashMap();</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>diagram.contributeNodesToGraph(graph, partsToNodes);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>diagram.contributeEdgesToGraph(graph, partsToNodes);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>new DirectedGraphLayout().visit(graph);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 2">              </span>diagram.applyGraphResults(graph, partsToNodes);</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">
								<span style="mso-tab-count: 1">       </span>}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font color="#a52a2a">}</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以看到在</span>
				<span lang="EN-US">layout</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法中，首先生成了一个</span>
				<span lang="EN-US">DirectedGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并调用了</span>
				<span lang="EN-US">contributeNodesToGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及</span>
				<span lang="EN-US">contributeEdgesToGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法，将节点和边的信息添加到这个生成的</span>
				<span lang="EN-US">DirectedGraphGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，然后使用布局算法</span>
				<span lang="EN-US">DirectedGraphLayout().visit(graph)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来计算生成图的信息（这里使用了</span>
				<span lang="EN-US">visitor</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式）最后调用</span>
				<span lang="EN-US">applyGraphResults</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将图的信息应用到图形的显示上。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">至此，所有框架的工作做完了，如果要将模型作为一个有向图显示的话，只需要将模型的容器对象对应于</span>
				<span lang="EN-US">GraphDiagramEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（在</span>
				<span lang="EN-US">EditPartFactory</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中进行映射），为每一个需要表示为节点的对象，对应到一个继承于</span>
				<span lang="EN-US">NodeEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，为每一个需要表示为边的模型对象，对应到一个继承于</span>
				<span lang="EN-US">EdgeEditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这样，就能够将图的布局算法，应用到</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框架中了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里写的比较简单，使用起来也会有一些具体的约束。例如在有向图中，是不能够有孤立的节点的。如果使用</span>
				<span lang="EN-US">CompoundDirectedGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就不会有这样的问题，</span>
				<span lang="EN-US">CompoundDirectedGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以包括子图，可以支持更为复杂的图形。在</span>
				<span lang="EN-US">Flow Example</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中使用的就是</span>
				<span lang="EN-US">CompoundDirectedGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在后面，我或许会将这个框架进行改写，以使其支持</span>
				<span lang="EN-US">CompoundDirectedGraph</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来进行布局算法。下面的图是一个生成的例子，大家可以看一下效果:<br /><br /><img style="WIDTH: 993px; HEIGHT: 484px" height="525" alt="example_1.JPG" src="http://www.blogjava.net/images/blogjava_net/eclipshine/blogimages/example_1.JPG" width="993" border="0" /><br /><br />这是从OWL文件中读取内容之后生成的一个图的表示。可以看到，OWL的节点通过自动图的自动布局之后，已经有了较好的视觉效果。如果没有这样的布局的话，因为单纯的OWL文件中并不会包含节点的图的信息，图显示出来会变得非常的乱，所有的节点都会堆在一起。<br /></span>
		</p>
<img src ="http://www.blogjava.net/aegeanllh/aggbug/48413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aegeanllh/" target="_blank">llh</a> 2006-05-26 21:13 <a href="http://www.blogjava.net/aegeanllh/articles/48413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF框架分析之一（转载）</title><link>http://www.blogjava.net/aegeanllh/articles/48412.html</link><dc:creator>llh</dc:creator><author>llh</author><pubDate>Fri, 26 May 2006 13:11:00 GMT</pubDate><guid>http://www.blogjava.net/aegeanllh/articles/48412.html</guid><wfw:comment>http://www.blogjava.net/aegeanllh/comments/48412.html</wfw:comment><comments>http://www.blogjava.net/aegeanllh/articles/48412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aegeanllh/comments/commentRss/48412.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aegeanllh/services/trackbacks/48412.html</trackback:ping><description><![CDATA[
		<h2> </h2>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">首先我们来创建一个基于</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的浏览器（而不是编辑器），也就是说，它只能浏览一个模型，而不能够进行编辑。先关注于浏览而不是编辑，有助于理解</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的一些核心的概念。</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span class="SpellE">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GraphicalViewer</span>
						</b>
				</span>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">和</span>
				</b>
				<span class="SpellE">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">createControl</span>
						</b>
				</span>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">()</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">方法</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">在开始之前，最先要弄明白的是，一个</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的<span class="GramE">图如何</span>能够显示在由</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">ViewPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">在</span>
				<span class="SpellE">
						<span lang="EN-US" style="COLOR: red; mso-bidi-font-size: 10.5pt">createPartControl</span>
				</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">(Component parent)</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中提供的这个</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">parent</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">控件上。这是通过</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GraphicalViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">（准确的说应该是</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditPartViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">，</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GraphicalViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">是</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditPartViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的子接口，</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditPartViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的名字可能更容易理解一些：是为</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">创建一个</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">Viewer</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">进行显示）来进行的。</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GraphicalViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">可以将其自身适配到任何一个</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">SWT Control</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">上。它的</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">createControl</span>
				</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">()</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">方法接受一个</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">SWT Control</span>
				<span class="GramE">
						<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">来作</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">为适配的对象，将</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">所生成的</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">Figure</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">显示在这个</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">SWT Control</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">之上。（在内部实现上，</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GraphicalViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">使用</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">Draw2D</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">LightweightSystem</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">来做这个事情，将</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">Draw2d</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">Figure</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">对象绘制在</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">SWT</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">Control</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">上）</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">在弄明白了这一点之后，我们就会知道，实际上是将</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">放在</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">ViewPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中还是放在</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditorPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">对于</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">而言是没有本质的区别的，甚至将</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">放在任何的</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">SWT Composite</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">上都是可以的。不过</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">框架中提供了对创建</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditorPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的缺省实现。而如果要在</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">Editor</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">之外使用</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的话，需要额外的对</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GraphicalViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">做一些设置。</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面的这个图，给出了</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的几个主要关系，下面会有对这个图的解释。</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> <span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><img height="373" alt="image001.png" src="http://www.blogjava.net/images/blogjava_net/eclipshine/blogimages/image001.png" width="763" border="0" /></span></o:p>
				</span>
				<span lang="EN-US">
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span class="SpellE">
						<span class="GramE">
								<b style="mso-bidi-font-weight: normal">
										<span lang="EN-US">
												<br />setContent</span>
								</b>
						</span>
				</span>
				<span class="GramE">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US">()</span>
						</b>
				</span>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal">
				<span class="SpellE">
						<span lang="EN-US">GraphicalViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的思想，类似于</span>
				<span class="SpellE">
						<span lang="EN-US">JFace</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中所实现的</span>
				<span lang="EN-US">Viewer</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">思想：要显示一个控件，需要输入的是一个模型对象，要显示的内容根据输入的模型对象来进行的。因此，</span>
				<span class="SpellE">
						<span lang="EN-US">GraphicalViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同所有</span>
				<span class="SpellE">
						<span lang="EN-US">JFace</span>
				</span>
				<span lang="EN-US">Viewer</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一样有一个方法，叫做</span>
				<span class="SpellE">
						<span lang="EN-US">setContent</span>
				</span>
				<span lang="EN-US">(Object o)</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来接受一个模型对象，而对这个模型对象如何进行处理并显示，就是</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的工作了。</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在创建一个</span>
				<span class="SpellE">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GraphicalViewer</span>
						</b>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">之后，要使</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">能够运转起来，还需要做如下几件事情：</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo3; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">设置一个</span>
				</b>
				<span class="SpellE">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">RootEditPart</span>
						</b>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">：</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">RootEditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的是使整个</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">框架运行起来的关键之一。</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">RootEditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">并不对应于任何的模型对象，它将从</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">setContents</span>
				</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">()</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">方法中接收到的模型对象进行转换，并添加到整个的</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">体系中去，具体的添加过程后面会有详细讨论。</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo3; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">设置其</span>
				</b>
				<span class="SpellE">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditPartFactory</span>
						</b>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">：负责从模型到</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的转换。一般来说一个模型对象对应于一个</span>
				<span class="SpellE">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。这个类的</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo3; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">
						<span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">设置</span>
				</b>
				<span class="SpellE">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EditDomain</span>
						</b>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">：用来接收事件并选择恰当的事件处理函数进行处理，因为我们尚不需要进行编辑，因此这一个可以暂时略过。</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo3; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">
						<span style="mso-list: Ignore">4.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">调用</span>
				</b>
				<span class="SpellE">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">setContents</span>
						</b>
				</span>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">()</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">方法</span>
				</b>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">：为其设置要显示的内容。</span>
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由</span>
				<span class="SpellE">
						<span lang="EN-US">GraphicalViewer</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所显示的内容，肯定是一个</span>
				<span lang="EN-US">Draw2d</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span>
				<span class="SpellE">
						<span lang="EN-US">IFigure</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象。而如何从一个模型对象到一个</span>
				<span lang="EN-US">Figure</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象呢？这中间的联系就是通过</span>
				<span class="SpellE">
						<span lang="EN-US">EditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来完成的。</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用的是</span>
				<span lang="EN-US">MVC</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式，</span>
				<span lang="EN-US">Model</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部分可以使任意的模型对象；</span>
				<span lang="EN-US">View</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部分就是</span>
				<span lang="EN-US">Draw2d</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span class="SpellE">
						<span lang="EN-US">IFigure</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象，联系</span>
				<span lang="EN-US">Model</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">View</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">Controller</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，在</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中称为</span>
				<span class="SpellE">
						<span lang="EN-US">EditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。简单的说，</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span>
				<span class="SpellE">
						<span lang="EN-US">EditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，负责将模型转换为</span>
				<span class="SpellE">
						<span lang="EN-US">IFigure</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的显示，它从模型中读取信息，生成</span>
				<span lang="EN-US">Figure</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；另一方面，</span>
				<span class="SpellE">
						<span lang="EN-US">EditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">负责从</span>
				<span lang="EN-US">View</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接收事件，并将这些事件转化为对模型的修改。在这一部分中，我们暂时只关注于第一个方面：</span>
				<span class="SpellE">
						<span lang="EN-US">EditPart</span>
				</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是如何将一个模型转换为</span>
				<span lang="EN-US">Figure</span>
				<span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以进行显示的。</span>
		</p>
<img src ="http://www.blogjava.net/aegeanllh/aggbug/48412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aegeanllh/" target="_blank">llh</a> 2006-05-26 21:11 <a href="http://www.blogjava.net/aegeanllh/articles/48412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF学习笔记（转载）</title><link>http://www.blogjava.net/aegeanllh/articles/48409.html</link><dc:creator>llh</dc:creator><author>llh</author><pubDate>Fri, 26 May 2006 13:02:00 GMT</pubDate><guid>http://www.blogjava.net/aegeanllh/articles/48409.html</guid><wfw:comment>http://www.blogjava.net/aegeanllh/comments/48409.html</wfw:comment><comments>http://www.blogjava.net/aegeanllh/articles/48409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aegeanllh/comments/commentRss/48409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aegeanllh/services/trackbacks/48409.html</trackback:ping><description><![CDATA[
		<h2> </h2>
		<span lang="EN-US">
				<?XML:NAMESPACE PREFIX = O /?>
				<o:p>
				</o:p>
		</span>
		<b>
				<span lang="EN-US" style="FONT-SIZE: 14pt">1. GEF</span>
		</b>
		<b>
				<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">的</span>
		</b>
		<b>
				<span lang="EN-US" style="FONT-SIZE: 14pt">View</span>
		</b>
		<b>
				<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">实际上包含有很多部分，而不仅仅只是</span>
		</b>
		<b>
				<span lang="EN-US" style="FONT-SIZE: 14pt">figure</span>
		</b>
		<span lang="EN-US">:<span>  </span></span>
		<p class="MsoNormal">
				<span lang="EN-US">还包括visual parts, feedback, handles, toolipts等等.</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">It includes the visual part, which serves as the primary representation for the model object(s).<span>  </span>The most flexible visual parts are Figures from draw2d.<span>  </span>GEF also provides support for SWT TreeItems, but support for other visuals can easily be added.<span>  </span>While "visual part" refers to the object primarily representing a model object, the more encompassing "view" includes feedback, handles, tooltips, and all things visible to the user.<span>  </span>All of these make up the view, and it is the controller's job to construct and manage them. </span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
				<b>
						<span lang="EN-US" style="FONT-SIZE: 14pt">2. Graphical editing</span>
				</b>
				<b>
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">可以被定义为</span>
				</b>
				<b>
						<span lang="EN-US" style="FONT-SIZE: 14pt">:<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">1) </span>
				<span style="FONT-FAMILY: 宋体">操作模型，这是通过对</span>
				<span lang="EN-US">Request</span>
				<span style="FONT-FAMILY: 宋体">进行响应，生成</span>
				<span lang="EN-US">Command</span>
				<span style="FONT-FAMILY: 宋体">来完成的。</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">2) </span>
				<span style="FONT-FAMILY: 宋体">显示</span>
				<span lang="EN-US">Feedback</span>
				<span style="FONT-FAMILY: 宋体">，在复杂的交互中，</span>
				<span lang="EN-US">EditParts</span>
				<span style="FONT-FAMILY: 宋体">需要为用户显示操作的反馈。</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">3) </span>
				<span style="FONT-FAMILY: 宋体">上面所提的两个工作，均可以被</span>
				<span lang="EN-US">EditParts</span>
				<span style="FONT-FAMILY: 宋体">代理到其他额外的</span>
				<span lang="EN-US">EditParts</span>
				<span style="FONT-FAMILY: 宋体">上。</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
				<b>
						<span lang="EN-US" style="FONT-SIZE: 14pt">3. EditPolicy</span>
				</b>
				<b>
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">的</span>
				</b>
				<b>
						<span lang="EN-US" style="FONT-SIZE: 14pt">Role</span>
				</b>
				<b>
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">字符串的作用</span>
				</b>
				<span style="FONT-FAMILY: 宋体">，是使得</span>
				<span lang="EN-US">EditPolicy</span>
				<span style="FONT-FAMILY: 宋体">能够用过这个</span>
				<span lang="EN-US">Key</span>
				<span style="FONT-FAMILY: 宋体">来进行替换。例如子类可以通过</span>
				<span lang="EN-US">Role</span>
				<span style="FONT-FAMILY: 宋体">这个</span>
				<span lang="EN-US">Key</span>
				<span style="FONT-FAMILY: 宋体">来覆盖其父类所安装的</span>
				<span lang="EN-US">EditPolicy</span>
				<span style="FONT-FAMILY: 宋体">。在</span>
				<span lang="EN-US">GEF</span>
				<span style="FONT-FAMILY: 宋体">中，</span>
				<span lang="EN-US">Role</span>
				<span style="FONT-FAMILY: 宋体">和</span>
				<span lang="EN-US">EditPolicies</span>
				<span style="FONT-FAMILY: 宋体">能够被划分为两类：</span>
				<span lang="EN-US">Graphical</span>
				<span style="FONT-FAMILY: 宋体">和</span>
				<span lang="EN-US">Non-Graphical</span>
				<span style="FONT-FAMILY: 宋体">。非图形的角色能够不需要知道任何</span>
				<span lang="EN-US">View</span>
				<span style="FONT-FAMILY: 宋体">的信息来处理模型对象，也就是说这种角色在不同类型的</span>
				<span lang="EN-US">viewers</span>
				<span style="FONT-FAMILY: 宋体">中是可重用的。</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
				<b>
						<span lang="EN-US" style="FONT-SIZE: 14pt">4. </span>
				</b>
				<b>
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">角色及其定义</span>
				</b>
				<b>
						<span lang="EN-US" style="FONT-SIZE: 14pt">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US" style="COLOR: red">Non-Graphical Roles:<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">1) COMPONENT_ROLE: <o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: 宋体">一个</span>
				<span lang="EN-US">Component</span>
				<span style="FONT-FAMILY: 宋体">存在于一个</span>
				<span lang="EN-US">parent</span>
				<span style="FONT-FAMILY: 宋体">中，并且可以从</span>
				<span lang="EN-US">parent</span>
				<span style="FONT-FAMILY: 宋体">中删除。更为一般的，它可以使任何只涉及到这个</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体">，而与</span>
				<span lang="EN-US">View</span>
				<span style="FONT-FAMILY: 宋体">无关的东西。</span>
				<span lang="EN-US">(More generally, it is anything that involves only this EditPart.)</span>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">2) CONNECTION_ROLE<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: 宋体">这是</span>
				<span lang="EN-US">ConnectionEditParts</span>
				<span style="FONT-FAMILY: 宋体">应该有的一个基本角色。</span>
				<span lang="EN-US">Connections</span>
				<span style="FONT-FAMILY: 宋体">同</span>
				<span lang="EN-US">Components</span>
				<span style="FONT-FAMILY: 宋体">有一点不同，删除</span>
				<span lang="EN-US">Connections</span>
				<span style="FONT-FAMILY: 宋体">时通常还需要其从其</span>
				<span lang="EN-US">source</span>
				<span style="FONT-FAMILY: 宋体">和</span>
				<span lang="EN-US">target</span>
				<span style="FONT-FAMILY: 宋体">节点中删除，而不是从其</span>
				<span lang="EN-US">parent</span>
				<span style="FONT-FAMILY: 宋体">中删除。</span>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">3) CONTAINER_ROLE<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: 宋体">大部分拥有</span>
				<span lang="EN-US">children</span>
				<span style="FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US">EditParts</span>
				<span style="FONT-FAMILY: 宋体">都应该具有这个角色。一个</span>
				<span lang="EN-US">Container</span>
				<span style="FONT-FAMILY: 宋体">会涉及到</span>
				<span lang="EN-US">adds/orphans</span>
				<span style="FONT-FAMILY: 宋体">以及</span>
				<span lang="EN-US">creates/deletes</span>
				<span style="FONT-FAMILY: 宋体">等操作。</span>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">4) NODE_ROLE<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: 宋体">如果一个</span>
				<span lang="EN-US">EditParts</span>
				<span style="FONT-FAMILY: 宋体">用户</span>
				<span lang="EN-US">Connection</span>
				<span style="FONT-FAMILY: 宋体">，则其应该具有这个角色，它可以用来创建，删除，重新连接一个</span>
				<span lang="EN-US">Connection</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
				<b>
						<span lang="EN-US" style="COLOR: red">Graphical Roles:<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">1) PRIMARY_DRAG_ROLE:<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: 宋体">用来允许用户拖动这个</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体">。用户可以通过点击这个</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体">然后拖动，或者点击这个</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体">所创建的一个</span>
				<span lang="EN-US">Handle</span>
				<span style="FONT-FAMILY: 宋体">来进行拖动。</span>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">2) LAYOUT_ROLE:<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">Layout</span>
				<span style="FONT-FAMILY: 宋体">角色用来放在一个</span>
				<span lang="EN-US">Container</span>
				<span style="FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体">上，这个</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体">拥有一个</span>
				<span lang="EN-US">graphical layout</span>
				<span style="FONT-FAMILY: 宋体">。如果这个</span>
				<span lang="EN-US">layout</span>
				<span style="FONT-FAMILY: 宋体">有</span>
				<span lang="EN-US">constraints</span>
				<span style="FONT-FAMILY: 宋体">，则它需要通过计算来得到这个</span>
				<span lang="EN-US">constraints</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">3) GRAPHICAL_NODE_ROLE:<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">A node supports connections to terminals.<span>  </span>When creating and manipulating connections, EditPolicies with this role might analyze a Request's data to perform "hit testing" on the graphical view and determine the semantics of the connection.</span>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">4) CONNECTION_ENDPOINTS_ROLE:<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: 宋体">这个</span>
				<span lang="EN-US">Role</span>
				<span style="FONT-FAMILY: 宋体">允许用户拖动一个</span>
				<span lang="EN-US">ConnectionEditPart</span>
				<span style="FONT-FAMILY: 宋体">的端点。</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">5) CONNECTION_BENDPOINTS_ROLE:</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: 宋体">这个</span>
				<span lang="EN-US">Role</span>
				<span style="FONT-FAMILY: 宋体">允许用户能够在一个</span>
				<span lang="EN-US">Connection</span>
				<span style="FONT-FAMILY: 宋体">中间拖动和创建</span>
				<span lang="EN-US">bendpoints</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">6) SELECTION_FEEDBACK_ROLE:<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span style="FONT-FAMILY: 宋体">这个角色只是用来显示</span>
				<span lang="EN-US">feedback</span>
				<span style="FONT-FAMILY: 宋体">。当鼠标进入或者在一个</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体">上暂停时，</span>
				<span lang="EN-US">Selection Tool</span>
				<span style="FONT-FAMILY: 宋体">会发送两个类型的</span>
				<span lang="EN-US">request</span>
				<span style="FONT-FAMILY: 宋体">给</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体">。安装了这个角色的</span>
				<span lang="EN-US">EditPart</span>
				<span style="FONT-FAMILY: 宋体">能够在此时接受这些请求来改变</span>
				<span lang="EN-US">view</span>
				<span style="FONT-FAMILY: 宋体">的样子，或者弹出</span>
				<span lang="EN-US">tip</span>
				<span style="FONT-FAMILY: 宋体">，</span>
				<span lang="EN-US">label</span>
				<span style="FONT-FAMILY: 宋体">等。</span>
		</p>
		<p class="MsoNormal">
				<b>
						<span lang="EN-US">7) TREE_CONTAINER_ROLE: <o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">SWT Tree</span>
				<span style="FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US">Layout Role</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
<img src ="http://www.blogjava.net/aegeanllh/aggbug/48409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aegeanllh/" target="_blank">llh</a> 2006-05-26 21:02 <a href="http://www.blogjava.net/aegeanllh/articles/48409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>