draw2d 使用心得

可以不用显式创建lightweightsystem类就可以展现图形。层次结构:Display ->Shell->FigureCanvas->Figures(需要展现的Figure),代码框架见最后的代码示例。

其中特别需要注意的是,如果FigureCanvas没有指定大小(setSize()),其包括的图形不会正常展现。怀疑是没有建立坐标,无法画出子图。

另外很奇怪的一点,如果在上面的content使用LayeredPane,再用Layer添加Figure,图形无法正常展现。这个改天再研究一下,代码如下:

package org.eclipse.draw2d.examples.connections;

import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Layer;
import org.eclipse.draw2d.LayeredPane;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Mytest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Display d = Display.getDefault();
		Shell shell = new Shell(d, SWT.SHELL_TRIM);
		shell.setText("dingf");
		FigureCanvas fc = new FigureCanvas(shell);
		fc.setSize(600, 600);
		IFigure content = new Figure();

		LayeredPane lp = new LayeredPane();
		Layer l = new Layer();

		content.add(lp);
		content.setOpaque(false);
		// l.setForegroundColor(ColorConstants.blue);
		RectangleFigure rf = new RectangleFigure();
		rf.setBorder(new LineBorder(5));
		rf.setBounds(new Rectangle(10, 10, 100, 100));
		rf.setForegroundColor(ColorConstants.blue);
		rf.setVisible(true);
		rf.setValid(true);
		l.add(rf);
		// lp.setBounds(rf.getBounds());
		lp.add(l);
		// lp.setLayoutManager(new FreeformLayout());
		fc.setContents(content);
		fc.getViewport().setContentsTracksHeight(true);
		fc.getViewport().setContentsTracksWidth(true);
		shell.pack();
		shell.open();

		while (!shell.isDisposed())
			while (!d.readAndDispatch())
				d.sleep();
	}
}


你可能感兴趣的:(GEF)