SWT 中 Display_Composite_shell 基本关系 详解

12年前
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(主窗体)的父类。相当于SwingPanel

Composite(Composite  parent int  style)

第一个参数表示该容器创建在哪个容器上。第二个参数,表示该面板的风格。选择SWT.NONEComposite是不显示的,只发挥容器作用。如果你想观察这个容器的样子,在风格中可以选择“凹陷”风格:SWT.BORDER

 

Shell:译做“主窗体”。 “组件”要构建在容器中,“容器”要构建在主窗体中