标签:
public class AutoCompleteComboMain { static final Display display = new Display(); static final Shell shell = new Shell(display); static String[] items = new String[] { "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" , "Sunday" }; public static void main(String[] args) { shell.setText( "SWT" ); shell.setLayout( new GridLayout()); Combo combo = new Combo(shell, SWT.BORDER); for ( int i = 0 ; i < items.length; i++) { combo.add(items[i]); } ComboUtil.addAutoCompleteFeature(combo); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } } |
关键的ComboUtil的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public class ComboUtil { public static void addAutoCompleteFeature(Combo combo) { // Add a key listener combo.addKeyListener( new KeyAdapter() { public void keyReleased(KeyEvent keyEvent) { Combo cmb = ((Combo) keyEvent.getSource()); setClosestMatch(cmb); } // Move the highlight back by one character for backspace public void keyPressed(KeyEvent keyEvent) { if (keyEvent.keyCode == SWT.BS) { Combo cmb = ((Combo) keyEvent.getSource()); Point pt = cmb.getSelection(); cmb.setSelection( new Point(Math.max( 0 , pt.x - 1 ), pt.y)); } } private void setClosestMatch(Combo combo) { String str = combo.getText(); String[] cItems = combo.getItems(); // Find Item in Combo Items. If full match returns index int index = - 1 ; for ( int i = 0 ; i < cItems.length; i++) { if (cItems[i].toLowerCase().startsWith(str.toLowerCase())) { index = i; break ; } } if (index != - 1 ) { Point pt = combo.getSelection(); combo.select(index); combo.setText(cItems[index]); combo.setSelection( new Point(pt.x, cItems[index].length())); } } }); } |
标签:
原文地址:http://www.cnblogs.com/zyszeal/p/4461288.html