SWT 中 Display_Composite_shell 基本關系 詳解

Yangcl 11年前發布 | 9K 次閱讀 jetbrick-webmvc eos

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();  
          }      

}</pre>

Display:該類負責應用程序和本地操作系統間建立交互,負責與系統進行通信。應用系統創建一個display對象就夠用了,這個類繼承自Device類。

 

Composite:面板類,常用的容器對象,是Shell(主窗體)的父類。相當于SwingPanel

Composite(Composite  parent int  style)

第一個參數表示該容器創建在哪個容器上。第二個參數,表示該面板的風格。選擇SWT.NONEComposite是不顯示的,只發揮容器作用。如果你想觀察這個容器的樣子,在風格中可以選擇“凹陷”風格:SWT.BORDER

 

Shell:譯做“主窗體”。 “組件”要構建在容器中,“容器”要構建在主窗體中







 本文由用戶 Yangcl 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!