使用视图链接功能 实现IAdaptable接口

15 篇文章 1 订阅

     这篇文章主要介绍使用 IAdaptable 接口来进行视图的链接 :

    IAdaptable 在Eclipse里是一个非常重要的接口, 在整个插件体系中也起着举足轻重的作用   IAdapteable实际上在Eclipse早期版本中不叫这个名字,它原来的名字叫做IExtensible,顾名思义就是可以扩展的意思,后来为了更能突出是由一个类配适到一个接口这么一种机制,所以改名为IAdaptable。这个接口有什么用呢,其实说白了,就是提供一个类型的转换机制, 因为 Java是所谓的强类型语言,也就是说,每个实例都对应一个类型 , 如果一定要执行特定类型的方法,我们必须先强制转换这个实例到正确的类型

  下面我们可以使用它来进行视图的通信,先将一个工具类贴出来 这个类提供视图链接的方法,我们可以在视图中这样使用

package  com.cnex.oss.framework;

/**
 * <p>视图链接工具 。</p>
 * 
@author  刘绕兴
 * <p>2007-12-8</p>
 
*/
public   interface  IConnectionBridge {

  
/**
   * <p>添加一个信息传递接口。</p>
   * 
@author  刘尧兴
   * 
@param  supportor
   
*/
  
public   void  appendTo(IConnectionBridge supportor);

  
/**
   * <p>删除一个信息传递接口实例。</p>
   * 
@author  刘尧兴
   * 
@param  supportor
   
*/
  
public   void  removeAppend(IConnectionBridge supportor);

  
/**
   * <p>处理信息。</p>
   * 
@author  刘尧兴
   * 
@param  obj
   
*/
  
public   void  process(Object obj);

  
/**
   * <p>激发写作时间。</p>
   * 
@author  刘尧兴
   * 
@param  obj
   
*/
  
public   void  firePropertyChange(Object obj);

  
/**
   * <p>清理当前support在其他页面中的注册。</p>
   * 
@author  刘尧兴
   
*/
  
public   void  dispose();
}
    

 

在ViewA.java和ViewB.java中我们声明一个内嵌类 然后在在ViewA.java中添加一个 getAdapter ()方法,如果一个视图要将结果传到多个视图的话,我们就在这个视图中实现getAdapter()方法,也就是一对多的关系,现在我们只是简单的测试一些,放在哪个视图都影响不大,然后在ViewB.java用 getAdapter ()适配刚才哪个声明的对象

Public  class  ViewA  extends  ViewPart {
 ......
/**
   * <p> 该接口用于实现在不同视图或面板间的信息传递 。</p>
   * 
@author  刘绕兴
   * <p>2007-12-8</p>
   
*/
  
class  InnerConnectionBridgeImpl  extends  ConnectionBridgeAdapter {
    
public   void  process(Object obj) {
       
// 处理传过来的参数
    }
  }

  
/**
   * <p>。</p>
   * 
@author  刘尧兴
   * 
@return  InnerConnectionBridgeImpl
   
*/
  
public  InnerConnectionBridgeImpl getConnectionBrige() {
    
return  connectionBridge;
  }    

 

ViewA.java的getAdapter()方法: ViewB.java中的链接方法 那这样的话我们就将两个视图建立了关系,如果ViewA.java想向ViewB.java发送一个消息的话可以通过 connectionBridge .firePropertyChange( "你好" ); ,我们在ViewB.java中 InnerConnectionBridgeImpl .java类的 process 方法处理发过来的消息,比如我们要处理刚才发过来的消息的话可以这样 这样我们在ViewB.java中将ViewA.java传过来的消息打印出来了,这样视图就进行连通了

  @SuppressWarnings( " unchecked " )
  
public  Object getAdapter(Class adapter) {
    
if  (adapter  ==  IConnectionBridge. class ) {
      
return  findUserGroupComposite.getConnectionBrige();
    }
    
return   super .getAdapter(adapter);
  }    

 

   /**
   * <p> 初始化连接桥。</p>
   * 
@author  刘绕兴
   
*/
  
private   void  initConnectionBridge() {
    IViewPart part 
=  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
        .findView(ViewA.ID);
    
if  (part  !=   null   &&  (part  instanceof  IAdaptable)) {
      Object obj 
=  ((IAdaptable) part).getAdapter(IConnectionBridge. class );
      
if  (obj  !=   null ) {
        IConnectionBridge otherBrige 
=  (IConnectionBridge) obj;
        connectionBridge.appendTo(otherBrige);
        otherBrige.appendTo(connectionBridge);
      }
    }
  }    

 

 Public  class  classB  extends  ViewPart {
  
/**
   * <p> 该接口用于实现在不同视图或面板间的信息传递 。</p>
   * 
@author  刘绕兴
   * <p>2007-12-8</p>
   
*/
  
class  InnerConnectionBrigeImpl  extends  ConnectionBridgeAdapter {

    @SuppressWarnings(
" unchecked " )
    
public   void  process(Object obj) {
      
if  (obj  instanceof  String) {
        System.out.println((String)obj);
      }
    }
  }
}    

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值