`

SWT的TABLE对象的ToolTip一步实现自动折行(不用每个TABLE实例都修改)

阅读更多

类库开刀(二)



SWT TABLE对象的 ToolTip一步实现自动折行

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

第一章 概要

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

网上的解决办法是, table实例加上监听鼠标悬停事件,我们这个 CS一共有 300多个表格,如果一个一个加起来。。。苦苦寻觅了几个小时仍旧是无果。

我觉得加监听不是正道,因为 Table已经实现了 ToolTip的表示,只是表示在一行而已,所以我认为一定会有简单的方法,让 ToolTip表示的时候自动折行!索性给 SWT TABLE.CLASS开刀!

我的目标是,修改一个类库文件,就可以实现 300 多表格的 ToolTip 可自动折行。

第二章 修改步骤

第一节 锁定目标

经过验证,还是将监听加入到: 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 文件,文件代码直接j将 org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar Table.class 反编译后的代码拷贝即可。

第四节 开始动刀

一.修改文件第一处

找到如下方法:

LRESULT wmNotifyToolTip (NMHDR hdr, int /*long*/ wParam, int /*long*/ lParam)
 

的如下内容:在 6776 行( Eclipse 每个版本可能行数会不同)

int width = toolRect.right - toolRect.left, height = toolRect.bottom - toolRect.top;
SetWindowPos (hwndToolTip, 0, toolRect.left , toolRect.top, width, height, flags);
 



将上面内容替换:

// CONAC 曲文博 添加 开始
int haba = 288;
if (toolRect.right - toolRect.left >haba) {
int length = toolRect.right - toolRect.left;
int width = 298, height = (Math.round(length/haba) + 1) * 18;
SetWindowPos (hwndToolTip, 0, toolRect.left , toolRect.top, width, height, flags);
} else {
int width = toolRect.right - toolRect.left, height = toolRect.bottom - toolRect.top;
SetWindowPos (hwndToolTip, 0, toolRect.left , toolRect.top, width, height, flags);
}
// CONAC 曲文博 添加 结束

 

二.修改文件第二处

找到如下方法:


LRESULT wmNotifyToolTip (NMTTCUSTOMDRAW nmcd, int /*long*/ lParam) 


的如下内容:在 6898 行( Eclipse 每个版本可能行数会不同)

int flags = OS.DT_NOPREFIX | OS.DT_SINGLELINE | OS.DT_VCENTER;

 将上面内容替换:

int flags = OS.DT_NOPREFIX | OS.DT_WORDBREAK | OS.DT_VCENTER;
 

 

三.修改文件第三处

找到如下方法:


LRESULT wmNotifyToolTip (NMTTCUSTOMDRAW nmcd, int /*long*/ lParam) 


6909 行添加如下内容:


// CONAC 曲文博 添加 开始
int haba = 288;
if (textRect.right - textRect.left >haba) {
int length = textRect.right - textRect.left;
textRect.right = haba + textRect.left;
textRect.bottom = textRect.top + (Math.round(length/haba)+1)*18;
}
// 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  
很好,借鉴一下了,还是下载吧  

相关推荐

    jQuery实例_ ToolTip的实现

    本实例将深入探讨如何使用jQuery实现一个实用的Tooltip功能。Tooltip是一种常见且有用的UI元素,它可以在用户鼠标悬停在某个元素上时显示额外的信息。 首先,让我们了解一下jQuery的核心概念。jQuery通过选择器来...

    swt类库Table

    1. **工具提示(Tooltip)**:在SWT中,可以为`Table`的每一项设置单独的工具提示。通过调用`TableItem`的`setToolTipText(String text)`方法,可以为选定的行或单元格设置自定义的提示文本。当鼠标停留在该行或...

    jquery tooltip在表格中的使用

    jQuery Tooltip 是一个非常实用的插件,用于在用户将鼠标悬停在元素上时显示相关信息。在表格中使用 jQuery Tooltip 可以增强用户体验,让用户在不离开当前视图的情况下获取额外的数据或说明。本教程将深入讲解如何...

    一个ajax的tooltip例子

    【Ajax Tooltip】是一种交互式用户界面元素,它利用Ajax(异步JavaScript和XML)技术来动态显示与鼠标指针相关的提示信息。在网页设计中,Tooltip通常用于提供额外的上下文信息,当用户将鼠标悬停在某个元素上时,会...

    TOOLTIP提示框C++实例

    在IT行业中,尤其是在软件开发领域,用户界面的设计与交互性是至关重要的。"TOOLTIP提示框"是这种设计中的一个重要...无论是API还是MFC方式,理解和掌握TOOLTIP的创建和管理都是提高C++应用程序用户友好性的关键一步。

    react-rsuitetable是一个React实现的表格Table组件

    4. **树状表格**:对于层级结构的数据,`rsuite-table` 支持显示为树形结构,每一行都可以展开或折叠,以展示或隐藏子项。这在处理有层次关系的数据时,如组织结构、目录树等场景下十分适用。 5. **排序功能**:...

    easyui利用tooltip实现title功能

    这确保了整个表格的每个可交互元素都能够响应鼠标悬停事件,并正确显示tooltip。 #### 三、总结 通过以上分析,我们可以看出EasyUI框架下的`tooltip`组件为开发者提供了一种强大的工具,用于增强数据表格的交互性...

    在listbox中显示每个Item的Tooltip

    在某些情况下,我们可能希望为Listbox中的每个Item提供额外的信息,这通常可以通过实现Tooltip来达成。Tooltip是一种小型的弹出窗口,会在鼠标悬停在某个对象上时显示相关信息,为用户提供上下文帮助。 在标题"在...

    vxe-table-v2.9.24_表格组件_Table_

    8. **表单渲染**:vxe-table可以与Vue的表单组件配合,实现动态渲染表单,根据后台返回的字段结构自动生成表单,提高了开发效率。 9. **数据分页**:为了便于处理大量数据,vxe-table内置了分页功能,用户可以轻松...

    基于Vue的简单tooltip工具

    Tooltip在Vue中通常被实现为一个自定义组件,可以方便地嵌入到任何项目中。下面,我们将详细讨论Vue组件的创建过程,以及如何构建一个简单的Tooltip功能。 1. **Vue组件基础**: - **定义组件**: 在Vue中,组件是...

    表格单元格自定义ToolTip组件

    "表格单元格自定义ToolTip组件"是一个专门解决UI交互问题的工具,它允许开发者根据需求为表格中的每个单元格提供更加详细和丰富的信息提示。这种自定义的ToolTip在Flex组件上特别有用,Flex是一种强大的富互联网应用...

    DataGrid实现tooltip功能

    ### DataGrid实现tooltip功能 #### 一、简介 在Web开发中,为了提供更好的用户体验,开发者经常需要在用户界面中加入提示信息。其中,`tooltip`(工具提示)是一种非常实用的功能,它可以在用户鼠标悬停在某个元素...

    WPF修改Tooltip样式

    在Windows Presentation Foundation (WPF) 中,Tooltip是一个用于显示与鼠标指针相关的简短提示信息的...这个压缩包中的“修改Tooltip样式”很可能包含了实现这些样式的具体源代码,你可以参照这些代码进行学习和实践。

    ToolTip(Qt实现鼠标停留在QQ头像上显示更多资料的ToolTip功能).zip

    在本文中,我们将深入探讨如何使用Qt库在C++环境中实现一个类似QQ头像悬停时显示更多好友信息的ToolTip功能。首先,我们先了解一下Qt库和ToolTip的基本概念。 Qt是一个跨平台的应用程序开发框架,它由Qt公司开发并...

    flash 的几个tooltip显示

    Tooltip是通过在用户将鼠标停留一段时间后自动显示的一个小型文本框,通常用来提供关于舞台上对象的附加信息。在Flash中,我们可以使用ActionScript来创建和控制Tooltip。 2. 创建Tooltip: - AS2(ActionScript ...

    angularJS实现的tooltip效果

    在本文中,我们将深入探讨如何使用AngularJS实现一个功能丰富的tooltip效果。AngularJS,作为一款强大的前端JavaScript框架,提供了一种高效的方式来构建动态、数据驱动的Web应用。它以其双向数据绑定、模块化和可...

    源码:el-table和Echarts折线图【表-图两者联动】显示tooltip效果【表-图-表三者联动】展示数据

    【Vue入门实践4】el-table和Echarts折线图【表-图两者联动】显示tooltip效果【表-图-表三者联动】展示数据 资源相关文章https://mp.csdn.net/mp_blog/creation/editor/123230346

    xpTable,c# xptable NET中最强,最全功能的表格控件 ,可以定制一个ListView,能够在列中插入图像、下拉框、可上下调整的数字、进度条

    每个单元、列可以有Tooltip 等等…… [XPTable] XPTable包含下面的组件: 1. Table, 2. ColumnModel 和它的 Columns, 3. TableModel 和它的 Row 和 Cell, 4. Renderer 5. Editor [翻译] Mathew Hall.著XPTable - ...

    VC tooltip 源代码

    4. **添加控件**:为每个需要Tooltip的控件添加到Tooltip中,指定控件ID和对应的Tooltip文本: ```cpp m_tooltip.AddTool(GetDlgItem(IDC_BUTTON1), _T("Button1 Tooltip Text")); ``` 5. **处理消息**:重写`...

    ets tooltip截图显示用法实例

    ETS(Enhanced Table Suite)是一款基于ECharts的数据可视化插件,它扩展了ECharts的功能,提供了更丰富的交互体验。在本实例中,我们关注的是ETS的Tooltip功能,特别是其截图显示的特性。Tooltip通常用于在鼠标悬停时...

Global site tag (gtag.js) - Google Analytics