Eclipse plugin 动态复合部件Eclipse4

Eclipse plugin 动态复合部件Eclipse4,eclipse-plugin,swt,eclipse-rcp,e4,Eclipse Plugin,Swt,Eclipse Rcp,E4,我面临着一个非常恼人的问题,我想知道是否有人知道如何处理它。 我有一个EclipseRCPE4应用程序,它根据文件内容创建动态部分 对于每个文件,创建的零件必须并排显示两个表(实现为NatTables),这些表必须可以水平调整大小(例如,主细节) 当我开始时,我认为一个好方法是使用动态复合部件,它既不能作为部件描述符添加,也不能作为应用程序模型中的片段添加。 据我所知,复合部件的目的也是处理此类场景,但我无法找到一种动态使用它们的方法 为了使某些功能正常工作,我切换到这段代码,它通过向SWT.R

我面临着一个非常恼人的问题,我想知道是否有人知道如何处理它。 我有一个EclipseRCPE4应用程序,它根据文件内容创建动态部分

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

当我开始时,我认为一个好方法是使用动态复合部件,它既不能作为部件描述符添加,也不能作为应用程序模型中的片段添加。 据我所知,复合部件的目的也是处理此类场景,但我无法找到一种动态使用它们的方法

为了使某些功能正常工作,我切换到这段代码,它通过向SWT.Resize事件添加一个侦听器,基于一个常量重新绘制两个表。尽管如此,这段代码并不是我想要做的

public void postConstruct(复合父项,menuService menuService){
...
Shell=parent.getShell();
点大小=shell.getSize();
leftGridData.widthHint=(int)(size.x*LeftPiration);
rightGridData.widthHint=size.x-leftGridData.widthHint;
//添加此配置将添加要使用的样式和画家
_tableViewLeft.setLayoutData(leftGridData);
_tableView.setLayoutData(rightGridData);
_tableView.configure();
//行/列标题的工具提示
addListener(SWT.Resize,new Listener())
{
@凌驾
公共无效handleEvent(事件arg0)
{
点大小=shell.getSize();
leftGridData.widthHint=(int)(size.x*LeftPiration);
rightGridData.widthHint=size.x-leftGridData.widthHint;
shell.redraw();
}
});
}

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

对于GridLayout,您只需为两个控件的布局数据指定“SWT.FILL”和“grab extra space”。不需要听调整大小

GridLayout=newgridlayout(2,true);
复合.setLayout(布局);
...
GridData leftGridData=新的GridData(SWT.FILL,SWT.FILL,true,true);
setLayoutData(leftGridData);
...
GridData rightGridData=新的GridData(SWT.FILL,SWT.FILL,true,true);
rightControl.setLayoutData(rightGridData);

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

对于GridLayout,您只需为两个控件的布局数据指定“SWT.FILL”和“grab extra space”。不需要听调整大小

GridLayout=newgridlayout(2,true);
复合.setLayout(布局);
...
GridData leftGridData=新的GridData(SWT.FILL,SWT.FILL,true,true);
setLayoutData(leftGridData);
...
GridData rightGridData=新的GridData(SWT.FILL,SWT.FILL,true,true);
rightControl.setLayoutData(rightGridData);

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

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

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

来实现,SashForm正是我想要的。非常感谢:)。SashForm正是我想要的。非常感谢:)。