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

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

擬似ImageBorder(Draw2D/GEF - Java Eclipse)

厳密に言うと、ここで紹介する方法はBorderではありません。

イメージFigureの上に、ダミーFigureをセットして、そこに、MarginBorderを置くことで、

イメージFigureの縁を表示されるようにしているだけです。


 うまく使えば、かわいい枠で表示できるかもしれないす。

次は、Borderをimplementsしたバージョンを作ってみようかな。

解説

Stackでサイズを最大取得しています。

		imageFigure.setLayoutManager(new StackLayout());
		
		Figure center=new Figure();
		imageFigure.add(center);
		center.setBorder(new MarginBorder(25,40,25,40));
		center.setLayoutManager(new StackLayout());
		center.add(new RectangleFigure());

コード全文

GEFに含まれるdraw2d.jarが必要です。

コードはCVSからダウンロードできます。


/*
 * Created on 2005/08/02
 * Author aki@www.xucker.jpn.org
 * License Apache2.0 or Common Public License
 */
package example.draw2d;

import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.ImageFigure;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.Panel;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.StackLayout;
import org.eclipse.draw2d.XYLayout;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * 
 *
 */
public class ImageAndMarginBorderTest {

   

    public ImageAndMarginBorderTest(Shell shell) {
        
		shell.setBounds(0,0,250,200);
		shell.setLayout(new FillLayout(SWT.VERTICAL));
		
		FigureCanvas canvas = new FigureCanvas(shell);
		Panel panel=new Panel();
		canvas.setContents(panel);
		
		
		XYLayout layout=new XYLayout();
		
		panel.setLayoutManager(layout);
		
		Image img=new Image(null,this.getClass().getResourceAsStream("/example/draw2d/waku.gif"));
		ImageFigure imageFigure=new ImageFigure(img);
		panel.add(imageFigure,new Rectangle(10,10,-1,-1));
		
		imageFigure.setLayoutManager(new StackLayout());
		
		Figure center=new Figure();
		imageFigure.add(center);
		center.setBorder(new MarginBorder(25,40,25,40));
		center.setLayoutManager(new StackLayout());
		center.add(new RectangleFigure());
		
    }
    

    
    
	public static void main(String[] args) {
		Display display=new Display();
		Shell shell=new Shell(display);
		
		
		ImageAndMarginBorderTest app=new ImageAndMarginBorderTest(shell);
		
		
		shell.open();
		
		while(!shell.isDisposed()){			
			if (!display.readAndDispatch ()){
					display.sleep ();
				  }
		}
		display.dispose();
	}
}

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