您的位置:首页 > 其它

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

2008-03-04 15:31 597 查看
这篇文章主要介绍使用 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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐