简单介绍下:TabFoler(选项卡)是SWT中带有标签页的容器,CTabFoler是自定义选项卡,可以修改的属性有很多,
例如,
final CTabFoler tabFolder = new CTabFolder(shell,SWT.CLOSE);//表示带有关闭按钮的选项卡
//显示最大化按钮
tabFolder.setMaximizeVisible(true);
//显示最小化按钮
tabFolder.setMinimizeVisible(true);
下面说重点,虽然显示了最大化和最小化按钮,但因为没有任何事件处理,所以单击两个按钮不会有任何反应,所以从网上搜索了下两个按钮的事件处理方法,所有的答案都是这个:
tabFolder.addCTabFolder2Listener(new CTabFolder2Adapter() {
public void minimize(CTabFolderEvent event) {
tabFolder.setMinimized(true);
tabFolder.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
shell.layout(true);//刷新布局
}
public void maximize(CTabFolderEvent event) {
tabFolder.setMaximized(true);
tabFolder.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
shell.layout(true);
}
public void restore(CTabFolderEvent event) {
tabFolder.setMinimized(false);
tabFolder.setMaximized(false);
tabFolder.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
shell.layout(true);
}
});
但这个只是很简单的情况:即将tabFolder直接放在Shell上的最简单的布局情况。这段代码在我的程序里不起任何反应
所以觉得很有必要跟大家分享下我的方法:
tabFolder.addCTabFolder2Listener(new CTabFolder2Adapter() {
// 当单击最小化按钮时触发的事件
public void minimize(CTabFolderEvent event) {
// 设置选项卡的状态为最小化,选项卡的状态决定显示在右上角的窗口按钮
folder2.setMinimized(true);
//改变选项卡的布局,呈现最小化状态
sashForm1.setMaximizedControl(middleCmp1);
shell.layout(true);
}
// 当单击最大化按钮时触发的事件
public void maximize(CTabFolderEvent event) {
folder2.setMaximized(true);
sashForm1.setMaximizedControl(middleCmp2);
shell.layout(true);
}
// 当单击还原按钮时触发的事件
public void restore(CTabFolderEvent event) {
folder2.setMinimized(false);
folder2.setMaximized(false);
sashForm1.setMaximizedControl(null);
shell.layout(true);
}
});
关键在sashForm1.setMaximizedControl(middleCmp2);
这里sashForm1将窗口分为了middleCmp1和middleCmp2,其中tabFolder放在了middleCmp2上,请注意这里的包含关系。
当单击最大化按钮时,通过setMaximizedControl()方法将使middleCmp2占据了原来middleCmp2和middleCmp1分割的窗口,即实现了最大化。
最后单击最小化按钮后,你会发现tabFolder的窗口不见了,==!其实我觉得单击最小化时可以再显示一个新的小的窗口来达到效果,这请读者自己去实现吧!