扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
表C.4
当一个父图形调用带有constraint参数的add()方法时给子图形指定位置时,由LayoutManager负责来“解释”这
个constraint并实际设置该子图形的位置。
我们将为我们的编辑器选择XYLayout。现在我们需要一个合适的容器类:我们选择LayeredPane。
3.2、LayeredPanes
由于Draw2d应用可能会很复杂,LayeredPane提供了很多“层”用来显示Figuer,使用透明的层(Layer),你可
以将GUI分离成很多个面,不同的Layer有不同的特性,例如不同的LayoutManager。这对我们的flowchart编辑器来
说很重要,因为我们的图上不仅有Figure,还有Connection和feedback。
理解LayeredPane如何工作的第一步,是学习Layer。Layer是透明的Figure,并包含两个属于它自己的方法:
containsPoint(),和findFigureAt()。这些Layer都有固定的边界,但FreeformLayer可以向任意方向延伸,这对
于那些有很大的图(大于窗口)的应用来说是必需的。
LayeredPane使用add()方法来加入新的Layer,方法参数指定Layer对象,一个用来识别它的key,以及一个index
来表明其位置。当然你也可以从LayeredPane上删除一个Layer,或者改变它的index。
通过选用LayeredPane的子类,你还可获得更多的功能。比如说,你想给你的pane添加缩放的功能,那么有Scalabl
eLayeredPane,如果你想使得窗口向任意方向延伸,那么可以使用FreeformLayeredPane,如果两者都需要的话,可
用ScalableFreeformLayeredPane。在我们的flowchart中,我们只需要延伸功能;列表C.2的代码是用来作为我们
最基本的编辑器的FreeformLayeredPane。
列表C.2:ChartFigure.java
package com.swtjface.AppC;
import org.eclipse.draw2d.*;
public class ChartFigure extends FreeformLayeredPane
{
public ChartFigure()
{
setLayoutManager(new FreeformLayout());
setBorder(new MarginBorder(5));
setBackgroundColor(ColorConstants.white);
setOpaque(true);
}
}
在以上代码中,我们为FreeformLayeredPane设置了外观属性,但到目前为止尚未加入任何Layer,后续章节将完成
这个任务。
3.3、ScrollPanes与Viewports
ScrollPane可以加在任何的Figuer上,为其提供滚动条的功能。并且可以设置滚动条为始终可见、始终不可见,或
者在需要的时候才出现。
在任何一个给定时刻,只有ScrollPane的一部分可以被看见,这个可见的区域称为Viewport。他们类似于Layers但
提供了更多方法来控制大小和形状。
现在,我们已经有了flowchart最底层的容器,我们需要创建各种图形加到这个容器上面来。为此,我们得研究一下
Draw2d的Graphics类,以及它的绘图功能。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者