JScrollPane包含了jtable,jtable一共50行,默认显示26行,超过26行需要拉滚动条。
现在需要做的是 添加了两个统计行(要求和上面jtable的格式对齐),这两个统计行在jtable的下面,如果在上面的话,可以考虑用setColumnHeaderView来实现。在下面的话,就比较麻烦,因为上面jtable的宽度变时,下面统计行也要跟着变。
请问有什么办法能够实现上面的效果。

解决方案 »

  1.   

    自定义TableModel应该可以实现。构造函数接收数据后计算统计值追加到数组后就可以了。
      

  2.   

    这个如果重新封装一个带有footer的table的话 肯定会很耗时间 。效果的话你可以这样实现

    1.监听scrollpane里面的table的hander的resize事件,
    2.header resize以后遍历所有的column 将footer中的列进行repaint
      

  3.   

    我觉得自己实现TableModel比较好,在getValue(int r,int c)方法中进行判断,如果r是最后两行,就返回对应的统计行的数据。
    还可以通过实现TableCellRenderer,来使统计行与一般行显示上的不同,比如单元格的颜色不同。
      

  4.   

    tablemodel,cellrenderer不重写UI你能把 固定的统计信息一直显示在 table的下方吗 而且统计信息应该是在滚动条外面 一致显示的 不是随便的追加两行就可以了  如果是 还用什么render只是addrow添加两行就OK了
      

  5.   

    可以这样
    jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    这样表格的宽度就不会变了......
      

  6.   

    http://www.crionics.com/products/opensource/faq/swing_ex/src/examples/FixedRowExample.java这个可以作为参考,是利用两个jscrollpane,两个jtable做的,如果把上下两个jscrollpane都做setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS)设定的话就可以了
      

  7.   

    API有告诉你说始终显示垂直方向的滚动条table的column的宽度就不会变吗?
    table.getTableHeader().setResizingAllowed(false);才可以保证 table的没列的宽度值不变。
    这样设置的好处坏处可想而知如果某个单元格内有很多的内容 而且没有textarea作为editor进行双击显示的话 那么看不到的信息从哪里看呢?
      

  8.   

    信息过长的话,可以利用renderer实现tooltip来显示内容吧
      

  9.   

    你去看看JScrollPane的怎么实现就好了,很容易阿,无非是加个JViewport罢了如果你想更省事一点,可以直接用com.jidesoft.grid.TableScrollPane(http://www.jidesoft.com/javadoc/com/jidesoft/grid/TableScrollPane.html),
    它的JIDE Common Layer是免费和开源的,下载地址:https://jide-oss.dev.java.net/servlets/ProjectDocumentList?folderID=11599&expandFolder=11599&folderID=0
      

  10.   

    JViewport如何实现,能说清楚点吗,谢谢。
      

  11.   


    那我还是推荐你用JIDE吧。与其问别人要代码,还不如用现成的。
      

  12.   


    下载下来不包含com.jidesoft.grid.TableScrollPane啊。TableScrollPane是开源免费的吗
      

  13.   

    在jtable底下加JLabel,然后监听jtable列宽改变吧!
    jtable列宽改变时调整JLabel大小和位置。
    TableColumn.addPropertyChangeListener应该可以监听到列头宽度变化
      

  14.   

    我错了,不好意思,这个不是在common layer里面的,是再封装一层的。请使用JideScrollPane来代替你原来的JScrollPane。里面有这个方法,public void setColumnFooterView(Component view)和你已经知道的JScrollPane里的setColumnHeaderView一样的。
      

  15.   

    用JideScrollPane后,基本效果出来了,但是  
    上面jtable的宽度变时,下面统计行的宽度没有发生变化。想问下是  得监听上面jtable改变列宽的事件,还是哪些属性没有配置到位。我是这么做的 JideScrollPane里套了jtable1,然后setColumnFooterView里放了一个jpane,jpane里套了一个Jtable,这个Jtable显示的就是统计行的内容。希望能解答下,感激不尽。
      

  16.   

    呃,对的。这个是和你开始说的JScrollPane的setColumnHeaderView完全一样的,当然没有联动,所以我一开始才推荐你用TableScrollPane。
    这个组件是收费的,http://www.jidesoft.com/products/grids.htmTableScrollPane  - built on top of JideScrollPane to support table row headers, row footers and column footers using a single table model 
    实现联动的方法也很简单,思路大概就是你说的那样。TableColumnModelListener的columnMarginChanged就好了,很简单。