之前找如何實現類似 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);//佈滿右側區域