JavaGUI开发之SWT框架【Shell】

本文详细介绍了SWT框架中的Shell组件创建,包括默认样式SHELL_TRIM的使用,以及不同样式的组合如SWT.TITLE|SWT.MAX。还展示了如何创建并管理多个窗口,包括子窗口的创建和交互功能。


录制的视频

1. 基本介绍

在SWT框架中,shell组件可以理解为窗口
在这里插入图片描述
shell的创建需要指定Display()组件,因此shell的创建一般使用的都是如下代码

Display display = new Display();
Shell shell = new Shell(display);

Display组件,负责连接OS操作系统,同时负责管理GUI 组件。Display在SWT框架中有着举足轻重的作用,但一般开发过程中,没怎么调用过display的api,因此本文不会详细介绍Display,感兴趣的读者可以自行查看文档。

Shell组件的处境也和Display差不多。本文主要介绍Shell的创建方式,以及不同的创建方式得到的不同样式。

2. Shell的创建

Shell有两种创建方式

  • new Shell(Display)
  • new Shell(Display display, int style)

方式一:创建的shell,其默认的style是SWT.SHELL_TRIM

方式二:创建shell时,可由开发者自己制定Shell的style

Shell的style有如下几种:

SWT.BORDER
SWT.CLOSE
SWT.MIN
SWT.MAX
SWT.RESIZE
SWT.TITLE
SWT.TOOL
SWT.NO_TRIM
SWT.SHELL_TRIM
SWT.DIALOG_TRIM
SWT.ON_TOP
SWT.MODELESS
SWT.PRIMARY_MODAL
SWT.APPLICATION_MODAL
SWT.SYSTEM_MODAL
SWT.SHEET

如果想要使用组合样式,可以用 | 连接。例如SWT.TITLE | SWT.MAX

3. shell的样式展示

3.1 SWT.TITLE

只保留Shell的标题
在这里插入图片描述

3.2 SWT.MAX |SWT.MIN | SWT.CLOSE

保留title的同时,新增 缩小,放大,关闭 的功能
在这里插入图片描述

3.3 SWT.SHELL_TRIM (最常用)

是CLOSE | TITLE | MIN | MAX | RESIZE的组合,具有窗口改变形状的功能。new Shell(display) 等于new Shell(display, SWT.SHELL_TRIM)

单参数的构造函数默认使用的就是SWT.SHELL_TRIM

在这里插入图片描述

4. 创建多个窗口

4.1 代码

/**
 * 多个窗口
 */
public class MultiShell {
    public static void main(String[] args) {
        Display display = new Display();
        Shell parent = new Shell(display, SWT.SHELL_TRIM);
        parent.setSize(800, 600);
        parent.setText("多个窗口");

        // 添加button
        Button button = new Button(parent, SWT.CENTER);
        button.setText("创建儿子");
        button.setSize(100, 100);
        // 监听事件
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                // 创建窗口
                createChildShell(parent);
            }
        });
        button.pack();

        // 启动
        parent.open();
        // shell不被销毁, 一直循环
        while (!parent.isDisposed()) {
            // display监控到有事件发生, 处理事件。否则睡眠
            while (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }

    /**
     * 创建子窗口
     */
    private static void createChildShell(Shell parent) {
        // 添加子窗口
        Shell child = new Shell(parent, SWT.DIALOG_TRIM);
        child.setText("儿子");
        child.setSize(100, 100);
        child.open();
    }
}

效果
在这里插入图片描述

4.2 重要代码解释

Display display = new Display();
Shell parent = new Shell(display, SWT.SHELL_TRIM);
parent.setSize(800, 600);
parent.setText("多个窗口");

这段代码中,我们创建了一个Shell窗口,名为parent。同时调用setSize api,设置窗口大小

		// 添加button
        Button button = new Button(parent, SWT.CENTER);
        button.setText("创建儿子");
        button.setSize(100, 100);
        // 监听事件
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                // 创建窗口
                createChildShell(parent);
            }
        });
        button.pack();

这段代码,我们向parent窗口添加了一个button。同时给button绑定了一个选择监听事件(addSelectionListener),意为只要button被用户选择,就会触发监听器内包含的方法

可以把它理解成js中的事件绑定,用来实现交互功能

    /**
     * 创建子窗口
     */
    private static void createChildShell(Shell parent) {
        // 添加子窗口
        Shell child = new Shell(parent, SWT.DIALOG_TRIM);
        child.setText("儿子");
        child.setSize(100, 100);
        child.open();
    }

这段代码实现的功能是创建子窗口。需要注意的是,子窗口绑定的组件依然是parent Shell,而非display。child shell依然需要调用open()方法运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值