Sponsored link
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);
関連
コード全文
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(); } }