2011-12-31 41 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等,然後在所有選項的文本字段下繪製一個列表。我可以給你寫一個例子。什麼類型的搜索數據?