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

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

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

    月蝕傳說

    浮躁讓人失去理智
    posts - 25, comments - 101, trackbacks - 0, articles - 0
      BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

    大家在使用Eclipse編寫Java代碼的時候,一定被Java代碼編輯器的強大功能所吸引:出色的錯誤提示,準確的內容幫助,文本的折疊等等。今天我以Eclipse插件中的XML Editor例子作為模板,為XML文本編輯器加入內容幫助(Content Assis)。

    1.內容幫助簡介

    在目前流行的IDE中,內容提示幫助是必不可少的功能,可以說,如果沒有了內容幫助,那IDE就不能稱為IDE。有了內容幫助提示,能大大提高代碼編寫速度。

    請看下圖:當我們在Java編輯器中輸入‘.’的時候,就會彈出一個菜單,里面列出了類所具有的方法以及屬性,并且在我們繼續輸入字符的時候,彈出的內容會隨著我們的輸入進行過濾。



    下面我們以Eclipse的XML Editor Example為例,介紹一下內容幫助如何實現的。

    2.創建XML Editor

    我們首先需要建立一個Plugin工程,然后在向導頁中選擇我們要生成的XML Editor例子:



    點Finish完成,這時候我們的工程便生成了,并且向導還為我們生成了XML Editor所需要的一些類,以及為我們的Plugin.xml實現了org.eclipse.ui.editors擴展點:



    3.簡單的內容幫助

    在我們生成的類中,有一個名為XMLConfiguration的類,該類對XML Editor進行了一些設置,包括如何去為不同的文本區域顯示不同的顏色等,TextEditor所維護的SourceViewer就是通過它來進行設置的,但這不是我們所要討論的范圍,這里簡單地介紹一下即可。

    接下來我們需要復寫XMLConfiguration的一個方法:getContentAssistant。這個方法便是告訴我們的編輯器,我們所具有的內容幫助是什么,在創建XML Editor的時候,默認是不為我們生成這方面代碼的,所以我們需要自己復寫:

    ???? public ?IContentAssistant?getContentAssistant(ISourceViewer?sourceViewer)?{
    ????????
    // ?生成一個ContentAssistant
    ????????ContentAssistant?assistant? = ?? new ?ContentAssistant();
    ?
    ????????
    // ?設置幫組內容彈出響應時間
    ????????assistant.setAutoActivationDelay( 200 );
    ????????assistant.enableAutoActivation(
    true );
    ????????
    return ?assistant;
    ????}

    ContentAssistant并不是內容幫助的提供者,它只是維護我們的內容幫助,幫我們彈出菜單以及幫助內容信息等作用。
    真正告訴ContentAssistant要顯示那些幫助內容的,是IContentAssistProcessor接口類。讓我們創建一個名為StrutsContentAssisProcessor的類,并讓它實現IContentAssistProcessor接口:

    public?class?StrutsContentAssisProcessor?implements?IContentAssistProcessor?{

    ????
    public?ICompletionProposal[]?computeCompletionProposals(ITextViewer?viewer,
    ????????????
    int?offset)?{
    ????????
    return?null;
    ????}

    ????
    public?IContextInformation[]?computeContextInformation(ITextViewer?viewer,
    ????????????
    int?offset)?{
    ????????
    return?null;
    ????}

    ????
    public?char[]?getCompletionProposalAutoActivationCharacters()?{
    ????????
    return?null;
    ????}

    ????
    public?char[]?getContextInformationAutoActivationCharacters()?{
    ????????
    return?null;
    ????}

    ????
    public?String?getErrorMessage()?{
    ????????
    return?null;
    ????}

    ????
    public?IContextInformationValidator?getContextInformationValidator()?{
    ????????
    return?null;
    ????}

    }

    大家注意下computeCompletionProposals方法,這個方法便是返回我們的具體內容幫助。所以我們需要為我們的編輯器創建所需要的內容幫助:CompletionProposal

    先看一下這個類的構造函數各個參數的含義:

    ???? *?@param replacementString?:選擇幫助信息后所要替代的文本內容
    ?????*?@param?replacementOffset?:替代內容輸入的位置
    ?????
    *?@param?replacementLength?:替代文本覆蓋原來文本的長度???
    ?? ??
    *?@param?cursorPosition?:完成內容幫助的文本替代后,光標所在位置
    ?????
    *?@param?image?:幫助內容顯示的圖標
    ?????
    *?@param?displayString?:幫助內容的顯示字符串
    ?????*?@param?contextInformation?:幫助內容的信息描述
    ?????*?@param?additionalProposalInfo?:附加信息

    在這幾個參數中image 、contextInformation、additionalProposalInfo我們可以設置為空。現在讓我們在computeCompletionProposals生成我們的幫助內容:

    ?public?ICompletionProposal[]?computeCompletionProposals(ITextViewer?viewer,
    ????????????
    int?offset)?{
    ????????ICompletionProposal[]?proposals?
    =?new?ICompletionProposal[2];
    ????????
    ????????proposals[
    0]?=?new?CompletionProposal("替換文本1",?offset,?0,?new?String("替換文本1").length(),?null,?"幫組內容1",?null,null)?;
    ????????proposals[
    1]?=?new?CompletionProposal("替換文本2",?offset,?0,?new?String("替換文本2").length(),?null,?"幫組內容2",?null,null)?;
    ????????
    ????????
    return?proposals;
    ????}

    computeCompletionProposals輸入的參數中 offset是指當內容幫助彈出的時候,文本編輯器光標所在位置。

    大家都知道,幫助內容彈出的時候是需要一定條件的,也就是當我們輸入了激活內容幫助的字符的時候,它便會彈出來。IContentAssistProcessor?的getCompletionProposalAutoActivationCharacters方法便是讓我們返回激活幫助內容字符的,假設當我們輸入了‘<’時,彈出幫助內容:

    ???public?char[]?getCompletionProposalAutoActivationCharacters()?{
    ????????
    return?new?String("<").toCharArray();
    ????}

    好了,我們的第一步已經完成了,接下來就是在ContentAssis對象中設置我們所要返回的內容幫助。
    返回到XMLConfiguration的getContentAssistant方法:

    ????public?IContentAssistant?getContentAssistant(ISourceViewer?sourceViewer)?{
    ????????
    //?生成一個ContentAssistant
    ????????ContentAssistant?assistant?=??new?ContentAssistant();
    ????????
    //?讓幫助內容在XML的Tag標簽范圍內激%

    評論

    # re: Eclipse plugin開發之TextEditor —— 如何實現文本內容幫助  回復  更多評論   

    2006-12-08 13:15 by 河風
    Good THX

    # re: Eclipse plugin開發之TextEditor —— 如何實現文本內容幫助  回復  更多評論   

    2007-03-30 19:54 by ffxiangyu
    最后一個方法是不是缺一段?

    # re: Eclipse plugin開發之TextEditor —— 如何實現文本內容幫助  回復  更多評論   

    2007-07-25 02:28 by Acan
    對啊!關鍵的一段缺了,吊胃口!
    主站蜘蛛池模板: 嫩草成人永久免费观看| 一区二区三区免费电影| 18女人毛片水真多免费| 亚洲成a人片77777kkkk| 国产在线观看无码免费视频| 狠狠亚洲狠狠欧洲2019| 一级做a爰片久久免费| 亚洲一区精品伊人久久伊人| 免费福利在线观看| 在线观看亚洲av每日更新| 久久精品免费大片国产大片| 国产亚洲精品va在线| 18禁在线无遮挡免费观看网站| 久久亚洲伊人中字综合精品| 免费无码成人AV在线播放不卡 | 免费很黄很色裸乳在线观看| 全部在线播放免费毛片| 国产亚洲精品资在线| 国产精品白浆在线观看免费| 亚洲天堂中文字幕在线观看| 成人毛片免费观看视频在线| 亚洲成熟丰满熟妇高潮XXXXX| 四只虎免费永久观看| 99热在线日韩精品免费| 中文字幕亚洲第一在线| 成人在线免费看片| 丰满亚洲大尺度无码无码专线| 久久久久国产成人精品亚洲午夜| 成人性生交大片免费看中文| 亚洲国产精品综合一区在线| 国产成人高清精品免费鸭子| 久久最新免费视频| 亚洲乱码日产精品BD在线观看| 免费国产黄线在线观看| 国产99久久久国产精免费| 亚洲影院在线观看| 国产一级一片免费播放| 无码国产精品一区二区免费vr | 外国成人网在线观看免费视频| 亚洲人成自拍网站在线观看| 亚洲永久精品ww47|