2012-11-09 46 views
3

我正在使用org.eclipse.jface.fieldassist.AutoCompleteField類來建議我的組合框選項。但它沒有用,因爲它只是建議在開始時與輸入的文本匹配的條目。eclipse AutoCompleteField只建議以輸入文本開頭的條目嗎?

JavaCode:

ComboContentAdapter comboAdapter = new ComboContentAdapter();      
    new AutoCompleteField(branchCombo,comboAdapter,branchCombo.getItems()); 

例子:

組合框選項:

['ZMEDIA_TWITTER_MIGRATION_BRANCH','ZMEDIA_TWITTER_HOTFIX_BRANCH','ZMEDIA_FB_BRANCH']. 

如果我輸入組合框中TWITTER它表明什麼。它看起來像TWITTER與組合框選項中的startswith匹配。

是否有任何選項可以覆蓋此?

謝謝你

回答

4

簡而言之,沒有。

但是,您可以通過實施並在其'getProposals(String contents, int position)方法中實施您的過濾邏輯來創建您自己的提案提供程序來實現此目的。

然後,只需您的建議提供者添加到ContentProposalAdapter並調整組合框,如下:

MyContentProposalProvider provider = new MyContentProposalProvider(combo.getItems()); 
ContentProposalAdapter adapter = new ContentProposalAdapter(combo, comboAdapter, provider, null, null); 
adapter.setPropagateKeys(true); 
adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE); 
+0

如果有人想知道,它看起來足夠使用了「新ComboContentAdapter()」作爲comboAdapter。 – ocroquette

1

正是因爲tkotisis說,你可以實現自己的IContentProposalProvider,如果你想有一個提供給所有包含用戶鍵入的字符的提案都可以使用我提出的代碼。

注意:轉換爲字符不是必需的,你也可以使用原始字節,但如果你想進一步處理你的提供程序,它可以更容易地使用char!

IContentProposalProvider proposalProvider = new IContentProposalProvider() { 

      @Override 
      public IContentProposal[] getProposals(String contents, int position) { 
       String[] props = new String[] { "Test0", "Test1", "Test2", 
         "Test3" }; // This is all your propsals. 
       List<IContentProposal> validProposals = new ArrayList<IContentProposal>(); 
       for (String prop : props) { 
        contents = contents.substring(0, position); 
        for (byte b : contents.getBytes()) { 
         char c = (char) (b & 0xFF); 
         if (prop.indexOf(c) != -1) { // This is where it checks if the proposal contains the chars. 
          validProposals.add(new ContentProposal(prop)); 
          break; 
         } 
        } 
       } 
       return validProposals.toArray(new IContentProposal[validProposals.size()]); 
      } 
     };