アキはフリーランスのプログラマーです >> Java >> Eclipse
Sponsored link

このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース

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

このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース