2011-12-31 23 views
4

我想要一个像谷歌搜索一样的下拉组合框(即当我们键入一个字母,然后显示以该字母开头的元素)。当下拉列表出现时,我们可以选择其中一个词作为我们的文本框值。谷歌建议像Java SWT中的功能一样吗?

我能做到这一点的SWT?

comboLabel.addKeyListener(new KeyListener() 
{ 
    @Override 
    public void keyReleased(KeyEvent e) 
    { 
     ArrayList<String> listElements = new ArrayList<String>(); 
     // on pressing down arrow list gets expanded i.e list drops down 
     if(e.keyCode == 16777218) 
     { 
      comboLabel.setListVisible(true); 
     } 
     // if key pressed is only a number of charecter or space. 
     else if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 97 && e.keyCode <= 122) || e.keyCode == 32) 
     { 
      // for removing all previously assigned labels 
      comboLabel.remove(0,comboLabel.getItemCount()-1); 
      listElements = labels.getLabels(comboLabel.getText()); 
     } 

     for (int i=0; i<listElements.size();i++) 
     { 
      comboLabel.add(listElements.get(i),i); 
     } 
    } 
}); 

回答

2

什么你指的是自动提示组合框。据我所知,它在任何Java标准小部件库中都不可用。但是,很多人已经构建了自己的自动提示组件。 Here's a good example同时具有源代码和可执行文件“.jnlp”扩展名。

+0

您提供在秋千的例子更新。我不知道可以在SWT完成? – nik7 2012-01-01 00:33:16

+0

我认为SWT和Swing之间有足够的相似之处,移植一个小应用程序,比如这个是可行的。如果你有兴趣,下面是一些入门链接:http://carfield.com.hk/document/ java/tutorial/swing2swt.pdf和http://stackoverflow.com/questions/4650966/converting-an-awt-application-to-swt-jface。 – Abbas 2012-01-01 00:50:59

2

我不认为在SWT中有类似的东西。 SWT中的窗口小部件必须与所有平台上的本地窗口小部件(通常)相对应,因此执行类似的操作将非常困难。一个寻找SWT Widgets的新地方或实验场所是Nebula项目,但我没有在那里看到它。

+0

我暂时做了如下1)对于每个键输入这是我在组合框的字符串,并得到结果。 2)删除所有以前分配的组合列表项,3)将新的搜索结果添加到组合中。 4)SetListVisible属性为'true'。 4)后列表下降,焦点从组合的文本字段丢失。因此,在这个方法的困难是进入用户必须reclick对组合的文本字段获得焦点这是一个非常糟糕的界面:(任何建议,以改善这个每个键后? – nik7 2011-12-31 23:47:43

+0

你可以发布你的代码片段,也许我可以尝试一下,看看它如何能提高?它张贴在那里会得到良好的格式化原来的问题。 – 2011-12-31 23:58:56

+0

代码中的第一篇文章 – nik7 2012-01-01 00:29:34

0

应该不是难事。只需要一个列表,其中所有的搜索字符串,然后做一些正则表达式或indexOf的东西或Collections.binarySearch等,然后在所有选项的文本字段下绘制一个列表。我可以给你写一个例子。什么类型的搜索数据?