如何创建CTabFolder
的
默认界面,即所有
CTabItem
关闭时中心区域显示的内容,如Eclipse编辑区。
CTabFolder
似乎没有为此提供公共方法。
,/.;;',/.;';/,..,/.;;',/.[;][/,;.';]【=-=-、【】-=【、
这实际上并不是 CTabFolder 的一部分,它是通过创建 CTabFolder 不管理的 CTabFolder 的复合子级来完成的。
对于 Eclipse 实现,请参阅
createOnboardingControls
中的
org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer
方法
要实现此功能,您必须侦听选项卡文件夹大小调整事件和项目计数更改事件,以便您可以设置复合大小并使其可见/不可见。
基本实现:
final CTabFolder tabFolder = new CTabFolder(parent, SWT.TOP);
final Composite empty = new Composite(tabFolder, SWT.NONE);
empty.setLayout(new FillLayout()); // Whatever fill you want
// Just set background here to show when the composite is visible
// Replace with your contents
empty.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_DARK_CYAN));
// Set location below tab bar
empty.setLocation(2, 30);
// Listen for resize and tab item count events
tabFolder.addListener(SWT.Resize, _ -> setEmptyFolderSize(tabFolder, empty));
tabFolder.addCTabFolder2Listener(CTabFolder2Listener.itemsCountAdapter(_ -> setEmptyFolderSize(tabFolder, empty)));
private static void setEmptyFolderSize(final CTabFolder tabFolder, final Composite empty)
{
if (tabFolder.getItemCount() != 0) {
empty.setVisible(false);
empty.setSize(0, 0);
}
else { // No visible tabs
empty.setVisible(true);
final Point location = empty.getLocation();
final Rectangle folderBounds = tabFolder.getBounds();
final int width = folderBounds.width - (2 * location.x);
final int height = folderBounds.height - location.y;
empty.setSize(width, height);
}
}