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列。
在线等!!!
{
// 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列。
在线等!!!
设置列标题为空字符串,设置列宽为0(必须先设置最小宽度再设置最大宽度),刷新一下view就可以了。
不然就重新设置model吧。
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.我已经调试了一天了都没有解决,请问各路高手怎么解决???
在线等
2、table.getColumnModel().getColumn(i).setMinWidth(0);
3、table.getColumnModel().getColumn(i).setResizable(false);
4、table.getColumnModel().getColumn(i).setPreferredWidth(0);如上设置...
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());
}
}
}