`

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  
转载了

相关推荐

    SWT Table单元格编辑功能

    ### SWT Table单元格编辑功能详解 在Java图形用户界面(GUI)开发中,SWT...通过以上步骤,我们可以在SWT `Table`控件中实现单元格的编辑功能,使用户能够直接在界面上修改数据,提高了应用的交互性和实用性。

    SWT tableEditor删除后刷新

    标题"SWT tableEditor删除后刷新"涉及的问题可能是关于在删除TableEditor实例后,如何正确地更新或刷新表格显示。在使用TableEditor时,我们可能遇到的情况是,当编辑器被创建并应用到一个单元格后,如果用户进行了...

    swt table扩展

    创建一个Table,你需要实例化`org.eclipse.swt.widgets.Table`类,并将其添加到父容器中。你可以通过调用`TableColumn`类的方法来添加列,设置列头文本,调整列宽。`TableItem`用于创建和管理表中的行数据。 然而,...

    SWT TreeViewer实例

    【SWT TreeViewer实例详解】 在Java编程领域,特别是开发桌面应用程序时,SWT(Standard Widget Toolkit)是一个广泛使用的库,它提供了丰富的图形用户界面组件。TreeViewer是SWT库中的一个关键组件,用于创建和...

    swt/jface实例开发

    【SWT/JFace实例开发】是一份针对Java GUI编程的学习资源,主要聚焦于SWT(Standard Widget Toolkit)和JFace这两个强大的图形用户界面库。SWT是Eclipse项目的一部分,它提供了一套与操作系统直接交互的原生控件,...

    SWT应用的开发实例:没有使用到OSGi

    **SWT(SWT - Standard Widget Toolkit)** 是一个用于构建Java GUI应用程序的开源库,它提供了与本机系统更紧密的集成,使得Java...在这个实例中,我们看到SWT如何在不借助OSGi的情况下,独立实现一个完整的彩票应用。

    swt教程-flash实例操作演示

    本教程将通过一个Flash实例操作演示的方式,深入浅出地教你如何使用SWT进行开发,使学习过程更加直观易懂。 首先,SWT是Eclipse IDE的核心组件之一,它提供了丰富的控件和API,让开发者能够创建功能强大的、与操作...

    SWT表格管理类

    在`TableManager.java`文件中,通常会包含一个自定义的`TableManager`类,它可能封装了上述功能的实现细节,如创建`Table`对象、设置监听器、处理排序逻辑、颜色交替和列宽调整等。开发者可以方便地实例化`Table...

    KTable for SWT 源代码+实例

    KTable是一个强大的、可定制的表格控件,专为SWT设计,提供了丰富的功能,如排序、过滤、编辑等。本文将深入探讨KTable的基本概念、源代码结构以及如何通过实例来理解和使用它。 1. **KTable概述** KTable是SWT中...

    SWT/JFace官方实例

    SWT (Standard Widget Toolkit) 和 JFace 是 Eclipse 开发平台中的两个重要组件,主要用于构建图形用户界面(GUI)。它们是 Java 语言中的 GUI 工具包,为开发者提供了丰富的控件和高级界面功能。 SWT 是一个直接与...

    可以编辑的table

    ### 可编辑的 SWT Table 实现详解 在 Eclipse SWT(Standard Widget Toolkit)中,`Table` 控件提供了显示数据列表的功能。然而,默认情况下,`Table` 是只读的,不允许用户进行编辑。为了使 `Table` 可编辑,SWT ...

    swt高级密笈源码swt

    7. **剪贴板操作**:SWT提供了与系统剪贴板交互的能力,可以实现复制、粘贴等功能。熟悉Clipboard类的使用,可以在不同控件间传递数据。 8. ** SWT与JFace的结合**:JFace是建立在SWT之上的一层抽象,简化了UI开发...

    SWT教程java开发文档

    每个Widget都有自己的事件处理机制,可以通过监听器接口来响应用户的操作。 2. **Display**: Display是SWT中的顶级对象,它是所有Widget和事件的容器。一个应用程序通常只有一个Display实例。 3. **Shell**: Shell...

    多个SWT例子

    在"swt_demo"中,可能包含了使用SWT实现的各种组件实例。 2. JFace: JFace 是构建在 SWT 之上的高级库,旨在简化GUI开发,提供数据绑定、事件处理、视图和编辑器框架等功能。它通过减少代码量和增加代码的可读性...

    eclipse rcp check table

    在`CheckTableViewDemo.java`中,这些对象会被用来填充表格,每个实例对应表格的一行,并且可能有一个布尔属性来表示复选框的状态。 在Eclipse RCP中实现这样的功能,主要步骤如下: 1. **创建表视图**:使用`SWT....

    [原创]SWT 深入内幕之消息机制探秘

    SWT的设计目标是提供一个高效、原生的GUI库,能够利用操作系统提供的功能,以实现更丰富的用户体验。在深入研究SWT的消息机制之前,我们先来了解一下RCP(Rich Client Platform),它是Eclipse框架下的一个开发平台...

    Eclipse SWT 开发参考

    - **跨平台**:虽然每个平台上的实现可能略有不同,但SWT组件的行为和外观在不同的平台上保持高度一致。 - **性能**:通过JNI技术,SWT能够在需要时直接调用本地代码,从而提高性能。 #### 3. SWT包结构 SWT的包...

    swt 组件介绍

    Table table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION); table.setHeaderVisible(true); table.setLinesVisible(true); ``` 6. **List**:用于显示列表项。 - 创建方式: ```java List list = ...

    java Swing、SWT分页

    在这篇文章中,我们将深入探讨Java Swing中的分页技术和SWT(Standard Widget Toolkit)的使用,同时也会提供一个项目实例以帮助理解。 首先,Java Swing是Java Foundation Classes (JFC)的一部分,它是一个轻量级...

    删除table表格行的实例讲解

    下面是一个具体的实例,展示了如何实现这个功能: ```javascript // 获取表格DOM对象 var table = document.getElementById('myTable'); // 添加点击事件监听器,假设每个表格行都有一个删除按钮 table....

Global site tag (gtag.js) - Google Analytics