<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
    對啊!關鍵的一段缺了,吊胃口!
    主站蜘蛛池模板: 91精品成人免费国产| 99久热只有精品视频免费观看17| 狠狠综合久久综合88亚洲| 午夜爽爽爽男女免费观看影院| 亚洲国产成a人v在线| 亚洲国产精品碰碰| 蜜桃AV无码免费看永久| 美女黄色毛片免费看| 久久精品国产亚洲AV高清热| 国产精品视频免费一区二区三区| a级成人毛片免费视频高清| 亚洲中文字幕一区精品自拍| 亚洲色精品aⅴ一区区三区| 噜噜嘿在线视频免费观看| 国产免费无码一区二区| 国产亚洲视频在线观看| 久久精品国产亚洲av高清漫画| 免费a级毛片永久免费| 2020久久精品国产免费| 国产免费一级高清淫曰本片| 日韩亚洲国产高清免费视频| 亚洲人成色77777| 国产男女猛烈无遮挡免费网站| 免费精品99久久国产综合精品| 国产精品亚洲专区无码不卡| 亚洲一级毛片视频| 亚洲va国产va天堂va久久| 四只虎免费永久观看| 无码人妻一区二区三区免费 | 久久精品国产影库免费看| 亚洲a∨无码精品色午夜| 亚洲中文久久精品无码1| 亚洲av日韩综合一区在线观看| 亚洲av无码专区在线观看素人| 日本一区二区三区免费高清| 华人在线精品免费观看| 成人福利在线观看免费视频| 亚洲人成网站免费播放| 亚洲一本之道高清乱码| 久久久久亚洲AV无码观看| 亚洲av最新在线网址|