初めてのDraw2D
Draw2Dとは、GEFプラグインに含まれる描画に関するライブラリーです。
Draw2Dはたぶん、UML図などを作成するために設計されたのだと思います。
一言でいえば、Object指向で描画ができます。そのためのフレームワークです。
各描画単位としてFigureを拡張したものを作成します。
Figureには他のFigureを追加して、親のFigureの上に描画をすることが可能です。
そして親Figureはコンポーネントと同じように子Figureのレイアウトを管理できます。
またスクロールを自動的に出すことも可能です。
他にもZoomが出来たりもします。
少し細かくなりますが、FigureとFigureを線で結んだりもできます。
ここでは簡単なDraw2Dの使用例を紹介します。
このドキュメントを理解するには、最低ある程度のSWTプログラムの経験が必要です。
プログラム動作内容
起動すると、以下なようなラベルが表示されます。
コード解説
Draw2D関するコードは本当にわずかです。
まず、FigureCanvasというクラスを作成します。
これは、FigureとComponentをつなぐためのクラスです。
同じ役目のクラスとして 引数にCanvasを渡す、LightweightSystemがあります。
FigureCanvas canvas = new FigureCanvas(shell);
つぎに、Draw2DのPanelを作成します。
これはFigureです。
そしてこのFigureのLayoutをFlowLayout(順番に並べる)とします。
Draw2DはFigureにツリー上にFigureを配置しますので、RootとなるFigureが必ず必要になります。
そして、setContents()メソッドで、Draw2DのrootとなるFigureとして設定します。
Panel panel=new Panel(); panel.setLayoutManager(new FlowLayout(false)); canvas.setContents(panel);
ここでは例としてDraw2DのLabelを作成します。
Draw2Dでは後から親となるFigureに追加しますので、引数に親Figureは必要ありません。
for(int i=0;i<3;i++){ Label label=new Label("draw2d "+i); panel.add(label); }
Labelという単純なFigureを使用したのでいまいち面白さはありませんが、
Draw2Dの雰囲気はつかめたと思います。
次回はもう少し複雑なFigureを扱います。
コード全文
GEFに含まれるdraw2d.jarが必要です。
コードはCVSからダウンロードできます。
/* * Created on 2005/07/28 * Author aki@www.xucker.jpn.org * License Apache2.0 or Common Public License */ package example.draw2d; import org.eclipse.draw2d.FigureCanvas; import org.eclipse.draw2d.FlowLayout; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.Panel; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /** * * */ public class Draw2DLabel { public Draw2DLabel(Shell shell) { shell.setBounds(0,0,150,150); shell.setLayout(new FillLayout(SWT.VERTICAL)); FigureCanvas canvas = new FigureCanvas(shell); Panel panel=new Panel(); panel.setLayoutManager(new FlowLayout(false)); canvas.setContents(panel); for(int i=0;i<3;i++){ Label label=new Label("draw2d "+i); panel.add(label); } } public static void main(String[] args) { Display display=new Display(); Shell shell=new Shell(display); Draw2DLabel app=new Draw2DLabel(shell); shell.open(); while(!shell.isDisposed()){ if (!display.readAndDispatch ()){ display.sleep (); } } display.dispose(); } }