首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

制作简单的搜索引擎,该如何解决

2012-03-30 
制作简单的搜索引擎利用swt的Combo下拉菜单控件制作一个简单的类似百度的搜索引擎,假如当在combo的文本框

制作简单的搜索引擎
利用swt的Combo下拉菜单控件制作一个简单的类似百度的搜索引擎,假如当在combo的文本框中输入a时,能够读取到数据库中数据a,ab,abc,abcd然后填充到combo的下拉菜单中;当输入ab时,下拉菜单为ab,abc,abcd;当输入abc时,下拉菜单为abc,abcd。就是在文本框文本值更改事件方法中写入:

Java code
Searchcombo.addListener(SWT.Modify, new Listener() {                        @Override            public void handleEvent(Event arg0) {                String value=Searchcombo.getText().trim().toLowerCase();                if (Searchcombo.getItemCount()!=0) {                    Searchcombo.removeAll();                }                //去读数据库                List<String> keys=getsss();                for (String key : keys) {                    if (key.indexOf(value)!=-1) {                        Searchcombo.add(key);                        System.out.println(Searchcombo.getItemCount());                    }                }            }        });


这样写就会出错,因为Searchcombo.removeAll();方法默认更改文本框值,就会重新调用此方法,从而死循环.所以我更改为:
Java code
Searchcombo.addListener(SWT.Modify, new Listener() {                        @Override            public void handleEvent(Event arg0) {                String value=Searchcombo.getText().trim().toLowerCase();                if (Searchcombo.getItemCount()!=0) {                    String[] removeItem=Searchcombo.getItems();                    //循环删除下拉菜单选项                    for (int i = 0; i < removeItem.length; i++) {                        System.out.println(removeItem[i]+"--");                        Searchcombo.remove(removeItem[i]);                    }                    Searchcombo.setText(value);                }                                List<String> keys=getsss();                for (String key : keys) {                    if (key.indexOf(value)!=-1) {                        Searchcombo.add(key);                        System.out.println(Searchcombo.getItemCount());                    }                }            }        });


可是这么写下拉菜单项总是出现重复项,就是有N多个a,N多个ab,n多个abc等等,debug跟踪也总是跟踪不到,请高手更改一下我的代码,那里写错了,谢谢

[解决办法]
关键①是不能删除掉选定项②不能重复添加项
代码如下
Java code
            public void handleEvent(Event arg0) {                String value = searchCombo.getText().trim().toLowerCase();                String[] items = searchCombo.getItems();                int selection = searchCombo.getSelectionIndex();                String selectText;                if (selection==-1) selectText = null;                else selectText = searchCombo.getItem(searchCombo.getSelectionIndex());                for (int i=0; i<items.length; i++) {                    if (selection!=i) searchCombo.remove(items[i]);                }                // 去读数据库                List<String> keys = getsss();                for (String key : keys) {                    if (key.indexOf(value) != -1 && !key.equals(selectText)) {                         searchCombo.add(key);                        System.out.println(searchCombo.getItemCount());                    }                } 

热点排行