`

SWT的TABLE对象一步实现可复制(不用每个TABLE实例都修改)

阅读更多

类库开刀(一)

 

SWT TABLE 对象一步实现可复制

(不用每个 TABLE 实例都修改)

第一章           概要

最近的一个项目,涉及到离线办公需求,索性弄了一个 CS 客户端满足这个需求。不过用户在 CS 已经成型的时候竟然又追加了一个需求:每个表格的单元格可以简单复制,大家知道 SWT TABLE 是不可以直接复制的。到网上搜索了一下有没有可以简单的、比用修改每个列表的一步解决方法,我比较懒总是喜欢一步到位。项目到了收尾阶段还要全盘修改一些代码,简直就是测试人员的噩梦,开发人员的悲剧。

网上的解决办法是, table 实例加上监听鼠标点击事件与键盘按钮事件,我们这个 CS 一共有 300 多个表格,如果一个一个加起来。。。苦苦寻觅了几个小时仍旧是无果,索性按照监听这个思路给 SWT TABLE.CLASS 开刀!

我的目标是,修改一个类库文件,就可以实现 300 多表格的可复制处理。

第二章           修改步骤

第一节         锁定目标

经过验证,还是将监听加入到: org\eclipse\swt\widgets\Table.java 中比较好。

这个源文件在 \plugins\org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar 中。

第二节         创建等位目录

我们需要在项目工程的 src 目录下创建与 org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar 这个包相同的路径,才可以实现 Debug 调试我们所修改的内容是否可以成功。目录结构下图所示,仅供参考。

第三节         创建 Table.java 文件

widgets 目录创建 Table.java 文件,文件代码直接将 org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar Table.class 反编译后的代码拷贝即可。

第四节         开始动刀

找到如下方法:

public Table (Composite parent, int style) {
	super (parent, checkStyle (style));
}
 

修改内容:

public Table (Composite parent, int style) {
	super (parent, checkStyle (style));

	// CONAC 曲文博 添加 开始
	this.addMouseListener(new MouseAdapter() {
		public void mouseDown(MouseEvent event) {
			Point pt = new Point(event.x, event.y);
			final TableItem item = getItem(pt);
			if (item == null) {
				return;
			}
			int column = -1;
			for (int i = 0, n = getColumnCount(); i < n; i++) {
				Rectangle rect = item.getBounds(i);
				if (rect.contains(pt)) {
					column = i;
					break;
				}
			}

			Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
			StringSelection contents=new StringSelection(item.getText(column)); //用拷贝文本框文本实例化StringSelection对象
			clipboard.setContents(contents, null); //设置系统剪贴板内容
		}
	});
	// CONAC 曲文博 添加 结束
}
 

第三章           编译

到此 Table.java 文件修改结束,那么在工程内编译一下,会得到如下两个文件:

  Table$1.class Table.class

将这两个文件直接拷贝到 org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar 中对应的目录下覆盖即可,此时 Eclipse 应该关闭。

第四章           总结

重启 Eclipse ,启动工程后,我们发现所有的 Table 都实现了那个监听,达到了目的。只要鼠标点击单元格一下,内容就可以被复制到剪贴板中,也省去了用户的复制操作。

如有不足希望大家指正。

第五章           文件下载

一、 Table.java

二、 Table$1.class Table.class

三、 org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar

这个文件的版本有点低,呵呵,我们做的 CS 系统主要用的是 RCP 所以就定在了比较低的版本上,如果无特殊需要可以不必下载

分享到:
评论
1 楼 songsong6615 2012-10-17  
转载了

相关推荐

Global site tag (gtag.js) - Google Analytics