[Eclipse]实现内容助理(1. 自动完成)

简介:

在实际项目应用里,如果需要用户手动输入比较复杂的文本内容时可以考虑利用内容助理(Content Assistant)功能减轻用户负担,同时减低出错的机会。Jface的SourceViewer支持内容助理,这篇帖子里介绍一下如 何实现自动完成(Auto Completion)功能,即向用户提示接下来可能输入的内容。

// Create a new source viewer
sourceViewer  =   new  SourceViewer(shell,  null , SWT.BORDER  |  SWT.WRAP  |  SWT.V_SCROLL);

// Set a blank document
sourceViewer.setDocument( new  Document( "" ));
sourceViewer.setEditable(
true );

StyledText txtSource  =  sourceViewer.getTextWidget();
GridData gd 
=   new  GridData(GridData.FILL_BOTH);
txtSource.setLayoutData(gd);

自动完成功能一般在以下两种条件下弹出一个小窗口向用户提示当前可供选择的选项,一是用户按下指定的组合键时,二是用户输入了特定的字 符时,SourceViewer支持这两种触发方式。在程序里使用SourceViewer和使用一般控件没有很大的分别,只是SourceViewer 是StyledText的包装,所以一些操作要通过getTextWidget()完成,如下所示:

// Configure source viewer, add content assistant support
sourceViewer.configure( new  SourceViewerConfiguration() {
    @Override
    
public  IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
        ContentAssistant assistant 
=   new  ContentAssistant();
        IContentAssistProcessor cap 
=   new  MyContentAssistProcessor();
        assistant.setContentAssistProcessor(cap, IDocument.DEFAULT_CONTENT_TYPE);
        assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
        assistant.enableAutoActivation(
true );
        
return  assistant;
    }
});

现在这个SourceViewer还不能弹出任何提示,因为我们还没有给它一个SourceViewerConfiguration,后者通过getContentAssistant()负责提供一个IContentAssistant的实现。下面的代码显示了如何为SourceViewer设置SourceViewerConfiguration,这个例子里不论当前文本框里是什么内容都弹出一样的提示选项,在实际应用里可以根据内容改变选项:

public  ICompletionProposal[] computeCompletionProposals(ITextViewer viewer,  int  offset) {
    String content 
=  viewer.getTextWidget().getText();

    
try  {

        
// Demo options
         final  String[] options  =   new  String[] {  " sum() " " count() " " sort() "  };

        
// Dynamically generate proposal
        ArrayList result  =   new  ArrayList();
        
for  ( int  i  =   0 ; i  <  options.length; i ++ ) {
            CompletionProposal proposal 
=   new  CompletionProposal(options[i], offset,  0 , options[i].length());
            result.add(proposal);
        }
        
return  (ICompletionProposal[]) result.toArray( new  ICompletionProposal[result.size()]);
    } 
catch  (Exception e) {
        e.printStackTrace();
    }
    
return   null ;
}

public   char [] getCompletionProposalAutoActivationCharacters() {
    
return  TRIGGER_TOKENS;
}

上面代码里,MyContentAssistProcessor是我们对IContentAssistant接口的实现,它里面与自动完成有关的是computeCompletionProposals()和getCompletionProposalAutoActivationCharacters()这两个方法,前者返回的结果数组将作为弹出提示窗口里的选项,后者返回的字符数组包含了可以触发弹出窗口的特殊字符。

最后,我们还要支持用户触发内容助理,这要求为SourceViewer添加一个监听器:

sourceViewer.appendVerifyKeyListener( new  VerifyKeyListener() {
    
public   void  verifyKey(VerifyEvent event) {
        
//  Check for Alt+/
         if  (event.stateMask  ==  SWT.ALT  &&  event.character  ==   ' / ' ) {
            
//  Check if source viewer is able to perform operation
             if  (sourceViewer.canDoOperation(SourceViewer.CONTENTASSIST_PROPOSALS))
                
//  Perform operation
                sourceViewer.doOperation(SourceViewer.CONTENTASSIST_PROPOSALS);
            
//  Veto this key press to avoid further processing
            event.doit  =   false ;
        }
    }
});

实现后的结果截图如下图所示,(示例代码下载):

本文转自博客园八进制的博客,原文链接:[Eclipse]实现内容助理(1. 自动完成),如需转载请自行联系原博主。

相关文章
|
6月前
|
Java Maven Android开发
在Eclipse里配置Maven插件
Maven是一款比较常用的Java开发拓展包,它相当于一个全自动jar包管理器,会导入用户开发时需要使用的相应jar包。使用Maven开发Java程序,可以极大提升开发者的开发效率。下面我就跟大家介绍一下如何在Eclipse里安装和配置Maven插件。
145 0
|
6月前
|
XML Java Maven
eclipse 、idea 安装activiti插件
eclipse 、idea 安装activiti插件
149 0
|
11月前
|
Java Android开发
eclipse安装SpringBoot插件的无敌办法
eclipse安装SpringBoot插件的无敌办法
125 0
|
11月前
|
Java Android开发 Spring
在 Eclipse 中安装 SpringTools 插件
在 Eclipse 中安装 SpringTools 插件
124 0
|
12月前
|
XML Java 应用服务中间件
Eclipse插件下载地址汇总
Eclipse插件下载地址汇总
297 0
|
存储 Android开发
Eclipse安装Flowable Eclipse Designer插件实现图形建模BPMN 2.0流程图
Eclipse安装Flowable Eclipse Designer插件实现图形建模BPMN 2.0流程图
376 0
|
IDE NoSQL Java
Eclipse下载安装和JDK下载安装(环境配置)及下载C++插件CDT
Eclipse下载安装和JDK下载安装(环境配置)及下载C++插件CDT
367 0
|
存储 Java 应用服务中间件
Java开发 —— eclipse,myeclipse安装+Tomcat插件
Java开发 —— eclipse,myeclipse安装+Tomcat插件
Java开发 —— eclipse,myeclipse安装+Tomcat插件

推荐镜像

更多