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

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

Border(Draw2D/GEF - Java Eclipse)

基本的に、Figureの内側に縁を描きます。

といっても、Borderのサイズだけ、Figureはサイズを拡大するので、外側といってもいいですが。

このBorderのサイズは、Insetsで定義されています。


FrameBorder、複数のBorderを組み合わせたクラスを作成することも可能

ButtonBorderなど、特定のClass専用のBorderもある。


解説

Figureに、setBorder()でBorderを設定すればいい。

ただし、Label(Figure)にFrameBorderやTitledBorderは、TextAlignmentをTOPかBOTTOMにした方がいいです。

これは、Labelの内部のレイアウトでCenterの場合には、Borderを気にしないからです。

		label=new Label("FrameBorder");
		label.setTextAlignment(Label.TOP);
		label.setBorder(new FrameBorder("FrameBorder"));
		
		panel.add(label);

関連

擬似イメージBorderはどうでしょうか?

コード全文

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

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


package example.draw2d;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.FlowLayout;
import org.eclipse.draw2d.FocusBorder;
import org.eclipse.draw2d.FrameBorder;
import org.eclipse.draw2d.GroupBoxBorder;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.Panel;
import org.eclipse.draw2d.SimpleEtchedBorder;
import org.eclipse.draw2d.SimpleLoweredBorder;
import org.eclipse.draw2d.SimpleRaisedBorder;
import org.eclipse.draw2d.TitleBarBorder;
import org.eclipse.draw2d.geometry.Rectangle;
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 BorderTest {

   public BorderTest(Shell shell) {
       
		shell.setBounds(0,0,260,250);
		shell.setLayout(new FillLayout(SWT.VERTICAL));
		
		FigureCanvas canvas = new FigureCanvas(shell);
		Figure root=new Figure();
		root.setLayoutManager(null);
		Panel panel=new Panel();
		panel.setBackgroundColor(ColorConstants.orange);
		panel.setSize(250,250);
		
		canvas.setContents(root);
		root.add(panel);
		
		
		FlowLayout layout=new FlowLayout(true);
		
		
		panel.setLayoutManager(layout);
		
		Label label;
		label=new Label("No Border");
		
		panel.add(label);
		

		label=new Label("MarginBorder");
		label.setBorder(new MarginBorder(4));
		panel.add(label);
		
		
		label=new Label("LineBorder");
		label.setBorder(new LineBorder(3));
		panel.add(label);
		
		label=new Label("FocusBorder");
		label.setBorder(new FocusBorder());
		panel.add(label);
		
		
		/*
		label=new Label("ButtonBorder");
		label.setBorder(new ButtonBorder());
		panel.add(label);
		*/
		
		label=new Label("SimpleEtchedBorder");
		label.setBorder(SimpleEtchedBorder.singleton);
		panel.add(label);
		
		label=new Label("SimpleLoweredBorder");
		label.setBorder(new SimpleLoweredBorder());
		panel.add(label);
		
		label=new Label("SimpleRaisedBorder");
		label.setBorder(new SimpleRaisedBorder());
		panel.add(label);
		
		label=new Label("FrameBorder");
		label.setTextAlignment(Label.TOP);
		label.setBorder(new FrameBorder("FrameBorder"));
		
		panel.add(label);
		
		label=new Label("GroupBoxBorder");
		
		label.setBorder(new GroupBoxBorder());
		panel.add(label);
		
		label=new Label("TitleBarBorder");
		
		label.setTextAlignment(Label.TOP);
		
		label.setBorder(new TitleBarBorder());
		
		label.setBounds(new Rectangle(0,0,100,100));
		panel.add(label);
		
		
   }
   public void set(Figure parent,String label){
       Label labelFigure=new Label(label);
       labelFigure.setBorder(new LineBorder());
       parent.add(labelFigure);
   }
   
	public static void main(String[] args) {
		Display display=new Display();
		Shell shell=new Shell(display);
		
		
		BorderTest app=new BorderTest(shell);
		
		
		shell.open();
		
		
		while(!shell.isDisposed()){			
			if (!display.readAndDispatch ()){
					display.sleep ();
				  }
		}
		display.dispose();
	}
}

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