Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > [java swing]tame学习笔记一:table单元格合并
【标  题】:[java swing]tame学习笔记一:table单元格合并
【关键字】:java,swing,tame,table
【来  源】:http://blog.csdn.net/yeyinyue/archive/2006/01/20/584643.aspx

[java swing]tame学习笔记一:table单元格合并

Your Ad Here
今天下载了关于java swing的一个开源项目包tame,不过由于完成年代久远(98年),很多类在新的jdk1.4或jdk1.5上已经会报错。例如AttributiveCellTableModel类的setDataVector方法便需要改为:
  public void setDataVector(Vector newData, Vector columnNames)
  {
  super.setDataVector(newData, columnNames);
  cellAtt = new DefaultCellAttribute(dataVector.size(),columnIdentifiers.size());
  }
有心重整tame,先记一笔。

①java swing基于MVC架构,或者说是Model-driven结构。以jtable为例,它的特有GUI-State Model是TableColumnModel(JTable是面向列的,它基于每一列进行绘制和编辑。分别是列绘制器TableCellRenderer和列编辑器TableCellEditor);它的共有GUI-State Model是Selection Model(和jlist、jtree等共用)。除了GUI-State Model,还有决定显示在控件中的内容的Application-data model,jtable的Application-data model是TableModel。实现方式是先定义接口TableModel,再定义抽象类AbstractTableModel实现这个接口,然后由DefaultTableModel实现抽象类。不过一般来说用户需要自己扩展AbstractTableModel实现它的几个方法来获取和设定值。
 
②以jtable为例,它并未提供实现单元格合并的方法。所以我们需要重载它的三个方法(getCellRect:获取单元格的边界,columnAtPoint和rowAtPoint:分别返回屏幕指定位置的列和行)。
 
③现在我们需要自己绘制jtable,所以要用到Graphics类。另大部分的swing components 并不是直接由paint()方法来渲染(render),而是使用ComponentUI对象来完成渲染的。所以我们需要找出渲染Jtable的ComponentUI对象(BasicTableUI),并且修改它(重载paint()方法)以达到我们的目的。
 
④现在开始具体实现,tame先定义了4个接口(CellAttribute、ColoredCell、CellFont、CellSpan),用DefaultCellAttribute类实现了这四个接口,包含相关表格的基本属性(颜色、字体、合并单元格的属性等),这个类将每个cell定义为一个三维数组int[][][] span,并且都初始化为1。继承自DefaultTableModel的AttributiveCellTableModel负责初始化table,至此并无特异之处。当需要合并单元格时。监听按钮将调用DefaultCellAttribute的combine方法把被覆盖的单元格的三维数组int[][][] span设置为小于1,这样在绘制的时候就可以判断哪单元格可见,哪些单元格不可见了。接着通过重载jtable的三个方法得到cell的边界以及行和列的位置,重绘表格的时候通过每个cell返回的结果(边界、位置、是否可见)等循环绘制。
 
先只这么点体会,待慢慢添补。第一次在csdn写博客,折腾了半天,还是用firefox才搞定……
对《JDOM操作XML文件》的补充(增加搜索查询功能):【上一篇】
好久没有更新这里了:【下一篇】
【相关文章】
  • [收藏]JavaMail - 发送HTML邮件
  • [收藏]java数据类型转换
  • java简单的获取windows系统网卡mac地址
  • javascript程序
  • Java 开发环境的过去、现在和将来
  • Java Socket网络编程初级入门
  • Java初学者都必须理解的六大问题
  • 漫谈Java程序的性能优化
  • Java 2005回顾&2006展望
  • Java多线程程序设计详细解析
  • 【随机文章】
  • Solaris 如何增加硬碟的 swap space
  • DB2学习笔记——性能调优一
  • VC++编写USB接口程序
  • apache+resin
  • 了解MSMQ,控制ASP进程 (二)
  • Cancel、Delete、Edit、Item、Sort、Update 事件的宣告
  • Tomcat5系列用图形化配置DBCP(数据库连接池)后出现错误的解决办法
  • C++语言指南(十八)——类 (I)
  • 都是Windows XP下的电脑“防火墙”惹的祸
  • No Buzzword AOP
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.