3

我正在使用org.eclipse.jface.fieldassist.AutoCompleteField类来建议我的组合框选项。但它没有用,因为它只建议与开头输入的文本匹配的条目。

Java代码:

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

例子 :

组合框选项:

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

如果我TWITTER在组合框中键入它什么都没有。它看起来像TWITTER组合框选项中的 with startswith 匹配。

有什么选项可以覆盖它吗?

感谢您

4

2 回答 2

4

简单地说,没有。

但是,这可以通过在其方法中实现org.eclipse.jface.fieldassist.IContentProposalProvider和实现您的过滤逻辑来创建您自己的提案提供者来实现。getProposals(String contents, int position)

然后,只需将您的提案提供者添加到 aContentProposalAdapter并调整组合框,如下所示:

MyContentProposalProvider provider = new  MyContentProposalProvider(combo.getItems());
ContentProposalAdapter adapter = new ContentProposalAdapter(combo, comboAdapter, provider, null, null);
adapter.setPropagateKeys(true);
adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
于 2012-11-10T18:56:23.620 回答
1

正如tkotisis所说,您可以实现自己的 IContentProposalProvider,如果您希望 Provider 提供包含用户键入的任何字符的所有提案,您可以使用我想出的这段代码。

注意:转换为 char 不是必须的,您也可以使用原始字节,但如果您想进一步处理您的 Provider,使用 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()]);
            }
        };
于 2013-11-22T18:05:57.647 回答