文章目录
- TabFolder
- 选项卡的组成
- 选项卡样式
- CTabFolder 自定义选项卡
- 自定义选项卡样式
- 颜色设置
TabFolder
选项卡的功能非常强大,但创建方式也相对复杂
// 创建TabFolder对象
TabFolder tabFolder = new TabFolder(composite, SWT.NONE);
// 创建TabItem
for (int i = 0; i < 5; i++) {
TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
tabItem.setText("选项卡: " + i);
// 设置选项卡控制的控件
tabItem.setControl(createTabFoldPage(tabFolder));
}
createTabFoldPage(Composite tabFolder)
// 创建选项卡界面
private static Control createTabFoldPage(Composite tabFolder) {
Composite tabFolderPage = new Composite(tabFolder, SWT.NONE);
tabFolderPage.setLayout(new GridLayout(1, true));
return tabFolderPage;
}
效果
tip: 这里我为了让生成的效果更好看,在代码层面做了额外的布局。布局不是本篇文章的核心且考虑篇幅原因,笔者仅将代码贴出,权当抛砖引玉,感兴趣的读者可自行测试。
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
public class HelloWorld2 {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
// 设置Composite的布局为GridLayout, 总共1列且每列不相等
GridLayout gridLayout = new GridLayout(1, false);
// 设置控件的边缘和父亲控件的边缘相聚25单位(margin可以立即为css中的margin, 用于两个组件之间的距离)
gridLayout.marginWidth = 25;
gridLayout.marginHeight = 25;
shell.setLayout(gridLayout);
Composite composite = new Composite(shell, SWT.NONE);
/*
* GridData控制composite面板的布局
* 横向纵向的行为是SWT.FILL【前两个参数决定】
* 如果横向纵向存在空间, 则采取填满行为【后两个参数决定】
*/
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
composite.setLayout(new FillLayout());
// 创建TabFolder对象
TabFolder tabFolder = new TabFolder(composite, SWT.NONE);
// 创建TabItem
for (int i = 0; i < 5; i++) {
TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
tabItem.setText("选项卡: " + i);
// 设置选项卡控制的控件
tabItem.setControl(createTabFoldPage(tabFolder));
}
shell.open();
while (!shell.isDisposed()) {
while (!display.readAndDispatch()) {
display.sleep();
}
}
shell.dispose();
}
private static Control createTabFoldPage(Composite tabFolder) {
Composite tabFolderPage = new Composite(tabFolder, SWT.NONE);
tabFolderPage.setLayout(new GridLayout(1, true));
return tabFolderPage;
}
}
选项卡的组成
由上述代码我们不难发现,选项卡由TabFolder, TabItem组成. TabFolder可以包含若干个TabItem, TabItem通过setControl(Control control)
来控制想要显示的界面.
tip: Composite时Control的子类
选项卡样式
SWT.BOTTOM 底部选项卡
SWT.BORDER 边框选项卡
设置选项卡图标
tabItme.setImage(new Image("path/to/image.jpg"))
tip: 我所选取的图片很大,所以显示的时候很不美观. 读者可根据自己的需求选择合适的图标
CTabFolder 自定义选项卡
CTabFolder的功能要比TabFolder更加强大, 但创建方式几乎一样. 不同的是组件创建前都加了一个C
创建效果
当窗口大小过小时, 自动产生的效果.
自定义选项卡样式
设置方式 | 描述 | 样式 |
---|---|---|
SWT.BOTTOM | 底部显示 | |
SWT.CLOSE | 关闭 | |
tabFolder.setMinimizeVisible(true) tabFolder.setMaximizeVisible(true) | 最小化 最小化 | |
SWT.BORDER | 边框 |
tip: 最大化,最小化设置后,仅仅可见相应按钮. 如果不配置相应触发事件, 点击后不会有任何的效果被触发
颜色设置
- 设置前景色/背景色
tabFolder.setSelectionForeground(display.getSystemColor(SWT.COLOR_WHITE));
tabFolder.setSelectionBackground(display.getSystemColor(SWT.COLOR_BLUE));
setSelectionForeground
设置选中的tab的文字颜色为WHITE
setSelectionBackground
设置选中的tab的背景颜色为BLUE
效果
- 设置渐变色
tableFolder.setBackground(
new Color[]{display.getSystemColor(SWT.COLOR_DARK_BLUE),
display.getSystemColor(SWT.COLOR_BLUE),
display.getSystemColor(SWT.COLOR_WHITE),
display.getSystemColor(SWT.COLOR_WHITE)
},
new int[] {25, 50, 100}, true);
tip:
- setSelectionBackground(Color[] colors, int[] percents)
- @param colors 一个表示渐变颜色顺序(从左到右)的Color数组。数组中的颜色将按指定顺序出现在背景渐变中。若设置为null,则清除背景渐变。在数组中可以使用null值来指定背景颜色本身。
- @param percents 一个包含0至100之间的整数数组,用于指定颜色变化时相对于组件宽度的百分比。percent数组的大小必须比colors数组的大小小1。
- percents 数组的长度至少比Color[]数组小1
- percents 数组的元素需要递增