可以不用显式创建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();
}
}