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();
}
}
