`

SWT的CTabFoler最小化,还原,最大化按钮实现

阅读更多

简单介绍下: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的窗口不见了,==!其实我觉得单击最小化时可以再显示一个新的小的窗口来达到效果,这请读者自己去实现吧!

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics