为SWT文本控件添加弹出式内容辅助

    通常情况下,用户应该在简单字段(例如文本字段或组合框)中提供文本信息。虽然用来填充这些字段的应用程序代码通常比用来填充复杂窗口小部件(例如表或树)的代码简单得多,但这些“简单”字段通常会给用户带来更多负担。用户必须确定哪些字段需要内容、某个字段是否包含有效内容以及应该选择哪些选项。JFace 的字段辅助支持提供了一些类来帮助指导用户完成输入任务。
    org.eclipse.jface.fieldassist包提供了二种方式的辅助。带修饰字段支持允许您提供图像修饰,以便向用户提供有关特定字段状态的提示。内容建议支持允许您提供内容辅助弹出窗口,以便向用户提供内容选项。
    下面了解一下关于内容建议部分。
    一般的IDE工具都有内容建议的功能,比如很常见的Java编辑器,输入“.”之后就会激活一个窗口,从里面可以选择方法或字段,这个功能可以快速高效地完成代码,而且可以减少很多输入错误。jface的fieldassist提供了对这个功能的支持。
    我们做一个demo,先看一下这个demo的效果。
     
     当按下Alt + '/'的时候,弹出内容辅助的窗口。从中可以选择相应的建议,进行快速输入。
    下面是相应的代码,非常简单。
    

sShell  =   new  Shell();
        sShell.setText(
" Shell " );
        GridLayout gridLayout 
=   new  GridLayout( 1 false );
        sShell.setLayout(gridLayout);
        sShell.setSize(
new  Point( 300 200 ));
        
        
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来提供这些功能。



刚进场的时候戏就落幕

你可能感兴趣的:(为SWT文本控件添加弹出式内容辅助)