zoukankan      html  css  js  c++  java
  • Eclipse插件开发中的选择监听机制(Selection Provider-Listener)

    Eclipse插件开发中的选择监听机制(Selection Provider-Listener)

    监听机制是eclipse插件开发或rcp应用开发中经常使用的技术,比方点击TableViewer或TreeViewer中的某个元素,须要针对当前selection做出某些处理。

    实现方式一般有两种情况。即selection provider 和listener在一个视图中。或在不同的视图中;

    1、selection provider自己添加监听进行处理

    前者直接让selection provider实现监听并处理业务就可以。

     

    实现代码例如以下:

    viewer.addSelectionChangedListener(newISelectionChangedListener() {

             publicvoidselectionChanged(SelectionChangedEvent e) {

                       if(e.getSelection()!= null){

                                IStructuredSelectionis = (IStructuredSelection)e.getSelection();

                                txtInfo.setText(is.getFirstElement().toString());

                       }

             }

    });

     

     

    2、WorkbenchPage注冊机制

             selection provider和Listener不在一个视图中。可是都在WorkbenchPage中;首先定义selection provider,然后定义Listener来处理selection event。最后通过WorkbenchPage注冊两者之间的关联。

     



    ü  在view中设置selection provider

    getSite().setSelectionProvider(viewer);

     

    ü  SecondViewPart实现ISelectionListener接口并实现

    SecondViewPartextends ViewPart implements ISelectionListener

     

             publicvoid selectionChanged(IWorkbenchPart part, ISelection e) {

                       if(e!= null){

                                IStructuredSelectionis = (IStructuredSelection)e;

                                if(is.getFirstElement()!= null)

                                txtInfo.setText((String)is.getFirstElement());

                       }

    }

    ü  SecondViewPart中注冊两者之间的关联

    SecondViewPart的createPartControl(Composite parent) 方法中注冊关联;getSite().getPage().addSelectionListener(this);

     

    结论:

     

    在常规的RCP开发中,处理Selection监听的任务,通过上述的两种方法能够轻松的完毕。若Selection的Provider和 Listener都在一个视图,且仅仅须要简单处理SelectionChangedEvent时,我们能够选择方法1就可以。

    若Selection的 Provider和Listener分散在两个或多个视图时。我们必须通过方法2完毕。另外,其它较为复杂的Selection Provider-Listener的情况。还能够使用RCP的IAdaptable实现。

  • 相关阅读:
    关于高等代数的计算题III(线性方程组)
    关于高等代数的计算题I(矩阵,标准形,二次型)
    日志打印太多导致cpu 100%问题解决
    xxl-job串行任务挂死问题
    apache http调用设置超时时间
    动态修改logback日志级别
    prom2click批量参数设置
    logback日志使用
    跨线程池传递线程变量,使用阿里的transmittable-thread-local
    ES操作整理
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7183966.html
Copyright © 2011-2022 走看看