浅谈Java中单元格合并实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈Java中单元格合并实现

浅谈Java中单元格合并实现   摘要:本文主要叙述如何通过建立新的数据模型(单元格模型),重载Jtable的三个重要方法(getCellRect()、columnAtPoint()、rowAtPoint())和继承Jtable的渲染组件(BasicTableUI)来实现单元格的合并。   关键词:Jtable;单元格合并;单元模型;重载   中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)17-31357-02   Disguss the Realization of Table Cell Merges in the Java   LI Yu-li   (South China Institute of Software Engineering of Guangzhou University,Guangzhou 510990,China)   Abstract: The main description in this text is how to establish the new data model( table cell model), overwrite Jtable three important method( getCellRect(), columnAtPoint(), rowAtPoint()s) with inherit the Jtable extends the class( BasicTableUI) come to realize the cell merges.   Key words: Jtable; cell span; cell model; overwrite      Java程序设计语言产生于1995年的SUN Microsystems公司,具有与平台无关的“可移植性”、支持语言的国际化的优点。目前Java编程工具包JDK的最新版本6.0加入了众多的桌面的函数,使得java语言的桌面编程应用将越来越广泛。如果工程涉及到表格的话,就不得不使用到Java Swing 中的Jtable的合并单元格的实现。Jtable没有提供现成的合并单元格的方法,但是使用其所提供的方法仍然能做到这一点。   对于表格中单元格的合并,我们可以这样来实现:待合并单元格应是表格中紧密相连并处于长方形区域内的多个单元格,合并实际上是将处于该长方形区域中的最左上方的单元格(我们暂且称之为合并单元格)边界扩大至整个长方形区域,而其它处于该区域的单元格则被隐藏起来,所有对被隐藏单元格的访问都被传送到其对应的合并单元格中处理。因此我们需要一个数据模型来记录单元格的覆盖与隐藏情况,为了与常用的数据模型(TableModel)区分开,我们暂且称其为单元格模型(CellModel)   合并单元格跨越多行多列,为了使Stable了解合并单元格的大小,需要重载getCellRect(),该函数的作用是返回单元格的边界大小(Rectangle类),对于合并单元格我们需要在该函数内实现合并单元格边界大小的计算。为了将被隐藏单元格的访问重定位到其对应的合并单元格中,我们需要重载columnAtPoint()和rowAtPoint(),它们分别返回指定位置所在的列和行值。对于被隐藏的单元格,返回的都是其对应合并单元格的列和行值。   另外,大部分的swing components 并不是直接由paint()方法来渲染(render),而是使用ComponentUI对象来完成渲染的,而Jtable也是其中一员,所以我们需要找出渲染Jtable的ComponentUI对象,并且修改它以达到我们的目的。      1 单元模型      要实现多行多列单元格合并需要多个类相互协作,直接写出来的话可能比较复杂,所以我们先来讨论一下记录单元格合并情况的数据模型。该数据模型的设计理念如下:   表格的每一个单元格所在位置需使用二维数组来标识,此外每一个单元格使用一个长度为2的数值(int)数组表示,数组第一个数值为对应单元格所跨越的行数,第二个数值为对应单元格所跨越的列数,因此单元模型采用一个三维数组记录信息(int[][][] span)。当一个表格刚刚初始化,其所有单元格对应的单元模型值为数组(1,1),表示每个单元格高一行宽一列,如图1。那当一个单元格合并了多行多列该怎样表示呢?我们先来看一下图2:   对于跨越多行多列的单元格(我们暂且称之为合并单元格)所对应的单元模型值为(跨越行数,跨越列数),如第2行第2列交汇处的单元格跨越了4行3列,所有其对应的单元模型值为(4,3)。已被覆盖的单元格所对应的单元模型值为(1-当前单元格与合并单元格相差的行数,1-当前单元格与合并

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档