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

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

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

    kooyee ‘s blog

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

    『SWT』SWT/JFace的基本介紹

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

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

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

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

    2-1

                      2-2

     

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

     

    1.2 如何創(chuàng)建簡單的SWT/JFace程序

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

    依次File→New→other 就會看到

    選它

    然后按向?qū)虏僮骷纯尚陆ㄒ粋€SWT/JFace工程,該工程跟其他的Jave工程沒有多大的區(qū)別

    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的基礎(chǔ)類,它負責應(yīng)用程序和本地操作系統(tǒng)之間建立交互。Display類是從Decive繼承而來。

    Display繼承關(guān)系圖

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

    3.       設(shè)置消息循環(huán)進行監(jiān)聽,以便監(jiān)聽到界面的操作:

    while(!shell.isDisposed()){

        if(!display.readAndDispatch())

           display.sleep();

    }

     

     

     

     

     

    二.      SWT基礎(chǔ)

    2.1 SWT基本組件

    2.1.1關(guān)于按鈕Button

    類型

    特點

    創(chuàng)建代碼舉例

    普通

    呈突出狀

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

    切換

    單擊后保持按下狀態(tài),再次單擊時恢復(fù)。

    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

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

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

    樣式常量

    描述

    SWT.READ_ONLY

    只讀文本框

    SWT.PASSWORD

    輸入密碼框

    SWT.MULTI

    可以輸入多行的文本框

    SWT.WRAP

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

    SWT.H_SCROLL

    帶水平滾動條的文本框

     

    2.關(guān)于文本框的幾個操作的方法

     

    設(shè)置文字的方向

    setOrientation(int orientation)

    SWT.RIGHT_TO_LEFT

    則從右往左填充

    設(shè)置文本輸入字符的格式

    setEchoChar(char echo)

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

    設(shè)置Tab退格的字符數(shù)

    setTabs(int tabs)

    tabs是多大就退幾格

    全選

    selectAll()

     

    取消所有選擇

    clearSelection()

     

    將所選的字符復(fù)制到剪貼板

    copy()

     

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

    cut()

     

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

    paste()

     

     

    2.2面板容器類

    2.2.1自定義選項卡CTabFolder

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

    ①.     帶有關(guān)閉的選項卡;初始化時將風(fēng)格設(shè)置為SWT.CLOSE即可;

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

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

     

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

     

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

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

    l         單一的前景色和背景色

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

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

    l         漸變的背景色

    設(shè)置漸變背景的方法是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         設(shè)置背景圖片,setSelectionBackground(Image image)

    ④.     最大化最小化按鈕的監(jiān)聽;

    添加監(jiān)聽的語句是

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

    設(shè)置最大化,最小化和還原,實現(xiàn)以下方法

           publicvoid mimimize(CTabFolderEvent e){}

           publicvoid maximize(CTabFolderEvent e){}

           publicvoid restore(CTabFolderEvent e){}

    以下是最下化方法的代碼  

       

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

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

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

     

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

     

    2.2.2滾動面板ScrolledComposite

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

    l       首先,我們新建一個ScrolledComposite sc,然后將我們的畫布canvas設(shè)為ScrolldeComposite的內(nèi)容sc.setContent(canvas);為了讓滾動條顯示出來,我們可以canvas設(shè)置一個適當?shù)拇笮?/span>

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

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

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

     

    如果等式成立就說明面板已經(jīng)到了邊界

    l       這時只要在監(jiān)聽里重新設(shè)置面板的大小就可以了

     

     

    2.2.3分割窗框SashForm

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

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

    form.setMaximizedControl(folder);

    最大化后填充的分割框

    需要設(shè)為最大化的組件

    在點擊還原是只要form.setMaximizedControl(null);整個面板就會還原到初始的比例 
    主站蜘蛛池模板: 18级成人毛片免费观看| 亚洲欧洲久久精品| 在线免费观看视频你懂的| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 亚洲伊人成无码综合网| 和日本免费不卡在线v| 免费黄网站在线观看| 精品国产福利尤物免费| 小说专区亚洲春色校园| 亚洲色欲色欲www在线播放| 亚洲精品91在线| 亚洲天堂中文字幕| 国产精品久久久亚洲| 亚洲免费日韩无码系列| 国产精品色午夜视频免费看| 亚洲中文无码永久免费| 麻豆国产精品免费视频| 久久久精品2019免费观看| 日韩视频在线观看免费| 在线观看黄片免费入口不卡| 一区二区三区免费视频播放器| 日韩成人精品日本亚洲| 久久亚洲AV成人无码国产最大| 亚洲 日韩 色 图网站| 国产成人精品日本亚洲专区6| 亚洲欧洲日产国产最新| 亚洲成人福利在线观看| 亚洲日韩乱码中文无码蜜桃| 亚洲网站免费观看| 亚洲成人高清在线观看| 2020久久精品亚洲热综合一本| 亚洲一区二区三区国产精品无码 | 91嫩草免费国产永久入口| 50岁老女人的毛片免费观看| 中文字幕免费视频| 国产成人精品免费午夜app| 国产麻豆视频免费观看| 免费无码黄十八禁网站在线观看| 福利免费观看午夜体检区| 成全影视免费观看大全二| 黄网址在线永久免费观看|