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列。
在线等!!!

解决方案 »

  1.   

    你想动态是怎么处理的。通过设置列宽为0,并且不能Resize就可以简单实现啊
      

  2.   

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

  3.   

    {
    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.我已经调试了一天了都没有解决,请问各路高手怎么解决???
    在线等
      

  4.   

    你表格的属性怎么设置的,应该设置为 JTable.Auto_Resize_Off不然的话,即使你设置为0,再展现的时候还是会调整的
      

  5.   

    jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 这个不是吗
      

  6.   

    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);如上设置...
      

  7.   

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