文章目录
录制的视频
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()方法运行


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

527

被折叠的 条评论
为什么被折叠?



