使用视图链接功能 选择服务器

15 篇文章 1 订阅

我们可以在插件中向 GUI 提供各种视图。但是,UI 视图不能是孤立的。它们需要根据其他视图的状态进行交互和对本身进行更新。所以在这里介绍以下链接视图的方法

我们可以通过下面这几种方法 对视图进行链接:

1、选择提供器 - 选择监听器(selection provider-selection listener)模式,从而让视图对其他视图中的选择做出反应 

2、IAdaptable 接口,与某些事件结合使用 

3、属性改变监听器,它允许视图将属性改变事件告之已注册的监听器 

先来介绍第一种:

一、选择服务器

选择提供器的使用方法很简单,我们只需要让视图实现 ISelectionListener 接口,实现接口中的selectionChanged方法就行了,下面是我的例子

StudentView .java

package  org.vwpolo.rcp.view.example.views;
public class StudentView extends ViewPart implements
 ISelectionListener {

  
private
 Table table;
  
private
 TableViewer tableViewer;
  
private
 Student student;
  
public static final String ID = StudentView.class.getName(); //$NON-NLS-1$

    
  /**
   * Create contents of the view part
   * 
@param  parent
   
*/

  @Override
  
public void  createPartControl(Composite parent) {
    Composite container 
= new
 Composite(parent, SWT.NONE);
    container.setLayout(
new
 FillLayout());
    tableViewer 
= new TableViewer(container, SWT.FULL_SELECTION |
 SWT.BORDER);
    tableViewer.setContentProvider(
new
 ContentProvider());
    tableViewer.setLabelProvider(
new
 TableLabelProvider());
    tableViewer.setInput(DataProvider.getStudents());
    table 
=
 tableViewer.getTable();
    table.setLinesVisible(
true
);
    table.setHeaderVisible(
true
);
    
final TableColumn nameCol = new
 TableColumn(table, SWT.NONE);
    nameCol.setWidth(
100
);
    nameCol.setText(
"姓 名"
);
    
//
    getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this
);
    getViewSite().setSelectionProvider(tableViewer);
  }

  @Override
  
public void
 selectionChanged(IWorkbenchPart part, ISelection selection) {
  }
}    

我们通过下面两行代码向工作窗口注册了侦听选择的服务和将tableViewer发布成选择事件源,也就是将 tableViewer 的选择事件向工作窗口注册了,只要实现了 ISelectionListener 并且侦听工作窗口的选择事件的话就可以响应 tableViewer 的事件了。

 

    getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this );
    getViewSite().setSelectionProvider(tableViewer);

StudentView.java这个类的作用主要是发布选择的事件,那么我们现在来看下处理选择事件的类

OtherStudentView .java

 

package  org.vwpolo.rcp.view.example.views;
public class OtherStudentView extends ViewPart implements
 ISelectionListener {

  
private
 Table table;
  
private
 Student student;
  
private
 TableViewer tableViewer;
  
public static final String ID = OtherStudentView.class
.getName();
  
/**
    * This is a callback that will allow us to create the viewer and initialize
   * it.
    */
  
public void  createPartControl(Composite parent) {
    tableViewer 
= new TableViewer(parent, SWT.FULL_SELECTION |
 SWT.BORDER);
    tableViewer.setLabelProvider(
new
 TableLabelProvider());
    tableViewer.setContentProvider(
new
 ContentProvider());
    table 
=
 tableViewer.getTable();
    table.setLinesVisible(
true
);
    table.setHeaderVisible(
true
);
    
final TableColumn nameCol = new
 TableColumn(table, SWT.NONE);
    nameCol.setWidth(
100
);
    nameCol.setText(
"姓 名"
);
    getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(
this
);
    getViewSite().setSelectionProvider(tableViewer);
  }

  @Override
  
public void
 selectionChanged(IWorkbenchPart part, ISelection selection) {
    If(part.getSite().getId().equals(StudentView.ID) {
      IStructuredSelection structuredSelection 
=
 (IStructuredSelection) selection;
      Object object 
=
 structuredSelection.getFirstElement();
      
if (object != null && object instanceof
 Student) {
        student 
=
 (Student) object;
        updateStudentView(student);
      }
    }
  }

  
private void
 updateStudentView(Student student) {
    
if (student == null
) {
      tableViewer.setInput(
new
 Object());
    } 
else
 {
      tableViewer.setInput(student);
    }
  }
}    

我们在 selectionChanged方法中实现自己的功能

public void  selectionChanged(IWorkbenchPart part, ISelection selection) {
  IStructuredSelection structuredSelection 
=
 (IStructuredSelection) selection;
  Object object 
=
 structuredSelection.getFirstElement();
  
if (object != null && object instanceof
 Student) {
    student 
=
 (Student) object;
    updateStudentView(student);
  }
}

我们通过这个方法处理工作区窗口发布的选择事件,对自己感兴趣的事件进行处理,我们这里是判断发布选择事件的视图是不是StudentView.java,我们只对这个视图的选择事件感兴趣,然后将传过来的对象进行判断,如果传过来的对象是 Student ,那么让它显示在这个视图的表格中

从而实现了互动,当然,这个功能相当的简单,这里只是为了说了选择事件的用法,有兴趣的话自己可以扩展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值