类库开刀(一)
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
所以就定在了比较低的版本上,如果无特殊需要可以不必下载
分享到:
相关推荐
### SWT Table单元格编辑功能详解 在Java图形用户界面(GUI)开发中,SWT...通过以上步骤,我们可以在SWT `Table`控件中实现单元格的编辑功能,使用户能够直接在界面上修改数据,提高了应用的交互性和实用性。
标题"SWT tableEditor删除后刷新"涉及的问题可能是关于在删除TableEditor实例后,如何正确地更新或刷新表格显示。在使用TableEditor时,我们可能遇到的情况是,当编辑器被创建并应用到一个单元格后,如果用户进行了...
创建一个Table,你需要实例化`org.eclipse.swt.widgets.Table`类,并将其添加到父容器中。你可以通过调用`TableColumn`类的方法来添加列,设置列头文本,调整列宽。`TableItem`用于创建和管理表中的行数据。 然而,...
【SWT TreeViewer实例详解】 在Java编程领域,特别是开发桌面应用程序时,SWT(Standard Widget Toolkit)是一个广泛使用的库,它提供了丰富的图形用户界面组件。TreeViewer是SWT库中的一个关键组件,用于创建和...
【SWT/JFace实例开发】是一份针对Java GUI编程的学习资源,主要聚焦于SWT(Standard Widget Toolkit)和JFace这两个强大的图形用户界面库。SWT是Eclipse项目的一部分,它提供了一套与操作系统直接交互的原生控件,...
**SWT(SWT - Standard Widget Toolkit)** 是一个用于构建Java GUI应用程序的开源库,它提供了与本机系统更紧密的集成,使得Java...在这个实例中,我们看到SWT如何在不借助OSGi的情况下,独立实现一个完整的彩票应用。
本教程将通过一个Flash实例操作演示的方式,深入浅出地教你如何使用SWT进行开发,使学习过程更加直观易懂。 首先,SWT是Eclipse IDE的核心组件之一,它提供了丰富的控件和API,让开发者能够创建功能强大的、与操作...
在`TableManager.java`文件中,通常会包含一个自定义的`TableManager`类,它可能封装了上述功能的实现细节,如创建`Table`对象、设置监听器、处理排序逻辑、颜色交替和列宽调整等。开发者可以方便地实例化`Table...
KTable是一个强大的、可定制的表格控件,专为SWT设计,提供了丰富的功能,如排序、过滤、编辑等。本文将深入探讨KTable的基本概念、源代码结构以及如何通过实例来理解和使用它。 1. **KTable概述** KTable是SWT中...
SWT (Standard Widget Toolkit) 和 JFace 是 Eclipse 开发平台中的两个重要组件,主要用于构建图形用户界面(GUI)。它们是 Java 语言中的 GUI 工具包,为开发者提供了丰富的控件和高级界面功能。 SWT 是一个直接与...
### 可编辑的 SWT Table 实现详解 在 Eclipse SWT(Standard Widget Toolkit)中,`Table` 控件提供了显示数据列表的功能。然而,默认情况下,`Table` 是只读的,不允许用户进行编辑。为了使 `Table` 可编辑,SWT ...
7. **剪贴板操作**:SWT提供了与系统剪贴板交互的能力,可以实现复制、粘贴等功能。熟悉Clipboard类的使用,可以在不同控件间传递数据。 8. ** SWT与JFace的结合**:JFace是建立在SWT之上的一层抽象,简化了UI开发...
每个Widget都有自己的事件处理机制,可以通过监听器接口来响应用户的操作。 2. **Display**: Display是SWT中的顶级对象,它是所有Widget和事件的容器。一个应用程序通常只有一个Display实例。 3. **Shell**: Shell...
在"swt_demo"中,可能包含了使用SWT实现的各种组件实例。 2. JFace: JFace 是构建在 SWT 之上的高级库,旨在简化GUI开发,提供数据绑定、事件处理、视图和编辑器框架等功能。它通过减少代码量和增加代码的可读性...
在`CheckTableViewDemo.java`中,这些对象会被用来填充表格,每个实例对应表格的一行,并且可能有一个布尔属性来表示复选框的状态。 在Eclipse RCP中实现这样的功能,主要步骤如下: 1. **创建表视图**:使用`SWT....
SWT的设计目标是提供一个高效、原生的GUI库,能够利用操作系统提供的功能,以实现更丰富的用户体验。在深入研究SWT的消息机制之前,我们先来了解一下RCP(Rich Client Platform),它是Eclipse框架下的一个开发平台...
- **跨平台**:虽然每个平台上的实现可能略有不同,但SWT组件的行为和外观在不同的平台上保持高度一致。 - **性能**:通过JNI技术,SWT能够在需要时直接调用本地代码,从而提高性能。 #### 3. 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(Standard Widget Toolkit)的使用,同时也会提供一个项目实例以帮助理解。 首先,Java Swing是Java Foundation Classes (JFC)的一部分,它是一个轻量级...
下面是一个具体的实例,展示了如何实现这个功能: ```javascript // 获取表格DOM对象 var table = document.getElementById('myTable'); // 添加点击事件监听器,假设每个表格行都有一个删除按钮 table....