Sponsored link
StackLayout(Draw2D/GEF - Java Eclipse)
StackLayoutはレイヤーのように子Figureを重ねていきます。
親Figureとすべての子Figureのサイズは同じになります。
そして追加した順番に描画していきます。(下の描画が上の描画で見えない時があります)
ただし、StackLayoutには少しリサイズに関して、クセがあります。
それについてはこちらを見てください。
例
3つのFigureを追加
StackLayoutのFigureに、緑のRectangleFigureとオレンジのRectangleFigureとLabelFigureを追加
最初の緑のRectangleFigureはオレンジのRectangleFigureに上書きされて見えない。

StackLayout layout=new StackLayout();
panel.setLayoutManager(layout);
RectangleFigure rect1=new RectangleFigure();
rect1.setBackgroundColor(ColorConstants.green);
panel.add(rect1);
rect2 = new RectangleFigure();
rect2.setBackgroundColor(ColorConstants.orange);
panel.add(rect2);
panel.add(new Label("label"));
クリック時に、2つ目のオレンジのRectangleFigureを非表示にする。

ルートFigureであるPanelのイベントをマウスイベントを拾うために、
import org.eclipse.draw2d.MouseListenerを実装したクラスを作成する
するとマウスでクリックしている間は、オレンジのRectangleFigureを非表示になり、
最初に追加した、緑のRectangleFigureが見える。
--さきほどの続き--
panel.addMouseListener(new OnOff());
}
public class OnOff implements MouseListener{
public void mousePressed(MouseEvent me) {
rect2.setVisible(false);
}
public void mouseReleased(MouseEvent me) {
rect2.setVisible(true);
}
public void mouseDoubleClicked(MouseEvent me) {
}
}
コード全文
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.ColorConstants;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.MouseEvent;
import org.eclipse.draw2d.MouseListener;
import org.eclipse.draw2d.Panel;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.StackLayout;
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 StackLayoutTest {
private RectangleFigure rect2;
public StackLayoutTest(Shell shell) {
shell.setBounds(0,0,150,150);
shell.setLayout(new FillLayout(SWT.VERTICAL));
FigureCanvas canvas = new FigureCanvas(shell);
Panel panel=new Panel();
canvas.setContents(panel);
//StackLayout layout=new StackLayout();
StackLayout layout=new CustomStackLayout();
panel.setLayoutManager(layout);
RectangleFigure rect1=new RectangleFigure();
rect1.setBackgroundColor(ColorConstants.green);
panel.add(rect1);
rect2 = new RectangleFigure();
rect2.setBackgroundColor(ColorConstants.orange);
panel.add(rect2);
panel.add(new Label("label"));
panel.addMouseListener(new OnOff());
}
public class OnOff implements MouseListener{
public void mousePressed(MouseEvent me) {
rect2.setVisible(false);
}
public void mouseReleased(MouseEvent me) {
rect2.setVisible(true);
}
public void mouseDoubleClicked(MouseEvent me) {
}
}
public static void main(String[] args) {
Display display=new Display();
Shell shell=new Shell(display);
StackLayoutTest app=new StackLayoutTest(shell);
shell.open();
while(!shell.isDisposed()){
if (!display.readAndDispatch ()){
display.sleep ();
}
}
display.dispose();
}
}
