nighty

          折騰的年華
          posts - 37, comments - 143, trackbacks - 0, articles - 0

          posted @ 2008-01-28 09:48 寒武紀(jì) 閱讀(2788) | 評(píng)論 (4)編輯 收藏

              通常情況下,用戶(hù)應(yīng)該在簡(jiǎn)單字段(例如文本字段或組合框)中提供文本信息。雖然用來(lái)填充這些字段的應(yīng)用程序代碼通常比用來(lái)填充復(fù)雜窗口小部件(例如表或樹(shù))的代碼簡(jiǎn)單得多,但這些“簡(jiǎn)單”字段通常會(huì)給用戶(hù)帶來(lái)更多負(fù)擔(dān)。用戶(hù)必須確定哪些字段需要內(nèi)容、某個(gè)字段是否包含有效內(nèi)容以及應(yīng)該選擇哪些選項(xiàng)。JFace 的字段輔助支持提供了一些類(lèi)來(lái)幫助指導(dǎo)用戶(hù)完成輸入任務(wù)。
              org.eclipse.jface.fieldassist包提供了二種方式的輔助。帶修飾字段支持允許您提供圖像修飾,以便向用戶(hù)提供有關(guān)特定字段狀態(tài)的提示。內(nèi)容建議支持允許您提供內(nèi)容輔助彈出窗口,以便向用戶(hù)提供內(nèi)容選項(xiàng)。
              下面了解一下關(guān)于內(nèi)容建議部分。
              一般的IDE工具都有內(nèi)容建議的功能,比如很常見(jiàn)的Java編輯器,輸入“.”之后就會(huì)激活一個(gè)窗口,從里面可以選擇方法或字段,這個(gè)功能可以快速高效地完成代碼,而且可以減少很多輸入錯(cuò)誤。jface的fieldassist提供了對(duì)這個(gè)功能的支持。
              我們做一個(gè)demo,先看一下這個(gè)demo的效果。
               
               當(dāng)按下Alt + '/'的時(shí)候,彈出內(nèi)容輔助的窗口。從中可以選擇相應(yīng)的建議,進(jìn)行快速輸入。
              下面是相應(yīng)的代碼,非常簡(jiǎn)單。
              

          sShell = new Shell();
                  sShell.setText(
          "Shell");
                  GridLayout gridLayout 
          = new GridLayout(1false);
                  sShell.setLayout(gridLayout);
                  sShell.setSize(
          new Point(300200));
                  
                  
          final Text t = new Text(sShell, SWT.BORDER | SWT.MULTI);
                  t.setLayoutData(
          new GridData(GridData.FILL_BOTH));
                  autoActivationCharacters 
          = new char[] '#''(' };
                  
          try {
                      keyStroke 
          = KeyStroke.getInstance("Alt+/");
                  }
           catch (ParseException e1) {
                      e1.printStackTrace();
                  }

                  ContentProposalAdapter adapter 
          = new ContentProposalAdapter(t,
                          
          new TextContentAdapter(), new SimpleContentProposalProvider(
                                  
          new String[] "建議1""建議2""建議3" }), keyStroke,
                          autoActivationCharacters);

              按照幫助文檔的描述如下:為了在用戶(hù)從彈出窗口中選擇建議時(shí)獲取和設(shè)置控件內(nèi)容,必須向適配器提供 IControlContentAdapter 實(shí)例,該實(shí)例可以檢索和設(shè)置特定類(lèi)型控件的內(nèi)容。對(duì)于文本字段來(lái)說(shuō),可以使用 TextContentAdapter 類(lèi)。但是,也可以靈活地實(shí)現(xiàn) IControlContentAdapter,以便將內(nèi)容建議適配器與任何其他類(lèi)型的控件配合使用。
              關(guān)鍵是定義ContentProposalAdapter類(lèi),它有幾個(gè)必須的參數(shù),第一個(gè)是需要進(jìn)行內(nèi)容輔助的控件,第二個(gè)是IControlContentAdapter 實(shí)例,jface默認(rèn)提供了二個(gè)實(shí)現(xiàn):ComboContentAdapter, TextContentAdapter。按照上面的建議,如果你需要更加高級(jí)的功能,那么得實(shí)現(xiàn)IControlContentAdapter第四個(gè)是IContentProposalProvider的實(shí)例,這是提供內(nèi)容輔助窗口中的內(nèi)容提供器的接口,jface只實(shí)現(xiàn)了一個(gè)SimpleContentProposalProvider,這是最簡(jiǎn)單的只提供文本內(nèi)容的內(nèi)容提供器。同樣的,你可以繼承IContentProposalProvider來(lái)實(shí)現(xiàn)更高級(jí)的功能。
              keyStroke是定義按下什么鍵時(shí)激活該提示。autoActivationCharacters是定義當(dāng)輸入遇到什么符號(hào)時(shí)會(huì)激活提示的字符數(shù)組。
             按照幫助文檔的說(shuō)明,可以在任意控件上安裝 ContentProposalAdapter 以提供此行為。需要什么樣的高級(jí)功能,就必須具體實(shí)踐一下以上幾個(gè)接口的實(shí)現(xiàn)。一般的編輯器都會(huì)配合SoucreViewer來(lái)提供這些功能。

          posted @ 2007-11-02 17:28 寒武紀(jì) 閱讀(2404) | 評(píng)論 (5)編輯 收藏

               摘要:     每當(dāng)做開(kāi)發(fā)的時(shí)候,你有可能在一次調(diào)試程序的過(guò)程中打開(kāi)很多個(gè)編輯器,或是對(duì)Eclipse默認(rèn)的視圖布局不滿(mǎn)意,手工作了一些調(diào)整。如果在工作的過(guò)程你因?yàn)橛惺码x開(kāi)或是不小心把Eclipse關(guān)掉了,不用擔(dān)心,在你下次打開(kāi)的時(shí)候,Eclipse仍然會(huì)為您記住上次的工作場(chǎng)景。下面是一個(gè)例子場(chǎng)景:        ...  閱讀全文

          posted @ 2007-10-30 15:51 寒武紀(jì) 閱讀(8686) | 評(píng)論 (0)編輯 收藏

              開(kāi)發(fā)基于Eclipse開(kāi)的RCP軟件可以直接加入Eclipse的幫助系統(tǒng),使您的產(chǎn)品更加完善。Eclipse幫助系統(tǒng)提供的良好組織模式以及基于lucene的全文搜索功能。在Eclipse的網(wǎng)站上有一篇文章專(zhuān)門(mén)介紹如何為Mail示例RCP添加幫助系統(tǒng)的,但是寫(xiě)的不完全,按照里面的說(shuō)明添加后無(wú)法正常地顯示幫助框架。網(wǎng)上有少部分文章也提及這個(gè)主題,但是都沒(méi)有說(shuō)明白。
              經(jīng)過(guò)一翻摸索,最后終于折騰出來(lái),在這里記錄下面,與大家分享。如果你做過(guò)RCP產(chǎn)品,下面這些內(nèi)容應(yīng)該很熟悉。
              1. 添加幫助的菜單。
                 在ApplicationActionBarAdvisor類(lèi)中加入幫助菜單項(xiàng)。代碼片斷如下:
                
          //幫助
              private IWorkbenchAction helpAction;

              
          /**
               * 創(chuàng)建操作
               
          */
              
          protected void makeActions(IWorkbenchWindow window) {
                  ....
           
                  
          /* 幫助 */
                  .....
                  helpAction 
          = ActionFactory.HELP_CONTENTS.create(window);
                  register(helpAction);
                  .....

               }

              
          /**
               * 填充主菜單
               
          */
              
          protected void fillMenuBar(IMenuManager menuBar) {
                  
          /* 主菜單欄 */
                  IMenuManager mainMenu 
          = getActionBarConfigurer().getMenuManager();
                  
                  MenuManager helpMenu 
          = new MenuManager("幫助(&H)", IWorkbenchActionConstants.M_HELP);
                  helpMenu.add(introAction);
                  helpMenu.add(helpAction);
                  ....
                  
                  
                  mainMenu.add(helpMenu);
              }
             2.  添加相關(guān)的依賴(lài)項(xiàng)。
                 打開(kāi)plugin.xml,轉(zhuǎn)到"依賴(lài)項(xiàng)"的tab頁(yè),點(diǎn)擊"添加"按鈕,需要加入下面的這些依賴(lài)項(xiàng):
          1. org.apache.lucene
          2.
          org.eclipse.help.appserver
          3.
          org.eclipse.help.base
          4.
          org.eclipse.help.ui
          5.
          org.eclipse.help.webapp
          6.
          org.eclipse.tomcat
          7.org.eclipse.ui.forms
             
              3. 添加org.eclipse.help.toc擴(kuò)展點(diǎn)
                 這個(gè)非常容易,轉(zhuǎn)到"擴(kuò)展"tab頁(yè),點(diǎn)擊“添加”按鈕。網(wǎng)上或是相關(guān)的書(shū)籍有很多關(guān)于添加help內(nèi)容的介紹,為了節(jié)省篇幅,這里直接添加一個(gè)擴(kuò)展向?qū)?lái)完成。選擇"擴(kuò)展向?qū)?-->"幫助內(nèi)容",確定后可以看到“所有擴(kuò)展”的列表中多了一個(gè)org.eclipse.help.toc擴(kuò)展,這里可能需要修改一下,生成的toc.xml和testToc.xml里面的label屬性標(biāo)簽不能是亂碼,不然幫助框架會(huì)讀不出,到時(shí)候顯示不出幫助的組織結(jié)構(gòu)。
                 結(jié)構(gòu)如下:
                
          <extension
                   
          point="org.eclipse.help.toc">
                
          <toc file="toc.xml"/>
                
          <toc
                      
          file="testToc.xml"
                      primary
          ="true"/>
             
          </extension>
             
              4. 部署產(chǎn)品配置
                 為您的RCP添加一個(gè)產(chǎn)品配置,打開(kāi)產(chǎn)品配置編輯器(xxx.product),轉(zhuǎn)到"配置"tab頁(yè),點(diǎn)擊“添加”,加入你的插件,然后點(diǎn)擊“添加必需的插件”,這樣在“插件和段”列表會(huì)看到你的插件以及你的RCP要完整啟動(dòng)的所有必需相關(guān)插件。在這里你應(yīng)該看到你在plugin.xml中依賴(lài)的那七個(gè)help相關(guān)的插件,以及一些以nl1結(jié)尾的插件,這些是語(yǔ)言插件。保存,轉(zhuǎn)到“概述”tab頁(yè),點(diǎn)擊"啟動(dòng)產(chǎn)品"。然后打開(kāi)“幫助--> 幫助內(nèi)容”,就可能看到你的幫助系統(tǒng)了。
              到此一個(gè)完整的幫助系統(tǒng)就完成了。下面是一個(gè)截圖:
             

          posted @ 2007-10-25 10:30 寒武紀(jì) 閱讀(8945) | 評(píng)論 (3)編輯 收藏

             最近為一個(gè)項(xiàng)目的服務(wù)器的做一個(gè)界面的時(shí)候,為了能把原來(lái)在后臺(tái)打印出來(lái)的相關(guān)信息重定向到GUI界面的時(shí)候,費(fèi)了一些心思。都是以前在實(shí)現(xiàn)的時(shí)候大多數(shù)信息的打印和測(cè)試時(shí)使用的都是System.out和System.err之類(lèi),圖個(gè)方便,沒(méi)有使用log功能。當(dāng)然這是個(gè)不好的習(xí)慣。
             剛開(kāi)始的時(shí)候用Swing做了一個(gè)面板,采用JTextPane組件作為打印信息的容器。可能是太久沒(méi)有用Swing了,在測(cè)試的時(shí)候這個(gè)東西的水平滑動(dòng)塊老是隨著信息的顯示自動(dòng)地滑向最后的地方,而且打印信息看起來(lái)很凌亂。后來(lái)就換用SWT,把打印的信息容器換用Text組件,把樣式定義為SWT.MULT | SWT.V_SCROLL | SWT.WRAP ,讓它可以自動(dòng)換行。
             查一下JDK的API文檔,System類(lèi)提供了可以重定向的方法setOut(PrintStream out)、setErr(PrintStream err)、setIn(InputStream in)。在此我們只需求使用setOut和setErr就夠了,這二個(gè)方法都要傳入一個(gè)PrintStream類(lèi)型的參數(shù),只要在調(diào)用打印信息的前面調(diào)用這二個(gè)方法重設(shè)輸出流和錯(cuò)誤流就可以達(dá)到我們的目的。那么我們繼承PrintStream類(lèi),并把要顯示信息的組件作為參數(shù)傳入到這個(gè)自定義的打印流類(lèi)中。

           1public class MyPrintStream extends PrintStream {
           2
           3    private Text text;
           4    
           5    public MyPrintStream(OutputStream out, Text text) {
           6        super(out);
           7        this.text = text;
           8    }

           9
          10    /**
          11     * 在這里重截,所有的打印方法都要調(diào)用的方法
          12     */

          13    public void write(byte[] buf, int off, int len) {
          14        final String message = new String(buf, off, len);
          15        
          16        /* SWT非界面線(xiàn)程訪(fǎng)問(wèn)組件的方式 */
          17        Display.getDefault().syncExec(new Thread(){
          18            public void run(){
          19                /* 在這里把信息添加到組件中 */
          20                text.append(message);
          21            }

          22        }
          );
          23    }

          24    
          25}

          把組件作為參數(shù)傳入到這個(gè)打印流中,并重寫(xiě)父類(lèi)的write(byte[] buf, int off, int len)方法,把寫(xiě)出的信息添加到組件上,注意到重載了帶OutputStream的構(gòu)造方法。
             這里有二點(diǎn)必須注意,確保組件在調(diào)用打印信息添加前是已經(jīng)被正確創(chuàng)建的,另外必須注冊(cè)不同GUI組件對(duì)線(xiàn)程的訪(fǎng)問(wèn)形式,像上面的SWT就對(duì)界面的訪(fǎng)問(wèn)有嚴(yán)格的規(guī)定。
             完成了PrintStream后,下面是如何使用,在我們啟動(dòng)界面后,使用下面的方式:
          1MyPrintStream mps = new MyPrintStream(System.out, text);
          2        System.setOut(mps);
          3        System.setErr(mps);

          ,這樣就可以把原來(lái)程序里的所有System.out和System.err信息轉(zhuǎn)移到你的GUI界面上。

          posted @ 2007-08-27 19:07 寒武紀(jì) 閱讀(1486) | 評(píng)論 (2)編輯 收藏

               摘要:   閱讀全文

          posted @ 2007-08-15 09:55 寒武紀(jì) 閱讀(6233) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共4頁(yè): 上一頁(yè) 1 2 3 4 
          主站蜘蛛池模板: 鄢陵县| 玛曲县| 岳阳市| 江川县| 天镇县| 茂名市| 平南县| 西林县| 荣成市| 马山县| 遂昌县| 霍城县| 三原县| 高安市| 扎兰屯市| 巍山| 巴塘县| 巴彦县| 广宗县| 瓮安县| 科尔| 金山区| 凤凰县| 文化| 界首市| 县级市| 海伦市| 金堂县| 米泉市| 房山区| 科技| 阿拉善右旗| 平舆县| 明光市| 信丰县| 曲阜市| 栖霞市| 古交市| 屯留县| 马山县| 安溪县|