使用视图链接功能 实现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);
}
}
}
}
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);
}
}
}
}
相关文章推荐
- 基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
- 使用IB_DESIGNABLE与IBInspectable特性实现可在视图编辑器的功能栏中设置
- Windows 7 中让IIS7支持shtml功能及在ASP.Net中使用UrlRewritingNet实现链接重写
- 使用视图链接功能 选择服务器
- 实现具有 intrinsic content size 功能的自定义视图类(支持 xib/sb 使用)
- displaytag的使用方法(用于数据表格的显示和功能控制) tabledecorator实现链接按钮
- 基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
- 使用CoordinatorLayout+AppBarLayout实现上滑隐藏下拉呈现视图的功能
- C#之使用NotifyIcon实现任务栏托盘菜单,图标闪烁效果及气泡提示 很多程序是只需要后台运行的,甚至不需要自己的应用界面。NotifyIcon提供了程序在任务栏的显示功能 程序下载链接如下
- 使用Go语言实现配置文件热加载功能
- Linux下使用setitimer函数实现多个定时器的功能
- Python使用matplotlib实现基础绘图功能示例
- Android之使用个推实现三方应用的推送功能
- aspose.cell 使用总结1 ~~实现单sheet和多sheet功能及表单属性设定
- 使用Fragment实现底部菜单栏功能,并实现左右滑动切换
- 使用Struts2+JavaScript+Ajax实现成绩录入功能
- HTML5使用DeviceOrientation实现摇一摇功能
- 使用ViewPager实现android软件使用向导的功能
- 使用POI实现报表打印功能
- 智能厨房重构-使用vitamio实现视频播放功能