swt combo 自动补全

本文介绍了一个使用Java SWT库实现的组合框自动完成功能。通过监听键盘事件并在输入时提供匹配项建议来增强用户体验。该功能适用于星期等枚举型数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()));
                 }
             }
         });
     }

转载于:https://www.cnblogs.com/zyszeal/p/4461288.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值