Better ChildFactory

mac2022-06-30  22

http://blogs.oracle.com/geertjan/entry/better_childfactory

————————————————————————————————————————————————————————————————————————

 

Thanks to Jesse, here's a corrected & improved ChildFactory from a few days ago, using ChildFactory.Detachable so that you have addNotify/removeNotify to add/remove the LookupListener and thus avoid a memory leak, together with a createKeys/resultChanged that is simplified too. private  class FirstLevelChildFactory  extends ChildFactory.Detachable<ResultType>  implements LookupListener {     Result<ResultSet> resultRetrievedFromYahoo;     @Override      protected  void addNotify() {         resultRetrievedFromYahoo = Utilities.actionsGlobalContext().lookupResult(ResultSet. class);         resultRetrievedFromYahoo.addLookupListener( this);     }     @Override      protected  void removeNotify() {         resultRetrievedFromYahoo.removeLookupListener( this);         resultRetrievedFromYahoo =  null;     }     @Override      protected  boolean createKeys(List<ResultType> list) {          for (ResultSet rs : resultRetrievedFromYahoo.allInstances()) {             list.addAll(rs.getResult());         }          return  true;     }     @Override      protected Node createNodeForKey(ResultType key) {         String[] split = key.getTitle().split(" ");         String theNextWordToBeSearched = split[split.length - 1];         AbstractNode firstLevelNode =                  new AbstractNode(                 Children.create( new GenericChildFactory(theNextWordToBeSearched),  true),                 Lookups.singleton(key));         firstLevelNode.setShortDescription(key.getSummary());         firstLevelNode.setDisplayName(key.getTitle());          return firstLevelNode;     }     @Override      public  void resultChanged(LookupEvent le) {         refresh( true);     } }

 

This is a very simple & elegant solution.

 

 

 

 

 

 

转载于:https://www.cnblogs.com/cuizhf/archive/2011/09/25/2189950.html

最新回复(0)