动态复合部分eclipse e4

问题描述 投票:0回答:2

我正面临一个非常讨厌的问题,我想知道是否有人知道如何处理它。我有一个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();
        }
    });
}

我想要实现的是能够在动态部分内水平调整两个表的大小。这两个表应使用所有空间来适应可用空间。任何提示或建议都会非常感激。

eclipse-plugin swt eclipse-rcp e4
2个回答
1
投票

对于GridLayout,您需要做的就是为两个控件的布局数据指定'SWT.FILL'和'抓取额外空间'。无需倾听调整大小。

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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.