<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kooyee ‘s blog

    開源軟件, 眾人努力的結晶, 全人類的共同財富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    『SWT』SWT/JFace的基本介紹

    Posted on 2008-06-09 18:35 kooyee 閱讀(2119) 評論(0)  編輯  收藏 所屬分類: GUI骨衣
    SWT/JFace的基本介紹

    1.1 Face與其他圖形界面設計工具的比較

    Java圖形界面實現方式有很多,比如AWTSWINGSWT等。AWTSWING不論是在速度上還是美觀上都有很大的不足;對于比較龐大而復雜的系統,用AWTSWING相很難實現,因為運行的速度會相當的慢。SWT直接使用操作系統提供的本地圖形接口,具備本地化的Look & Feel,效率高且美觀。因此,本項目選擇SWT作為圖形界面開發基礎工具包。

    2-1SWT原理圖,圖2-2JFace原理圖

    2-1

                      2-2

     

    SWTWin32API簡單的包裝了一下,系統在SWT這一層調用的方法、傳遞的參數被原封不動的代理到了Win32層。這是SWT的核心思想。SWT有一個很重要的設計原則,那就是,SWTAPI一對一的封裝OSAPI,完全忠實于操作系統的API實現的行為,如果有bug,那也是OSbug,它不會嘗試去“糾正”操作系統,因為那樣會潛在的破壞本地化的一些行為。忠實于OS也使得調用者不必但心自己的SWT程序會跟OS的本地GUI有不一致的地方。因此,SWT擁有標準的與操作系統相同的外觀,幾乎沒有人能看出你的程序是用Java寫出來的,更為重要的是,其程序運行的效率可以和VC++寫出的程序向媲美,而且開發的效率也不在AWT/SWING之下。

     

    1.2 如何創建簡單的SWT/JFace程序

    1.2.1如何在Eclipse中建立一個SWT/JFace工程

    依次File→New→other 就會看到

    選它

    然后按向導往下操作即可新建一個SWT/JFace工程,該工程跟其他的Jave工程沒有多大的區別

    1.2.2一個簡單的HelloWorld小例子

    publicclass HelloWorld{

        publicstaticvoid main(String[] args){

           Display display=new Display();

           Shell shell=new Shell(display,SWT.V_SCROLL|SWT.SHELL_TRIM);

          

           shell.setText("This is my label");

           shell.setBounds(100,100,500,200);

           shell.setLayout(new FillLayout());

          

           //Color red=new Color(display,255,0,0);

          

           Label label1=new Label(shell,SWT.CENTER);

           label1.setText("Hello word");

           label1.setLocation(100,100);

           label1.setBackground(new Color(display,0,200,0));

           new Label(shell,SWT.CENTER).setText("software college of neu");

          

          

           shell.open();

           while(!shell.isDisposed()){

           if(!display.readAndDispatch())

           display.sleep();

           }

           display.dispose();

          

        }

    }

     

    程序的一些解釋:

    1.       Display類:該類是SWT的基礎類,它負責應用程序和本地操作系統之間建立交互。Display類是從Decive繼承而來。

    Display繼承關系圖

    2.       Shell類:該類是顯示在桌面上的窗口,可以使頂級窗口(Top Level Shells)或者是對話框窗口(Secondary Or Dialog Shells

    3.       設置消息循環進行監聽,以便監聽到界面的操作:

    while(!shell.isDisposed()){

        if(!display.readAndDispatch())

           display.sleep();

    }

     

     

     

     

     

    二.      SWT基礎

    2.1 SWT基本組件

    2.1.1關于按鈕Button

    類型

    特點

    創建代碼舉例

    普通

    呈突出狀

    Button bt = new Button(shell,SWT.PUSH)

    切換

    單擊后保持按下狀態,再次單擊時恢復。

    Button bt = new Button(shell,SWT.TOGGLE)

    箭頭

    按鈕帶有小箭頭

    Button bt = new Button(shell , SWT.ARROW|SWT.UP)向上的箭頭

    單選

    同一組只有一個選中

    Group group = new Group(shell , SWT.SHADOW_ETCHED_OUT)

    group.setLayout(new FillLayout(SWT.VERTICAL)

    Button bt1 = new Button(group , SWT.RADIO|SWT.LEFT)

    Button bt2 = new Button(group, SWT.RADIO|SWT.RIGHT)

     

    bt1.setSelection(true)表示選定該按鈕

    多選

    同時可選幾個按鈕

    Group group = new Group(shell , SWT.SHADOW_ETCHED_OUT)

    group.setLayout(new FillLayout(SWT.VERTICAL)

    Button bt1 = new Button(group , SWT.CHECK|SWT.LEFT)

    Button bt2 = newButton(group, SWT.CHECK|SWT.RIGHT)

     

    bt1.setSelection(true)表示選定該按鈕

     

    2.1.2文本框Text

    文本框是一個比較常用的組件,文本狂本身就支持復制,粘貼,刪除等基本的操作。因此這些常用的基本操作不用我們再去設計。

    1.文本框的比較特殊的樣式

    樣式常量

    描述

    SWT.READ_ONLY

    只讀文本框

    SWT.PASSWORD

    輸入密碼框

    SWT.MULTI

    可以輸入多行的文本框

    SWT.WRAP

    可以輸入多行并且自動切換

    SWT.H_SCROLL

    帶水平滾動條的文本框

     

    2.關于文本框的幾個操作的方法

     

    設置文字的方向

    setOrientation(int orientation)

    SWT.RIGHT_TO_LEFT

    則從右往左填充

    設置文本輸入字符的格式

    setEchoChar(char echo)

    Example:setEchoChar(“*”),輸入時則顯示“*

    設置Tab退格的字符數

    setTabs(int tabs)

    tabs是多大就退幾格

    全選

    selectAll()

     

    取消所有選擇

    clearSelection()

     

    將所選的字符復制到剪貼板

    copy()

     

    將所選的字符剪切到剪貼板

    cut()

     

    將剪貼板上的字符粘貼到文本框

    paste()

     

     

    2.2面板容器類

    2.2.1自定義選項卡CTabFolder

    自定義選項卡比TabFolder類的功能強大,我們可以給他添加一些最大化最小化的按鈕,可以做出仿eclipse編輯區的選項卡;

    ①.     帶有關閉的選項卡;初始化時將風格設置為SWT.CLOSE即可;

    CTabFolder tabFolder = new CTabFolder(shell,SWT.CLOSE);

    ②.     帶有最大化最小化按鈕

     

    tabFolder.setMaxmizeVisible(true);//顯示最大化按鈕

     

    tabFolder.setMininizeVisible(true);//顯示最小化按鈕

    ③.     設置選項卡(選中狀態標簽)的背景和顏色

    l         單一的前景色和背景色

    tabFolder.setSelectionForeground(display.getSystemColor(SWT.COLOR_WHITE));

    tabFolder.setSelectionBackground(display.getSystemColor(SWT.COLOR_BLUE));

    l         漸變的背景色

    設置漸變背景的方法是setSelectionBackground(Color[] color, int[] percents)setSelectionBackground(Color[] color, int[] percents, Boolean vertical),第二個方法的vertical表示是否垂直漸變;

     

    Color[] color = new Color[4];

    color[0] = display.getSystemColor(SWT.COLOR_DARK_BLUE);

    color[1] = display.getSystemColor(SWT.COLOR_BLUE);

    color[2] = display.getSystemColor(SWT.COLOR_WHITE);

    color[3] = display.getSystemColor(SWT.COLOR_WHITE);

    int[] intArray = newint[]{25, 50, 100};

    tabFolder.setSelectionBackground(color,intArray);

    l         設置背景圖片,setSelectionBackground(Image image)

    ④.     最大化最小化按鈕的監聽;

    添加監聽的語句是

    tabFolder.addCTabFolder2Listener(new CTabFolder2Adapter(){});

    設置最大化,最小化和還原,實現以下方法

           publicvoid mimimize(CTabFolderEvent e){}

           publicvoid maximize(CTabFolderEvent e){}

           publicvoid restore(CTabFolderEvent e){}

    以下是最下化方法的代碼  

       

    tabFolder.setMinimized(true);//設置選項卡為最小化,決定了右上角的按鈕

    tabFolder.setLayoutData(new GridData(SWT.FILL, SET.FILL, true, false));//改變布局,呈現最小化狀態

    shell.layout(true);//刷新布局,否則新的布局不能呈現出來

     

    ⑤.     CTabFolder還有許多有用的方法,以上說的基本上可以構建出仿eclipse的選項卡了

     

    2.2.2滾動面板ScrolledComposite

    對于滾動面板ScrolledComposite,看起來好像很好用,如果對于布局確定的面板來說,實現滾動效果確實比較簡單,但對于一個沒有確定布局的面板(比如一個可以往上面隨意家圖形的畫布),那實現起來就要費一些心思。這里我們要實現一個沒有確定布局的,可以隨意添加圖形的而且要求可以無限變大的面板。

    l       首先,我們新建一個ScrolledComposite sc,然后將我們的畫布canvas設為ScrolldeComposite的內容sc.setContent(canvas);為了讓滾動條顯示出來,我們可以canvas設置一個適當的大小

    l       接下來最關鍵的是如何改變面板的大小,在改變大小之前,我們首先要判斷出面板是否到了邊界,因為這時才需要使面板的大小增大

    (sc.getVerticalBar().getSize().y+sc.getVerticalBar().getSelection())

    ==sc.getVerticalBar().getMaximum())

     

    如果等式成立就說明面板已經到了邊界

    l       這時只要在監聽里重新設置面板的大小就可以了

     

     

    2.2.3分割窗框SashForm

    關于分割框的基本知識這里就不再介紹了,在這里主要講述使用分割框和選項卡實現最大化和還原,其實這也很簡單,只要用了setMaximizedControl(Control control)這個方法就可以了。

    在我們點擊選項卡的最大化時:

    form.setMaximizedControl(folder);

    最大化后填充的分割框

    需要設為最大化的組件

    在點擊還原是只要form.setMaximizedControl(null);整個面板就會還原到初始的比例 
    主站蜘蛛池模板: 18pao国产成视频永久免费| 无码 免费 国产在线观看91| 91在线免费观看| 亚洲高清日韩精品第一区| 在线精品免费视频无码的| 花蝴蝶免费视频在线观看高清版| 亚洲人成免费网站| 亚洲码和欧洲码一码二码三码| 亚洲成年人免费网站| 国产成人无码免费看视频软件| caoporm超免费公开视频| 亚洲日韩国产精品乱-久| 亚洲91av视频| 亚洲精品tv久久久久久久久| 国产精品久久久久影院免费| 久久青草免费91观看| 精品熟女少妇aⅴ免费久久| 国产亚洲精品91| 草久免费在线观看网站| 亚洲不卡视频在线观看| 亚洲av午夜成人片精品电影 | 亚洲国产日韩精品| 中文字幕亚洲男人的天堂网络 | 国产亚洲视频在线观看| 免费人成动漫在线播放r18| 亚洲黄色免费在线观看| 亚洲一级毛片在线播放| 亚洲日本VA中文字幕久久道具| 精品亚洲国产成人av| 亚洲成AV人片久久| 亚洲精品NV久久久久久久久久| 一二三四视频在线观看中文版免费 | 中文字幕免费观看全部电影| 亚洲欧洲专线一区| 九九免费观看全部免费视频| 日日摸日日碰夜夜爽亚洲| 视频免费在线观看| 色www永久免费视频| 丁香花免费高清视频完整版| 亚洲 无码 在线 专区| 成人啪精品视频免费网站|