0 0

Eclipse RCP SelectionListener 执行两次5

大伙们,小弟最近有一个问题关于Eclipse RCP的,就是为什么在两个视图间进行消息传递,监听的视图执行了两次?
我的代码如下:

事件提供者:
package myproject;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

public class View extends ViewPart {
	public static final String ID = "myproject.view";

	private TableViewer viewer;

	/**
	 * The content provider class is responsible for providing objects to the
	 * view. It can wrap existing objects in adapters or simply return objects
	 * as-is. These objects may be sensitive to the current input of the view,
	 * or ignore it and always show the same content (like Task List, for
	 * example).
	 */
	class ViewContentProvider implements IStructuredContentProvider {
		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
		}

		public void dispose() {
		}

		public Object[] getElements(Object parent) {
			if (parent instanceof Object[]) {
				return (Object[]) parent;
			}
	        return new Object[0];
		}
	}

	class ViewLabelProvider extends LabelProvider implements
			ITableLabelProvider {
		public String getColumnText(Object obj, int index) {
			return getText(obj);
		}

		public Image getColumnImage(Object obj, int index) {
			return getImage(obj);
		}

		public Image getImage(Object obj) {
			return PlatformUI.getWorkbench().getSharedImages().getImage(
					ISharedImages.IMG_OBJ_ELEMENT);
		}
	}

	/**
	 * This is a callback that will allow us to create the viewer and initialize
	 * it.
	 */
	public void createPartControl(Composite parent) {
		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
				| SWT.V_SCROLL);
		viewer.setContentProvider(new ViewContentProvider());
		viewer.setLabelProvider(new ViewLabelProvider());
		// Provide the input to the ContentProvider
		viewer.setInput(new String[] {"One", "Two", "Three"});
		this.getSite().setSelectionProvider(viewer);
	}

	/**
	 * Passing the focus request to the viewer's control.
	 */
	public void setFocus() {
		viewer.getControl().setFocus();
	}
}


事件监听者:
package myproject;

import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.ViewPart;

public class Detail extends ViewPart implements ISelectionListener {

	public static final String ID = "myproject.detail";
	
	private Text text;
	
	public Detail() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
		IStructuredSelection structuredSelection = (IStructuredSelection) selection;
		Object obj = structuredSelection.getFirstElement();
		if(obj != null) { //这里执行了两次!
			System.out.println(obj);
		}
	}

	@Override
	public void createPartControl(Composite parent) {
		text = new Text(parent, SWT.NONE);
		text.setBounds(20, 20, 100, 15);
		this.getSite().getPage().addSelectionListener(View.ID, this);
	}

	@Override
	public void setFocus() {
		// TODO Auto-generated method stub

	}

}


即selectionChanged这个方法执行了两次,太不解了!
望大家能帮手看看为什么,谢谢了。
2014年1月04日 22:27
目前还没有答案

相关推荐

    Eclipse RCP 软件打包发布方法

    Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序。它提供了一整套工具和功能,使得开发者可以构建出具有丰富用户界面的应用。在开发完成后,我们需要将这些应用打包并发布,以便用户...

    eclipse rcp应用系统开发方法与实战源代码.zip

    10. **发布和部署**:最后,了解如何打包和部署Eclipse RCP应用,包括生成可执行的RCP产品,以及配置启动参数,以便在目标环境中运行。 通过这个压缩包中的教程和源代码,开发者不仅可以学习到Eclipse RCP的基本...

    Eclipse rcp深入浅出中英文版及配套代码

    Eclipse RCP,全称Eclipse Rich Client Platform,是一个基于Java的框架,用于构建桌面应用程序。这个框架由Eclipse基金会维护,是Eclipse IDE的一部分,允许开发者创建功能丰富的、可扩展的应用程序,拥有类似IDE的...

    EclipseRCP教程

    2. Runtime:Eclipse RCP 的运行时环境,提供了应用程序的执行环境。 3. Workbench:Eclipse RCP 的工作台,提供了应用程序的用户界面和交互机制。 4. View:Eclipse RCP 的视图机制,提供了多种视图类型和视图之间...

    eclipse RCP mp3工程

    【标签】"eclipse RCP mp3 mp3工程"进一步强调了这个项目的两大关键元素:Eclipse RCP平台和MP3处理。这表明项目的核心是利用Eclipse RCP的技术来处理MP3音频格式,可能涉及到解析MP3文件、播放控制、元数据处理等...

    ECLIPSE+RCP应用系统开发方法与实战(PDF 高岗著)

    《ECLIPSE+RCP应用系统开发方法与实战》这本书是高岗先生关于使用Eclipse RCP(Rich Client Platform)进行应用系统开发的一本实战指南。Eclipse RCP是Eclipse IDE的一部分,它提供了一个框架,使得开发者可以构建...

    Eclipse Rcp

    Eclipse RCP是一种基于Eclipse平台的富客户端平台技术,它允许开发者创建独立于Eclipse环境的Java桌面应用程序。RCP通过提供一套标准组件和API,简化了桌面应用程序的开发流程,使开发者能够专注于业务逻辑而非界面...

    eclipse RCP Plug-in开发自学教程.pdf

    eclipse RCP Plug-in开发自学教程 eclipse RCP(Rich Client Platform)是一种基于eclipse的插件式开发平台,允许开发者使用eclipse结构风格设计弹性的可扩展的应用程序。RCP插件式开发方式可以重用eclipse中的方法...

    EclipseRcp 例子程序

    10. **部署与打包**:最后,学习如何将Eclipse RCP应用打包成可执行的RCP产品,包括生成启动配置、设置依赖关系等。 通过对“Eclipse RCP 例子程序”的深入学习和实践,开发者不仅可以掌握Eclipse RCP的基本使用,...

    Eclipse RCP培训.zip

    13. **部署与发布**:Eclipse RCP应用可以打包为可执行的RCP产品,通过Eclipse PDE工具进行发布,确保用户可以在各种平台上运行。 通过学习和实践这些知识点,开发者可以熟练掌握Eclipse RCP,构建出高效、稳定且...

    Eclipse RCP 插件开发指南

    ### Eclipse RCP 插件开发指南 #### Eclipse RCP Plugin 开发快速入门 Eclipse RCP(Rich Client Platform)插件开发是构建基于Eclipse框架的应用程序的核心技术之一。本指南旨在帮助开发者从零开始掌握Eclipse ...

    Eclipse RCP开发详解

    部署方面,Eclipse RCP应用通常打包为一个可执行的JAR或ZIP文件(称为RCP产品)。产品配置文件定义了运行时环境的详细信息,如启动参数、插件列表等。你可以使用PDE的打包工具生成最终的部署包。 最后,测试和调试...

    Eclipse RCP与Spring OSGi技术详解与最佳实践

    《Eclipse RCP与Spring OSGi:技术详解与最佳实践》由资源的Eclipse专家亲自执笔,并得到了Eclipse官方技术社区的强烈推荐,权威性毋庸置疑!内容全面,系统讲解了利用Eclipse RCP和Spring OSGi开发大规模Java应用的...

    Eclipse rcp 实现文本内容对比功能

    在本文中,我们将深入探讨如何使用Eclipse RCP(Rich Client Platform)实现文本内容的对比功能。Eclipse RCP是一个强大的开发框架,它允许开发者构建桌面应用,而文本内容对比则是许多开发工具中的一个基本特性,...

    documents about Eclipse RCP

    Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序。它基于Java,由Eclipse基金会维护,是Eclipse IDE的核心组成部分。RCP允许开发者利用已有的插件系统构建可定制、模块化的应用,具有...

    Eclipse RCP 学生管理平台 执行程序01

    Eclipse RCP 学生管理平台 执行程序

    Eclipse RCP详细教程

    在Eclipse RCP中,“应用程序”指的是运行时的环境,而“产品”则是指最终发布的可执行软件包。 - **应用程序**:通常包含多个插件和视图,是开发阶段的主要对象。 - **产品**:是在应用程序基础上构建的一个完整的...

    菜鸟EclipseRCP学习之路

    在IT行业中,Eclipse RCP(Rich Client Platform)是一个强大的框架,用于构建桌面应用程序。它基于Java语言,由Eclipse基金会开发,为开发者提供了一套完整的工具集来创建功能丰富的、可扩展的应用程序。"菜鸟...

    通过例子学习EclipseRCP开发

    命令是Eclipse RCP中执行特定操作的关键元素。它们可以被绑定到菜单项、工具栏按钮或其他UI元素上。定义命令涉及创建一个命令对象,并将其注册到工作台中。此外,还需要定义命令的贡献点,以便在适当的位置显示相应...

    Eclipse RCP中使用第三方包

    在Eclipse RCP中,有两种方法可以将jar文件添加到classpath中。第一种方法是将jar文件添加到Build Path中,第二种方法是将jar文件添加到Extra ClasspathEntries中。我们可以任选一种方法,但是不要两种方法同时使用...

Global site tag (gtag.js) - Google Analytics