Netbeans QuickSearch结果查找

时间:2013-11-29 17:06:01

标签: netbeans lookup

好吧,我想在应用程序中提供QuickSearch结果,当然还有通过查找。 搜索效果很好,但通过全局查找找不到结果。

有人可以帮助解决这个问题吗?

以下是quicksearch的代码:

public class QSERSCompany implements SearchProvider {

@Override
public void evaluate(SearchRequest request, SearchResponse response) {
    try {
        for (Company k : queries.ERSQuery.allCompanies()) {

            if (k.getCompanyName().toLowerCase().contains(request.getText().toLowerCase())) {
                if (!response.addResult(new SearchResult(k), k.getCompanyName())) {
                    return;
                }
            }
        }
    } catch (NullPointerException npe) {
    }
}

private static class SearchResult implements Runnable, Lookup.Provider {

    private final Company company;
    private final InstanceContent ic = new InstanceContent();
    private final Lookup lookup = new AbstractLookup(ic);

    public SearchResult(Company c) {
        this.company= c;
    }

    @Override
    public void run() {
        ic.add(company);

        try {
            StatusDisplayer.getDefault().setStatusText(
                    company.getCompanyName()
                    + ", " + company.getAddress()
                    + ", " + company.getCity());
        } catch (NullPointerException npe) {
        }
    }

    @Override
    public Lookup getLookup() {
        return lookup;
    }
}

}

这是侦听公司对象的代码的一部分:

public final class ManagementPodatakaTopComponent extends TopComponent {    
   private Lookup.Result<Company> companyLookup = null;
   ...
   private Company selectedCompany;

   ...

@Override
public void componentOpened() {
    companyLookup = Utilities.actionsGlobalContext().lookupResult(Company.class);
    companyLookup .addLookupListener(new LookupListener() {

        @Override
        public void resultChanged(LookupEvent le) {
            Lookup.Result k = (Lookup.Result) le.getSource();
            Collection<Company> cs = k.allInstances();

            for (Company k1 : cs) {
                selectedCompany = k1;
            }

            setCompanyTextFields(selectedCompany);

            jTP_DataManagement.setVisible(true);
            jPanel_Entiteti.setVisible(true);

        }
    });
}

2 个答案:

答案 0 :(得分:0)

提供查找的SearchResult?在野外从未见过这个。

请在nbdev@netbeans.org上询问以获得更好的反馈(可能来自其中一个NB开发者)

答案 1 :(得分:0)

我终于以某种方式得到了我想要的东西:

首先,定义界面:

public interface ICodes {
     public Code getCode();
}

然后,我们实施快速搜索:

@ServiceProvider(service = ICodes.class)
public class ClientServicesQS implements SearchProvider, ICodes {

        private static Code code = null;

        @Override
        public void evaluate(SearchRequest request, SearchResponse response) {

            try {
                for (Code c : INFSYS.queries.INFSistemQuery.ByersByName(request.getText())) {
                    if (!response.addResult(new SearchResult(c),
                            c.getName() + " ,Code: " + c.getByerCode()
                            + (c.getAddress() != null ? ", " + c.getAddress() : ""))) {
                        return;
                    }
                }

            } catch (NullPointerException npe) {
                StatusDisplayer.getDefault().setStatusText("Error." + npe.getMessage());
            }
        }

        @Override
        public Code getCode() {
            return ClientServicesQS.sifra;
        }

        private static class SearchResult implements Runnable {

            private final Code code;

            public SearchResult(Code code) {
                this.code= code;
            }

            @Override
            public void run() {
                try {
                    ClientServicesQS.code= this.code;
                    OpenTopComponent("ClientServicesTopComponent");
                } catch (NullPointerException e) {
                    Display.messageBaloon("Error.", e.toString() + ", " + e.getMessage(), Display.TYPE_MESSAGE.ERROR);
                }
            }
        }
    }

最后,我们通过平台在其他模块中实现查找。 因为我想在componentOpen调用lookup时调用componentActivated,所以首先定义它是有用的:

    private void QSCodeSearch() {
            try {
                ICode ic= Lookup.getDefault().lookup(ICode.class);

                if ((code = ic.getCode()) != null) {
                    .
                    .
                    .
                    // setup UI components with data from lookup
                    .
                    .
                    .
                }
            } catch (Exception e) {
        }
    }

当激活topcomponent时,我们在:

中调用QSCodeSearch()
@Override
public void componentOpened() {
   ...
    QSCodeSearch()
   ...
}

...

@Override
public void requestActive() {
   ...
    QSCodeSearch()
   ...
}