nighty

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

          posted @ 2008-01-28 09:48 寒武紀 閱讀(2795) | 評論 (4)編輯 收藏

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

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

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

          posted @ 2007-11-02 17:28 寒武紀 閱讀(2412) | 評論 (5)編輯 收藏

               摘要:     每當做開發的時候,你有可能在一次調試程序的過程中打開很多個編輯器,或是對Eclipse默認的視圖布局不滿意,手工作了一些調整。如果在工作的過程你因為有事離開或是不小心把Eclipse關掉了,不用擔心,在你下次打開的時候,Eclipse仍然會為您記住上次的工作場景。下面是一個例子場景:        ...  閱讀全文

          posted @ 2007-10-30 15:51 寒武紀 閱讀(8693) | 評論 (0)編輯 收藏

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

              
          /**
               * 創建操作
               
          */
              
          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.  添加相關的依賴項。
                 打開plugin.xml,轉到"依賴項"的tab頁,點擊"添加"按鈕,需要加入下面的這些依賴項:
          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擴展點
                 這個非常容易,轉到"擴展"tab頁,點擊“添加”按鈕。網上或是相關的書籍有很多關于添加help內容的介紹,為了節省篇幅,這里直接添加一個擴展向導來完成。選擇"擴展向導"-->"幫助內容",確定后可以看到“所有擴展”的列表中多了一個org.eclipse.help.toc擴展,這里可能需要修改一下,生成的toc.xml和testToc.xml里面的label屬性標簽不能是亂碼,不然幫助框架會讀不出,到時候顯示不出幫助的組織結構。
                 結構如下:
                
          <extension
                   
          point="org.eclipse.help.toc">
                
          <toc file="toc.xml"/>
                
          <toc
                      
          file="testToc.xml"
                      primary
          ="true"/>
             
          </extension>
             
              4. 部署產品配置
                 為您的RCP添加一個產品配置,打開產品配置編輯器(xxx.product),轉到"配置"tab頁,點擊“添加”,加入你的插件,然后點擊“添加必需的插件”,這樣在“插件和段”列表會看到你的插件以及你的RCP要完整啟動的所有必需相關插件。在這里你應該看到你在plugin.xml中依賴的那七個help相關的插件,以及一些以nl1結尾的插件,這些是語言插件。保存,轉到“概述”tab頁,點擊"啟動產品"。然后打開“幫助--> 幫助內容”,就可能看到你的幫助系統了。
              到此一個完整的幫助系統就完成了。下面是一個截圖:
             

          posted @ 2007-10-25 10:30 寒武紀 閱讀(8950) | 評論 (3)編輯 收藏

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

           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     * 在這里重截,所有的打印方法都要調用的方法
          12     */

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

          22        }
          );
          23    }

          24    
          25}

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

          ,這樣就可以把原來程序里的所有System.out和System.err信息轉移到你的GUI界面上。

          posted @ 2007-08-27 19:07 寒武紀 閱讀(1489) | 評論 (2)編輯 收藏

               摘要:   閱讀全文

          posted @ 2007-08-15 09:55 寒武紀 閱讀(6236) | 評論 (0)編輯 收藏

          僅列出標題
          共4頁: 上一頁 1 2 3 4 
          主站蜘蛛池模板: 渭源县| 安平县| 大名县| 江津市| 咸丰县| 康保县| 班玛县| 三明市| 沙田区| 太仓市| 泸溪县| 英超| 泰来县| 高安市| 奉贤区| 醴陵市| 文成县| 瑞金市| 北安市| 辽宁省| 潼关县| 新竹县| 弥渡县| 潍坊市| 万全县| 梧州市| 凤阳县| 乌拉特后旗| 陕西省| 卫辉市| 甘德县| 资溪县| 凤冈县| 伊春市| 上思县| 望谟县| 壶关县| 台山市| 岱山县| 游戏| 五常市|