初めての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();
}
}
