2008-03-19

不用线程实现更改ViewPart的TitleImage

关键字: viewpart titleimage
要实现动态刷新ViewPart的TitleImage 通常都是使用一个线程去访问,在查看完Eclipse的源代码后,模仿的一个方法,这个途径是不需使用线程的,而使用UI中通用的属性修改通知机制.

  • 见图1: 原始ViewPart
  • 见图2: 修改后的ViewPart


效果: 在点击Button后,可以修改Title,TitleImage,TitleToolTip。
  • Title就是上部分的显示1, 2.
  • TitleImage就是最左上,左下的图标。
  • TitleToolTip就是在图标上鼠标悬浮的ToolTip,截图未标识出来.


ViewPart都是继承与WorkbenchPart的,在WorkbenchPart内有这样一个监听事件,
用于监听属性为IWorkbenchPartConstants.PROP_TITLE的变化,由此而触发WorkbenchPart的getTitle, getTitleImage, getTitleToolTip的方法,也就是重新加载了ViewPart的Title,TitleImage,TitleToolTip。
		button.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
//				for (int k = 0; k < 10000000; k++) {
//					if (k % 100000 == 0) {
						firePropertyChange(IWorkbenchPartConstants.PROP_TITLE);
//					}
//				}
			}
		});

	private static Image image0 = Activator.getImageDescriptor("icons/f3.png").createImage();
	private static Image image1 = Activator.getImageDescriptor("icons/sample.gif").createImage();

	public static int i = 0;

	@Override
	public Image getTitleImage() {
		if (i % 2 == 0) {
			return image0;
		} else {
			return image1;
		}
	}

	@Override
	public String getTitle() {
		i++;
		if (i % 2 == 0) {
			return "2";
		} else {
			return "1";
		}
	}

	@Override
	public String getTitleToolTip() {
		if (i % 2 == 0) {
			return "2";
		} else {
			return "1";
		}
	}


简单代码如上,根据i来判断具体显示内容。
你可以把button的SelectionListener内注释掉的代码打开,就实现了点击button后,Title等的动态刷新。由此再深入就可以实现我们的要求了。这个实现方法没有使用一个线程去做刷新的通常做法。
  • 30d47aa7-5c98-388b-aa3d-13bd0b17478e-thumb
  • 描述: 修改后的ViewPart
  • 大小: 8.5 KB
  • Ba81a074-f994-31c7-8660-cebfcd42b082-thumb
  • 描述: 初始的ViewPart
  • 大小: 8.5 KB
评论
发表评论

您还没有登录,请登录后发表评论

lggege
搜索本博客
我的相册
49edb3d3-94ce-3f1d-b3b2-d2dd99204513-thumb
IndexCardGenerator
共 13 张
最近加入圈子
存档
最新评论