SWT 中 Display_Composite_shell 基本关系 详解
public class CompositeTesting { public CompositeTesting() { } private void initShellkkk(Shell shell) { // 为shell设置标题 shell.setText("Welcome Demo !"); // 为shell设置 布局对象 GridLayout shellLayout = new GridLayout(); shell.setLayout(shellLayout); // 构造一个Composite组件作为文本框和按钮的容器 Composite panelComposite = new Composite(shell, SWT.NONE); /** * 在Shell中,为panelComposite 设置布局结构对象 * panelComposite_LayoutData的 GridData 隶属于 panelComposite_Layout 这句话是否正确???正确! * GridLayout和GridData没有必然的上下文书写顺序,就是说:你先写GridData的代码,后写Gridlayout的代码也可以。 * 但是必须在Open()方法调用之前写! * 让panelComposite 尽可能地占满 shell */ GridData panelComposite_LayoutData = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); panelComposite.setLayoutData(panelComposite_LayoutData); /** * 单起一个GridLayout * 为panelComposite设置 布局对象 */ GridLayout panelComposite_Layout = new GridLayout(); //文本框和按钮将按这个布局显示 panelComposite.setLayout(panelComposite_Layout); // 为panel设置背景色 final Color pColor = new Color(Display.getCurrent(), 0, 0, 255); panelComposite.setBackground(pColor); // 构造文本框 final Text text = new Text(panelComposite, SWT.MULTI | SWT.WRAP); // 为文本框设置布局结构对象 //GridData tLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true); // 让文本框尽可能地占满panel GridData tLayoutData = new GridData(300, 300); text.setLayoutData(tLayoutData); // 构造按钮 Button button = new Button(panelComposite, SWT.PUSH); button.setText("确定"); // 为按钮添加鼠标事件 button.addMouseListener(new MouseAdapter() { public void mouseDown(MouseEvent e) { // 当用户点击按钮时显示信息 text.setText("欢迎"); } }); // 当主窗口关闭时触发DisposeListener shell.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { // 释放panel背景色资源 pColor.dispose(); } }); } public static void main(String args[]) { CompositeTesting demo = new CompositeTesting(); Display display = new Display(); Shell shell = new Shell(display); demo.initShellkkk(shell); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } }
Display:该类负责应用程序和本地操作系统间建立交互,负责与系统进行通信。应用系统创建一个display对象就够用了,这个类继承自Device类。
Composite:面板类,常用的容器对象,是Shell(主窗体)的父类。相当于Swing的Panel
Composite(Composite parent ,int style)
第一个参数表示该容器创建在哪个容器上。第二个参数,表示该面板的风格。选择SWT.NONE,Composite是不显示的,只发挥容器作用。如果你想观察这个容器的样子,在风格中可以选择“凹陷”风格:SWT.BORDER
Shell:译做“主窗体”。 “组件”要构建在容器中,“容器”要构建在主窗体中