当前位置: 技术问答>java相关
如何在jtable中隐藏某些行(不是删除行),要多少分给多少分,up有分
来源: 互联网 发布时间:2015-08-24
本文导语: 如题,谢谢大家了。 | 我曾经变写过一个model, 可以实现你的要求,但是效果不好看,我后来也没有正式用它,你如果要可以发给你。 | 有一个变通的办法,可行不可行没试...
如题,谢谢大家了。
|
我曾经变写过一个model, 可以实现你的要求,但是效果不好看,我后来也没有正式用它,你如果要可以发给你。
|
有一个变通的办法,可行不可行没试过:
表对数据的显示,是通过Model的方法public Object getValueAt(int row, int col)来得到某行某列的数据的,所以在你自己的Model中可以改变次方法,如果你想隐藏几行,就在数据Vector或数组中添加几个空行(以免以后向下跳行时会出现索引异常);然后在getValueAt中得到由另一个自定义方法传过来的要隐藏的行的行号的数组或其他的数据结构,然后一个循环,如果参数row==这里边的某个行号,有一个全局变量allrow=row;此时应该allrow+=1;然后返回super.getValueAt(allrow,col)即可。也就是说控制数据时就是让他越过要隐藏的行直接取下一行,只是在表底部会出现没有数据的行。
表对数据的显示,是通过Model的方法public Object getValueAt(int row, int col)来得到某行某列的数据的,所以在你自己的Model中可以改变次方法,如果你想隐藏几行,就在数据Vector或数组中添加几个空行(以免以后向下跳行时会出现索引异常);然后在getValueAt中得到由另一个自定义方法传过来的要隐藏的行的行号的数组或其他的数据结构,然后一个循环,如果参数row==这里边的某个行号,有一个全局变量allrow=row;此时应该allrow+=1;然后返回super.getValueAt(allrow,col)即可。也就是说控制数据时就是让他越过要隐藏的行直接取下一行,只是在表底部会出现没有数据的行。
|
最好自己实现一个Model,这是最符合设计的,这也是Swing小组所建议的。Model是很好用的,不知道你是否知道如何在表格中实现树形的表格呢?多查点资料,掌握它,这是很有用的。而且,由于自己实现的Model,性能也不是问题。
注意几个设计要点:
对于getValueAt()方法的实现要简洁,原因是每一次的paint都将调用此方法,如果算法过于耗时将会影响性能,也要控制在其内尽量的不要抛出Exception。
注意几个设计要点:
对于getValueAt()方法的实现要简洁,原因是每一次的paint都将调用此方法,如果算法过于耗时将会影响性能,也要控制在其内尽量的不要抛出Exception。
|
如果视觉效果要求不是很高,可以通过setRowHeight(int row, int rowHeight) 来实现,但最小高度是1,不知道为什么?这样如果隐藏多的话就很难看,但比较方便。
否则只能先删除数据,再恢复数据了。
否则只能先删除数据,再恢复数据了。
|
1.我想这不能是界面元素JTable的任务了.他负责的是把你要的数据(model)给按照你设定的格式(cellRenderer)给展现出来.你给10行,他决不显示9行,如果你要只显示9行,我想还是从model着手去想.
2. 假定你有100行数据,可是你想隐藏其中10行,这时我的想法就是你另外找个地方(比如一个vector或者什么的)把你要隐藏的数据从model中"搬出来",其实就相当于从model中删除,只是在有个你知道的地方保存了而已.这时,JTable很听话,只会把你剩下的90行数据显示出来.至少达到了隐藏的目的.
3.当然,隐藏意味着在某些特殊时刻还是要显示出来,那么在你需要的时候,从你的那个备份隐藏的地方把那10行数据拿出来,再添加到model中去,这样JTable认为model被修改,更新显示,自然就会成100行的数据.
所以我想你要说的隐藏其实是隐藏数据,我的建议就是对model进行手术,这样你甚至可以在不同的地方保留不同的数据,需要某些只要拿出来set给model,不需要的时候从model删除就可以.而不仅仅是jTable去考虑
个人想法,欢迎讨论.
2. 假定你有100行数据,可是你想隐藏其中10行,这时我的想法就是你另外找个地方(比如一个vector或者什么的)把你要隐藏的数据从model中"搬出来",其实就相当于从model中删除,只是在有个你知道的地方保存了而已.这时,JTable很听话,只会把你剩下的90行数据显示出来.至少达到了隐藏的目的.
3.当然,隐藏意味着在某些特殊时刻还是要显示出来,那么在你需要的时候,从你的那个备份隐藏的地方把那10行数据拿出来,再添加到model中去,这样JTable认为model被修改,更新显示,自然就会成100行的数据.
所以我想你要说的隐藏其实是隐藏数据,我的建议就是对model进行手术,这样你甚至可以在不同的地方保留不同的数据,需要某些只要拿出来set给model,不需要的时候从model删除就可以.而不仅仅是jTable去考虑
个人想法,欢迎讨论.
|
/**
* 隐藏JTable中一列
* @param ptable
* @param index 要隐藏的列,0表示第一列,
* 注意隐藏某列后,该列原来在后面的列,如隐藏第0列后,原来的第1列就变成了第0列
*/
public static void hideColumn(JTable ptable, int index)
{
if (index = ptable.getColumnCount())
return;
TableColumnModel columnModel = ptable.getColumnModel();
TableColumn column = columnModel.getColumn(index);
ptable.removeColumn(column);
}
楼上的几位说的对,你的出发点有误,不过,以上的程序可以实现你的要求
* 隐藏JTable中一列
* @param ptable
* @param index 要隐藏的列,0表示第一列,
* 注意隐藏某列后,该列原来在后面的列,如隐藏第0列后,原来的第1列就变成了第0列
*/
public static void hideColumn(JTable ptable, int index)
{
if (index = ptable.getColumnCount())
return;
TableColumnModel columnModel = ptable.getColumnModel();
TableColumn column = columnModel.getColumn(index);
ptable.removeColumn(column);
}
楼上的几位说的对,你的出发点有误,不过,以上的程序可以实现你的要求
|
大家都是高手,其实你可以看看关于jtable的帮助,写的很好,你要的功能也可实现。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。