我是Eclipse插件开发的初学者。
我使用Nebula开发了一些Eclipse插件,提供了扩展视图组件,如图形、表等。
我想在视图中绘制三个组件(使用MeterFigure、SWT列表、XYGraph)。
但是,当我创建三个组件时,视图中是空白的!
所以,我检查我的代码,但我找不到哪里有问题。
这是空白的捕获(见图和文本之间的空格)。
这是创建三个组件的代码。
@Override
public void createPartControl(Composite parent) {
...
GridLayout layout = new GridLayout(1, true);
parent.setLayout(layout);
parent.setLayoutData(new GridData(GridData.GRAB_VERTICAL));
merterFigure = new merterFigureClass(parent, SWT.NONE);
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
merterFigure.setLayoutData(gridData);
list = new ListClass(parent, SWT.NONE);
gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
list.setLayoutData(gridData);
list.initialize();
graph = new GraphClass(parent, SWT.NONE);
gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
graph.setLayoutData(gridData);
list.setGraph(graph);
}
我是MeterFigureClass。
public class MeterFigureClass extends Canvas {
private MeterFigure meterFigure;
public MeterFigureClass(Composite parent, int style) {
super(parent, style);
LightweightSystem lws = new LightweightSystem(this);
meterFigure = new MeterFigure();
meterFigure.setBackgroundColor(XYGraphMediaFactory.getInstance().getColor(255, 255, 255));
meterFigure.setValueLabelVisibility(true);
meterFigure.setRange(0, 100);
meterFigure.setLoLevel(35);
meterFigure.setLoloLevel(20);
meterFigure.setHiLevel(85);
meterFigure.setHihiLevel(70);
meterFigure.setMajorTickMarkStepHint(80);
lws.setContents(readabilityScore);
}
public void setValue(double value) {
this.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
meterFigure.setValue(value);
}
});
}
}
我是ListClass。
public class ListClass extends Canvas {
private org.eclipse.swt.widgets.List list;
private List<Data> dataList;
private GraphClass graph;
public ListClass(Composite parent, int style) {
super(parent, style);
list = new org.eclipse.swt.widgets.List(parent, SWT.V_SCROLL | SWT.H_SCROLL);
dataList = new ArrayList<Data>();
...
GridData gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.verticalAlignment = SWT.FILL;
list.setLayoutData(gridData);
}
....
public void setGraph(GraphClass Graph) {
this.Graph = Graph;
}
....
}
我是GraphClass。
ublic class MatrixGraph extends Canvas {
private char count;
private XYGraph matrixGraph;
private LightweightSystem lws;
public MatrixGraph(Composite parent, int style) {
super(parent, style);
addPaintListener(new PaintListener() {
@Override
public void paintControl(org.eclipse.swt.events.PaintEvent e) {
MatrixGraph.this.paintControl(e);
}
});
}
public void paintControl(PaintEvent e) {
if (count < 1)
count++;
else {
lws = new LightweightSystem(this);
matrixGraph = new XYGraph();
setGraphProperties();
}
}
...
}
发布于 2017-02-21 00:14:05
在GridData
布局中,您将指定:
gridData.grabExcessVerticalSpace = true;
这是告诉布局抓住尽可能多的垂直空间,即使它可能只是空白。由于要为多个控件指定此操作,因此在控件之间分配额外的空间。
如果您不想使用空白,请使用
gridData.grabExcessVerticalSpace = false;
或者忽略这一点,因为这是默认的。
此外,也尽量不要使用填充的垂直对齐,顶部可能会更好:
gridData.verticalAlignment = SWT.TOP;
https://stackoverflow.com/questions/42361833
复制相似问题