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

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

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

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