import java.util.ArrayList;
public class ThinkCombo {
/**
* @author zwb
*/
static List<String> list = new ArrayList<String>();
static {
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
list.add("six");
list.add("seven");
list.add("eight");
list.add("nine");
list.add("ten");
}
/**
* @param args
*/
public static void main(String[] args) {
Display display = Display.getDefault();
Shell shell = new Shell(display);
shell.setText("ThinkComboDemo");
shell.setLayout(new GridLayout(2, false));
Label label = new Label(shell, SWT.CENTER);
label.setText("select");
final Combo combo = new Combo(shell, SWT.BORDER);
GridData com_data = new GridData();
com_data.widthHint = 204;
com_data.horizontalAlignment = GridData.FILL;
com_data.grabExcessVerticalSpace = true;
combo.setLayoutData(com_data);
combo.setVisibleItemCount(5);
combo.clearSelection();
for (int k = 0; k < list.size(); k++) {
combo.add(list.get(k));
}
// 注册事件
combo.addListener(SWT.KeyUp, new Listener() {
@Override
public void handleEvent(Event event) {
if (event.keyCode == 13) {
combo.setListVisible(false);
} else if (event.keyCode != SWT.ARROW_DOWN && event.keyCode != SWT.ARROW_UP) {
// 添加延迟
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
if (null != combo.getText() && !combo.getText().trim().equalsIgnoreCase("")) {
String temp_str = combo.getText();
List<String> val_result = validate(temp_str);
combo.removeAll();
// combo.setText(temp_str);
for (int k = 0; k < val_result.size(); k++) {
combo.add(val_result.get(k));
}
combo.setListVisible(true);
//位置不能改变
combo.setText(temp_str);
// 控制光标的位置
int y = combo.getSelection().y;
combo.setSelection(new Point(temp_str.length() + 1, y));
combo.clearSelection();
} else {
combo.setListVisible(false);
combo.removeAll();
for (int k = 0; k < list.size(); k++) {
combo.add(list.get(k));
}
}
}
}
});
shell.setSize(300, 300);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
// 验证是否匹配
public static List<String> validate(String text) {
String val_str = null;
if ('*' != text.charAt(text.length() - 1)) {
text = text + "*";
}
if (text.indexOf("*") > -1) {
// 此处进行替换*o
val_str = text.replace("*", "\\w*");
}
// 防止有.的出现
val_str = val_str.replace(".", "\\.");
Pattern pattern = Pattern.compile(val_str);
// 验证list中是否匹配
List<String> temp_list = new ArrayList<String>();
for (int k = 0; k < list.size(); k++) {
Matcher mat = pattern.matcher(list.get(k).trim());
if (mat.matches()) {
temp_list.add(list.get(k));
}
}
return temp_list;
}
}
rcp combo组件实现自动联想功能
原创zwbloveparents ©著作权
©著作权归作者所有:来自51CTO博客作者zwbloveparents的原创作品,谢绝转载,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
由百度关键词联想联想到的
由下图联想到几个问题:1.百度的关键词联想确实是根据算法自动生成的。2.其人工干预度还.
联想 百度 算法 产品 自动生成 -
Java实现敏感词过滤java 敏感词 i++ 初始化 最大匹配

















