SWT自定義選項卡CTabFolder

之前找如何實現類似 Eclipse 中的 TabbedPane 風格,浪費了好些時間。原來可以用 SWT 的 CTabFolder 簡單做到。

CTabFolder 爲 Custom Tab Folder 的縮寫。

這個例子是使用自定義選項卡的例子,實現的功能是最大,最小化。在運用中這種是很常見的,貼上來備忘。

複製代碼
package com.example.swt.ctabfoldersample;   
  
import org.eclipse.swt.SWT;   
import org.eclipse.swt.custom.CTabFolder;   
import org.eclipse.swt.custom.CTabFolder2Adapter;   
import org.eclipse.swt.custom.CTabFolderEvent;   
import org.eclipse.swt.custom.CTabItem;   
import org.eclipse.swt.graphics.Color;   
import org.eclipse.swt.graphics.Image;   
import org.eclipse.swt.layout.GridData;   
import org.eclipse.swt.layout.GridLayout;   
import org.eclipse.swt.widgets.Display;   
import org.eclipse.swt.widgets.Shell;   
import org.eclipse.swt.widgets.Text;   
  
public class CTabFolderSample   
{   
    public static void main(String[] args)   
        {   
            final Display display = Display.getDefault();   
            final Shell shell = new Shell();   
            shell.setSize(296, 255);   
            shell.setText("CTabFolder 練習");   
            shell.setLayout(new GridLayout());   
            //   
  
            shell.open();   
  
            final CTabFolder tabFolder = new CTabFolder(shell, SWT.NONE|SWT.CLOSE|SWT.BORDER);   
            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.setBounds(0, 0, 283, 211);   
            tabFolder.setTabHeight(20);   
            tabFolder.marginHeight = 5;   
            tabFolder.marginWidth = 5;   
            tabFolder.setMaximizeVisible(true);   
            tabFolder.setMinimizeVisible(true);   
            tabFolder.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));   
            //下面兩個是設置固定的背景色和前景色   
            //tabFolder.setBackground(display.getSystemColor(SWT.COLOR_BLUE));   
            //tabFolder.setForeground(display.getSystemColor(SWT.COLOR_WHITE));   
            //下面是設置漸變色   
            Color[] color=new Color[4];   
            color[0]=display.getSystemColor(SWT.COLOR_DARK_BLUE);   
            color[1]=display.getSystemColor(SWT.COLOR_BLUE);   
            color[2]=display.getSystemColor(SWT.COLOR_DARK_GRAY);   
            color[3]=display.getSystemColor(SWT.COLOR_WHITE);   
            int[] intArray=new int[]{25,45,100};   
            tabFolder.setSelectionBackground(color, intArray);   
            //這是設置了背景顏色,但是如果同時設置了背景圖片的話以背景圖片優先   
            tabFolder.setSimple(false);//設置圓角   
            tabFolder.setUnselectedCloseVisible(true);   
            for (int i = 1; i < 4; i++) {   
                CTabItem item = new CTabItem(tabFolder, SWT.None|SWT.MULTI|SWT.V_SCROLL);   
                item.setText("選項卡" + i);   
                Text t = new Text(tabFolder, SWT.None|SWT.MULTI|SWT.V_SCROLL|SWT.H_SCROLL|SWT.WRAP);   
                t.setText("這是選項卡可以控制的文字" + i+"\n\n世界第一等\n\n一路順風");   
                item.setControl(t);   
  
            }   
            Image image=new Image(display,"C:\\Documents and Settings\\Administrator\\桌面\\label.jpg");   
            shell.setImage(image);     
            shell.setSize(300, 200);   
            shell.layout();   
            while (!shell.isDisposed()) {   
                if (!display.readAndDispatch())   
                    display.sleep();   
            }   
        }   
  
}   
複製代碼

說明:

第一、狀態說明,根據選項卡的狀態右上角顯示最大化還是最小化還是回覆的按鈕。設置最小化的方法:setMinimized(true),設置最大化:setMaximized(true),設置爲既不是最大也不是最小的辦法是:同時把setMinimized和setMaximized設置爲false。

獲取狀態的方法是:是否最大化getMinimized(),是否最大化getMaximized()。

第二、限制選項卡文字的長度:

tabFolder.setminimumCharacters(int)設置選項卡文字的最小長度。

第三、設置右上角控件

Button button=new Button(tabFolder,SWT.ARROW|SWT.RIGHT);

tabFolder.setTopRight(button);

//tabFolder.setTopRight(button,SWT.FILL);//佈滿右側區域

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章