jtable 动态显示与隐藏列

时间:2021-09-28 19:31:35
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列。
在线等!!!

9 个解决方案

#1


自己顶!!!!!!!!!!!!!!!!!!!!!!!

#2


你想动态是怎么处理的。

通过设置列宽为0,并且不能Resize就可以简单实现啊

#3


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


不然就重新设置model吧。

#4


{
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.

我已经调试了一天了都没有解决,请问各路高手怎么解决???
在线等

#5


你表格的属性怎么设置的,应该设置为 JTable.Auto_Resize_Off

不然的话,即使你设置为0,再展现的时候还是会调整的

#6


jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

这个不是吗

#7


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);

如上设置...



#8


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());
        }
       }
   }

#9


...

#1


自己顶!!!!!!!!!!!!!!!!!!!!!!!

#2


你想动态是怎么处理的。

通过设置列宽为0,并且不能Resize就可以简单实现啊

#3


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


不然就重新设置model吧。

#4


{
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.

我已经调试了一天了都没有解决,请问各路高手怎么解决???
在线等

#5


你表格的属性怎么设置的,应该设置为 JTable.Auto_Resize_Off

不然的话,即使你设置为0,再展现的时候还是会调整的

#6


jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

这个不是吗

#7


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);

如上设置...



#8


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());
        }
       }
   }

#9


...