SWT自动补全

SWT中Text与Combo控件的自动补全

相信很多编程爱好者都会被大多数IDE中的代码补全功能相当熟悉,在Eclipse中提供自动补全的Alt加/(斜杠)或许已经成为所有Java开发者最常用的快捷键了。Eclipse中的控件都是基于SWT来开发的,那么在SWT的API中是否也具有这样的功能呢?答案是肯定的,我们这里就浅谈SWT中的自动补全功能。在本博文中我们主要针对与Text与Combo两大控件,现在我们直接上代码:
Display display = Display.getDefault();//获取Display
Shell shell = new Shell(); 
shell.setSize(300, 150); //设置窗体大小
shell.setLocation(500, 200);//设置窗体位置
shell.setText("自动补全");//设置标题


//Text控件
Text text = new Text(shell, SWT.BORDER);//添加一个Text控件
text.setBounds(50, 20, 180, 28);//由于Shell没有加布局,这里设置它的位置和大小

//Text控件的自动补全
new AutoCompleteField(text, new TextContentAdapter(), new String[]{"我是一个程序猿","我要加班","我爱编程","你是谁?","你在干什么"});

//Combo控件
Combo combo = new Combo(shell, SWT.DROP_DOWN);//添加一个Combo控件
combo.setBounds(50, 60, 180, 28);//设置Combo控件的位置和大小
String[] items = new String[]{"java语言","C语言","C++语言","C#语言","JavaScript脚本语言"};
combo.setItems(items);//设置Combo组件的选项
//Combo控件的自动补全
new AutoCompleteField(combo, new ComboContentAdapter(),items);


shell.open();
while (!shell.isDisposed()) {//循环不让窗体关掉
    if (!display.readAndDispatch()) {
        display.sleep();
    }
}
display.dispose();
本例子中的代码很简单,读者可以直接拷到一个main方法中运行,其运行效果如图1到图3:
图1 运行效果

图2  输入“我“后弹出提示


图3  选择某一条后自动补全

同样的Combo组件也是一样的,这里第一幅图是直接选择的效果如,第二幅图是输入字符串“C“的效果如,第三幅是选择“C语言”的效果图,具体如图4到图6:
图4  下来框下拉时的选项
图5  下拉框输入“C”之后的提示效果


图6  选择某一提示后的效果

本例子中最有用的就是一行代码,没错,SWT通过这一行代码来实现自动补全功能,如下。其中AutoCompleteField 这个类是SWT给出的,他有三个参数第一个参数是他所控制的控件,如果我们要让文本控件自动补全,我们就把他的对象传进去就行了;第二个参数是适配器,对于Text控件我们调用TextContentAdapter即可,对于Combo我们调用ComboContentAdapter即可,他们都是SWT的API提供,有兴趣的读者可以参考它们的源代码然后定义出自己的适配器,以产生不同的效果;第三个参数是提示的文字数组,也就是显示的字,需要注意的是Combo控件的自动补全的值可以和下拉的值不同,也就是setItems方法的值可以和ComboContentAdapter第三个参数的值不同,不过在开发的时候更多的时候是需要他们相同的。
new AutoCompleteField(text, new TextContentAdapter(), new String[]{"我是一个程序猿","我要加班","我爱编程","你是谁?","你在干什么"});
有时候我们会在某些情况下需要改变补全的值,同样很简单,只要调用autoCompleteField对象的setProposals方法即可代码如下:
AutoCompleteField autoCompleteField = new AutoCompleteField(text, new TextContentAdapter(), new String[]{"我是一个程序猿","我要加班","我爱编程","你是谁?","你在干什么"});</span>
autoCompleteField.setProposals(new String[]{"我就爱敲代码","我今天又学到了新东西"});
运行如下,发现果然变了,如图7:
 
图7  修改后的效果

最后补充一点,有时候我们希望Combo组件不可直接输入,我们可以加入如下样式即可:
Combo combo = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY);

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值