SWT:带auto complete feature的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的代码如下:

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.eclipsezone.com/eclipse/forums/t95109.html

http://sourcezone.wordpress.com/2008/02/14/java-jface-autocomplete-comboviewer/

转载于:https://my.oschina.net/uniquejava/blog/87573

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值