jtable 动态显示与隐藏列

Nature_cworkplace 2008-12-24 06:28:33
jtable 动态显示与隐藏列

public void setCurPage(int curPage)
{
// jComboBox1.setSelectedIndex(curPage);
Vector tempTitle,tempResult;
if(viewFlag == true)
tempTitle = title1;
else
tempTitle = title2;
Vector eachResult = new Vector();
// tempResult = (Vector)result.clone();
int firstRecord = curPage*10;
int lastRecord = firstRecord + 9;
if(lastRecord >= recordNum)
lastRecord = recordNum - 1;
int i;
for(i = firstRecord; i <= lastRecord; i++)
// eachResult.add(tempResult.get(i));
eachResult.add(result.get(i)); //result是vector类型,里面放的也
modal.setDataVector(eachResult,tempTitle); //是vector,再里面放的13个
} //String(原来)

在jtable中,我想当viewFlag为true的时候让它显示13列,为false的时候显示8列(通过menuitem实现)。我起初的想法是通过改变setDataVector中的参数tempTitle来实现,就是用标题的列数来控制整个jtable的列数,但是发现当13列变成8列时连result中的每一个小vector中的13列String也被截取成8列。jtable中有13个标题,但只有前八列有值,后5列没有值,请问高手们,在jtable中有什么方法动态的显示13列或8列。
在线等!!!
...全文
342 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongfuliang 2008-12-31
  • 打赏
  • 举报
回复
你表格的属性怎么设置的,应该设置为 JTable.Auto_Resize_Off

不然的话,即使你设置为0,再展现的时候还是会调整的
Nature_cworkplace 2008-12-31
  • 打赏
  • 举报
回复
{
columnModel = (DefaultTableColumnModel)jTable2.getColumnModel(); //在构造函数中
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
changeView(0); //调用changview把8-12列的列宽设为0
}


public void changeView(int width)
{
TableColumn eachColumn = null;
System.out.println(width);
for(int i = 8; i < 13; i++)
{
eachColumn = columnModel.getColumn(i);
eachColumn.setPreferredWidth(width);
System.out.println("Prefer"+eachColumn.getPreferredWidth());
eachColumn.setMaxWidth(width);
System.out.println("Max"+eachColumn.getMaxWidth());
eachColumn.setMinWidth(width);
System.out.println("Min"+eachColumn.getMinWidth());
}
}

private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
changeView(75);//按下menuitem2将列宽设为75
}

private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
changeView(75);//按下menuitem1将列宽设为0

}

我的问题是:
1.一开始jtable1的列宽都没有设为0,构造函数的changView(0)根本不起作用
2.在按下menuitem1时,setPreferredWidth(width) setMaxWidth(width) setMinWidth(width)只有一些方法设置成功
menuitem1要两下jtable1的后五列的列宽才设为0.

我已经调试了一天了都没有解决,请问各路高手怎么解决???
在线等
gongfuliang 2008-12-31
  • 打赏
  • 举报
回复
...
Nature_cworkplace 2008-12-31
  • 打赏
  • 举报
回复
to gongfuliang:

谢谢你的建议,我加了你的几句话再加上我的一些小聪明,终于把它给搞定了

{
tableModel = ((DefaultTableModel) jTable2.getModel());
columnModel = (DefaultTableColumnModel)jTable2.getColumnModel();
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for(i = 0; i < 13; i++)
columnModel.getColumn(i).setResizable(false);
}

public void changeView(int width)
{
TableColumn eachColumn = null;
System.out.println(width);
int i, j;
for(j = 0; j < 2; j++) //因为menuitem1要按两次才能改变,所以我试一下让他循环两次
{ //竟然得喔,踩到狗屎运了。
for(i = 8; i < 13; i++)
{
eachColumn = columnModel.getColumn(i);
eachColumn.setMinWidth(width);
System.out.println("Min"+eachColumn.getMinWidth());
// eachColumn.setResizable(false);
eachColumn.setPreferredWidth(width);
System.out.println("Prefer"+eachColumn.getPreferredWidth());
eachColumn.setMaxWidth(width);
System.out.println("Max"+eachColumn.getMaxWidth());
}
}
}
gongfuliang 2008-12-31
  • 打赏
  • 举报
回复
1、table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
2、table.getColumnModel().getColumn(i).setMinWidth(0);
3、table.getColumnModel().getColumn(i).setResizable(false);
4、table.getColumnModel().getColumn(i).setPreferredWidth(0);

如上设置...



Nature_cworkplace 2008-12-31
  • 打赏
  • 举报
回复
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

这个不是吗
focusforce 2008-12-26
  • 打赏
  • 举报
回复
这种只是显示和隐藏而不改变数据模型本身的,不要修改model,就修改view吧。
设置列标题为空字符串,设置列宽为0(必须先设置最小宽度再设置最大宽度),刷新一下view就可以了。


不然就重新设置model吧。
gongfuliang 2008-12-25
  • 打赏
  • 举报
回复
你想动态是怎么处理的。

通过设置列宽为0,并且不能Resize就可以简单实现啊
Nature_cworkplace 2008-12-24
  • 打赏
  • 举报
回复
自己顶!!!!!!!!!!!!!!!!!!!!!!!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧