jtabel 遍历_JTable 合并 - Monkey的个人空间 - OSCHINA - 中文开源技术交流社区

这个是日本人写的,而且是1998的代码,在这里也不得不惭愧一下了,估计到现在我们做swing都没几个人能写这样的东西,重构分说明咱们都很浮躁,看看人家做的东西,不多说了,越说越惭愧,简单说一下那个结构。

真正实现表格多行多列合并的是在MultiSpanCellTableUI这个类里实现,这个类完全重新绘制表格从而达到合并的目的。代码很精练,不到100行,就搞定了表格的绘制。

MultiSpanCellTable 继承于JTable,主要是重载了和表格定位相关的方法,比如rowColumnAtPoint,getCellRect,rowAtPoint,这几个方法,根据Model里的数据来重新计算,道理也很简单这样才能正确的判断用户选择的单元格,因为被合并的单元格是无法选择的和无法显示的,所以必须要在这里进行。代码还是百来行。

AttributiveCellTableModel继续于DefaultTableModel,最关键的东西在这里,CellAttribute,他的实现是交给DefaultCellAttribute这个对象的,这个是存储单元格合并信息的地方,而且也是MultiSpanCellTable在计算的重要数据,和MultiSpanCellTableUI绘制的核心数据之一。DefaultCellAttribute有三个接口分别对应表格的功能。

CellAttribute保存的是真正的视野上的表格信息,包括表格有多少行多少列(这是视觉上的不是逻辑上),JTable逻辑数据任然是在传统的model,逻辑数据每一次改变都将会映射到这里,会刷新视觉数据。

CellSpan 保存的是单元格的合并属性,可视行,航跨度,列跨度。这些是UI绘制必需的东西。还有就是合并和拆分的功能也在这里,非常值得注意的是,在拆分合并表格的时候,他没有处理任何TableModel和Table的东西,就是在这里处理数据,处理完毕JTable重刷,这种M和V隔离的是相当的清晰。

最后还有说的是,人家写代码能力,类都不长,真正的代码大多都是百来行,但是最后实现的功能却让人眼前一亮。小日本写的代码和拍得片子一样,直入主题,不来花拳绣腿的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值