JavaGUI之SWT框架【面板容器类 选项卡TabFolder】

文章目录

  • 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;
}

效果

JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第1张图片

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 底部选项卡 JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第2张图片
SWT.BORDER 边框选项卡 JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第3张图片
设置选项卡图标
tabItme.setImage(new Image("path/to/image.jpg"))
JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第4张图片

tip: 我所选取的图片很大,所以显示的时候很不美观. 读者可根据自己的需求选择合适的图标

CTabFolder 自定义选项卡

CTabFolder的功能要比TabFolder更加强大, 但创建方式几乎一样. 不同的是组件创建前都加了一个C

创建效果
JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第5张图片
当窗口大小过小时, 自动产生的效果.

自定义选项卡样式

设置方式 描述 样式
SWT.BOTTOM 底部显示 JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第6张图片
SWT.CLOSE 关闭 JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第7张图片
tabFolder.setMinimizeVisible(true) tabFolder.setMaximizeVisible(true) 最小化 最小化 JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第8张图片
SWT.BORDER 边框 JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第9张图片

tip: 最大化,最小化设置后,仅仅可见相应按钮. 如果不配置相应触发事件, 点击后不会有任何的效果被触发

颜色设置

  • 设置前景色/背景色
tabFolder.setSelectionForeground(display.getSystemColor(SWT.COLOR_WHITE));
tabFolder.setSelectionBackground(display.getSystemColor(SWT.COLOR_BLUE));

setSelectionForeground 设置选中的tab的文字颜色为WHITE
setSelectionBackground 设置选中的tab的背景颜色为BLUE

效果
JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第10张图片

  • 设置渐变色
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 数组的元素需要递增

JavaGUI之SWT框架【面板容器类 选项卡TabFolder】_第11张图片

你可能感兴趣的:(SWT,GUI,java,SWT)