Draw2D 教程(三)

 3、使用LayoutManagers 和 Panes
    Layoutmanagers,就像SWT中的Layout類,用來描述子組件在容器中的位置和大小。這一節將介紹LayoutManager
  的子類,以及怎樣使用它們。
    另外,我們還會涉及Draw2d的panes。ScrollPanes,LayerPanes,以及它們的子類。Draw2d沒有Composite類,
  而這些pane一般就用來作爲GUI的背景容器。這些容器使得開發圖形編輯器更加容易。在這一節的最後,我們會繼承
  FreeformLayerdePane,創建flowchart工程的第一個Figure。
  3.1、理解LayoutManager的子類
    在SWT中,容器以來一個默認的佈局策略來安排位於其上的組件;而在Draw2d中你需要選擇一個LayoutManager的
  子類,這些子類中,FlowFigureLayout和ScrollbarLayout只針對特定的Figure,我們將關注其他三個(表C.4)

 表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類,以及它的繪圖功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章