动态合成零件eclipse e4

时间:2019-02-12 11:30:56

标签: eclipse-plugin swt eclipse-rcp e4

我正面临一个非常烦人的问题,我想知道是否有人知道如何处理它。 我有一个Eclipse RCP e4应用程序,该应用程序根据文件的内容创建动态部件。

对于每个文件,创建的部分必须并排显示两个表(实现为NatTables),这些表必须可以水平调整大小(例如,主从细节)

当我开始时,我认为一种好方法是使用动态复合零件,该零件既不能作为零件描述符也不能作为片段添加到应用程序模型中。 根据我的理解,复合部件的目的还在于处理这种情况,但是我找不到动态使用它们的方法。

为使工作正常,我切换到此代码,该代码通过向SWT.Resize事件添加侦听器来基于常量重绘两个表。虽然,这段代码并不完全是我想要做的。

public void postConstruct(Composite parent,EMenuService menuService){       
    ...
    Shell shell = parent.getShell();
    Point size = shell.getSize();
    leftGridData.widthHint = (int)(size.x * leftProportion);
    rightGridData.widthHint = size.x - leftGridData.widthHint;

    // adding this configuration adds the styles and the painters to use
    _tableViewLeft.setLayoutData(leftGridData);
    _tableView.setLayoutData(rightGridData);

    _tableView.configure();
    // Tooltip for row/column headings

    shell.addListener(SWT.Resize, new Listener()
    {
        @Override
        public void handleEvent(Event arg0)
        {
            Point size = shell.getSize();

            leftGridData.widthHint = (int) (size.x * leftProportion);
            rightGridData.widthHint = size.x - leftGridData.widthHint;
            shell.redraw();
        }
    });
}

我想要实现的是能够在动态部件中水平调整两个表的大小。这两个表应使用所有空间以适合可用空间。任何提示或建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

对于GridLayout,您要做的就是为两个控件的布局数据指定'SWT.FILL'和'grab extra space'。无需收听调整大小。

GridLayout layout = new GridLayout(2, true);
composite.setLayout(layout);

...

GridData leftGridData = new GridData(SWT.FILL, SWT.FILL, true, true);
leftControl.setLayoutData(leftGridData);

...

GridData rightGridData = new GridData(SWT.FILL, SWT.FILL, true, true);
rightControl.setLayoutData(rightGridData);

如果您希望能够手动调整间距,请查看SashSashForm控件。

答案 1 :(得分:1)

尽管NatTable尊重SWT布局(如@ greg-449所建议,我也建议作为正确的解决方案),但默认情况下,NatTable实例内的列不会调整大小以占用所有可用空间。除非另外配置,否则列宽具有固定的大小。因此,一旦解决了SWT布局问题,就还需要配置NatTable来调整百分比大小,这意味着列宽是根据可用的容器宽度来计算的。这可以通过DataLayer#setColumnPercentageSizing(boolean)

完成