快速业务通道

固定JTable中的前几列 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
    table.getBounds().height);     g2.setColor(Color.RED);     g2.fillRect(0, 0, division, table.getBounds().height);     table.paint(g2);     g.drawImage(image, 0, 0, division,       table.getBounds().height, 0, visibleRect.y,       division, visibleRect.y + table.getBounds().height,       null); //    g.setColor(Color.BLACK); //    for (int i = 0; i < visibleRect.y //      + table.getBounds().height; i += 8) { //     g.drawLine(division - 1, i, division - 1, i + 4); //     g.drawLine(division - 2, i, division - 2, i + 4); //    }     g2.dispose();    }   }  }

接下来就是鼠标等一些事件来监听画出固定列的信息了。当捕捉到需要将固定的列固定住,就调用如下方法:

/** *//**    *固定列    *利用JLayeredPane使其显示在JTable之上    **/    public void freeze() {     JLayeredPane pane = table.getRootPane().getLayeredPane();     if (added) {      pane.remove(fixedColumns);     }     pane.add(fixedColumns, JLayeredPane.POPUP_LAYER);     setBoundsOnFrozenColumns();     added = true;     fixedColumns.setVisible(true);    }

还有一些繁杂的计算ixedColumns的位置大小大家可以下载代码自己看了,大致原理就是如此简单,就是利用JLayeredPane层的概念,用起来也很方便,只需要在原有的代码传入JTable,以及装在这个JTable的JScrollPane,如

JTable table = new JTable(data, columnNames);    JScrollPane scrollPane = new JScrollPane(table);    FixTableManager tableHeader = new FixTableManager(table,scrollPane);    //固定前三列    tableHeader.setFixCol(2);

总之这样能忽悠成看起来像是固定了,那它也有感觉不带劲的地方,大家如有兴趣,可以在下面的链接中下载代码,运行其看看效果  ,效果是Scrollbar不会的最小值停留的位置不是在固定列的最后位置,随之scrollbar的拖动,我们可以看到有的列会被固定的列挡住,正如前面所说,这个所谓的固定是个假象。还有一些缺点如有的皮肤可能算出来的结果会和原有的Table看起来不一致等。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号