我们在开发中一般2种方法来操作列
1、通过列号来操作列
优点:代码灵活,且能保证列唯一性
缺点:一旦需求变化增减列,则所有关于列号的代码都要改。
2、通过列名(就是表头显示的名字)来操作列
优点:操作直观,且不易受列的改动影响。
缺点:列名不像列号可能有重复的;列名也很有可能会改动,则代码改动也很大。以前用别的开发工具列都对应一个唯一ID(列名只是显示名,而ID是程序员赋予列的唯一标识)
不知道JTable能不能做到这一点,应该能吧,请指点一二,谢谢!
1、通过列号来操作列
优点:代码灵活,且能保证列唯一性
缺点:一旦需求变化增减列,则所有关于列号的代码都要改。
2、通过列名(就是表头显示的名字)来操作列
优点:操作直观,且不易受列的改动影响。
缺点:列名不像列号可能有重复的;列名也很有可能会改动,则代码改动也很大。以前用别的开发工具列都对应一个唯一ID(列名只是显示名,而ID是程序员赋予列的唯一标识)
不知道JTable能不能做到这一点,应该能吧,请指点一二,谢谢!
获取列的方式很多。jtable里面提供:
columnAtPoint (Point point)返回 point 所在的列索引;如果结果不在 [0, getColumnCount()-1] 范围内,则返回 -1。
getColumn(Object identifier) 返回表中列的 TableColumn 对象,当使用 equals 进行比较时,表的标识符等于 identifier如果你还觉得不够。jtable有getColumnModel()方法。返回TableColumnModel即该table的一个专门用于管理列的实例。
这里面有:
getColumn(int columnIndex)
返回 columnIndex 位置列的 TableColumn 对象。
getColumnIndex(Object columnIdentifier)
返回该表中首列的索引,使用 equals 进行比较时,该列的标识符等于 identifier。
TableColumnModel是一个接口。其实jtable默认使用DefaultTableColumnModel 。
getColumn(int columnIndex)
返回 columnIndex 处列的 TableColumn 对象。
tableColumns
此模型中 TableColumn 对象组成的数组关于列的操作,应该足够了吧!!
列名分别为
姓名 年龄 语文成绩 数学成绩 英语成绩 总成绩 共5列
其中 总成绩 = 语文成绩 + 数学成绩 + 英语成绩 ,这个算法是写在程序中的,获取列值时使用的是列号。
列5 = 列2 + 列3 + 列4
现在需求变了,要在第0列和第1列之间增加1列,总列数变成6列,原来的2、3、4、5列变成了现在的3、4、5、6列
那么原来使用列号的代码就都要改。
如果我在获取列值时不是使用列索引,而是使用一个标识,比如 yuwen shuxue yingyu zcj。这样
即使随便增加列也不会对原有代码有影响。
2楼说的似乎可以,但本人刚接触Swing,还不熟悉,能否举个实际解决的例子?
是不是在设置数据时在TableColumnModel设置特别的标识?
望再指点,感谢了!
jtable每一列都对应一个TableColumn对象。这个对象不是JTable实际的组成部分,而是一个辅助的逻辑管理。这个类有setIdentifier方法public void setIdentifier(Object identifier)
将 TableColumn 的标识符设置为 anIdentifier。
注:JTable 不使用标识符,它们只是为了便于外部标记和标识列的位置。 当你为每一列设置好标识符后,就可以通过通过JTable的
public TableColumn getColumn(Object identifier)
方法,参数传入你的标识符,得到对应的列也就是TableColumn对象