2017-02-21 79 views
1

我是Eclipse插件开发的初学者。如何删除Eclipse插件中的空白空间?

我已经开发了一些Eclipse插件使用星云在于提供扩展视图分量例如图形,表格等

我想绘制在视图中三种组分(使用MeterFigure,SWT的列表,XYGraph)。

但是,当我创建三个组件时,视图中有空白!

所以,我检查我的代码,但我找不到问题在哪里。

这是空白的捕获(请参阅图和文本之间的空白)。 enter image description here

这是创建三个组件的代码。

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

     } 
    } 

    ... 
} 

回答

2

在你GridData布局要指定:

gridData.grabExcessVerticalSpace = true; 

这是告诉布局抓住尽可能多的垂直空间尽可能即使它可能仅仅是空白。由于您为多个控件指定了这个值,所以额外的空间会在控件之间分配。

如果您不希望空白使用

gridData.grabExcessVerticalSpace = false; 

或只是忽略这个,因为它是默认的。

也尽量不要使用填补垂直对齐,TOP可能会更好:

gridData.verticalAlignment = SWT.TOP; 
+0

非常感谢你。为了你的回答,我试了你的答案,但它仍然存在。它只是减少空白的大小.... – user3649231

+0

尝试更改垂直对齐以及 - 看到更新的答案。我没有安装所有的东西,所以我无法测试它。但是您需要了解更多关于GridLayout的知识,并查看每个组件的布局。 –

+0

嗯......谢谢你的建议。我将开始学习GridLayout。而且,在我的GridData版本中,没有TOP属性。库的版本是3.105.0。你能推荐我学习GridLayout的网站吗? – user3649231