我们在开发中一般2种方法来操作列
1、通过列号来操作列
优点:代码灵活,且能保证列唯一性
缺点:一旦需求变化增减列,则所有关于列号的代码都要改。
2、通过列名(就是表头显示的名字)来操作列
优点:操作直观,且不易受列的改动影响。
缺点:列名不像列号可能有重复的;列名也很有可能会改动,则代码改动也很大。以前用别的开发工具列都对应一个唯一ID(列名只是显示名,而ID是程序员赋予列的唯一标识)
不知道JTable能不能做到这一点,应该能吧,请指点一二,谢谢!

解决方案 »

  1.   

    当然没有任何问题。
    获取列的方式很多。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 对象组成的数组关于列的操作,应该足够了吧!!
      

  2.   

    扩展下JTable更方便些。JTable实现lz的需求没有问题。
      

  3.   

    我举个列子吧,比如有一个表有5列
    列名分别为 
    姓名 年龄 语文成绩  数学成绩 英语成绩  总成绩      共5列
    其中 总成绩 = 语文成绩 + 数学成绩 + 英语成绩 ,这个算法是写在程序中的,获取列值时使用的是列号。
    列5 = 列2 + 列3 + 列4
    现在需求变了,要在第0列和第1列之间增加1列,总列数变成6列,原来的2、3、4、5列变成了现在的3、4、5、6列
    那么原来使用列号的代码就都要改。
    如果我在获取列值时不是使用列索引,而是使用一个标识,比如 yuwen shuxue yingyu  zcj。这样
    即使随便增加列也不会对原有代码有影响。
    2楼说的似乎可以,但本人刚接触Swing,还不熟悉,能否举个实际解决的例子?
    是不是在设置数据时在TableColumnModel设置特别的标识?
    望再指点,感谢了!
      

  4.   

    我明白你说的意思。。以一个唯一的表识确定一列。
    jtable每一列都对应一个TableColumn对象。这个对象不是JTable实际的组成部分,而是一个辅助的逻辑管理。这个类有setIdentifier方法public void setIdentifier(Object identifier)
    将 TableColumn 的标识符设置为 anIdentifier。 
    注:JTable 不使用标识符,它们只是为了便于外部标记和标识列的位置。 当你为每一列设置好标识符后,就可以通过通过JTable的
    public TableColumn getColumn(Object identifier)
    方法,参数传入你的标识符,得到对应的列也就是TableColumn对象