1.这里重置rowData没什么意义,应该重置colVal,然后往colVal中写入数据,后面那句dtm.addRow(rowData)改成dtm.addRow(colVal)这样就不会出现标记2所说的问题。
3的问题不知道你所说的是什么问题

解决方案 »

  1.   

    谢谢楼上。
    1、按照如你所说的把标记1处改成colVal,工作正常。但是为什么在初始化model以前我必须建立Vector rowData并且用model.setDataVector(rowData,columnNames)来设定,而不能用colVal来取代rowData?否则会报错:ClassCastException:java.lang.String。应该是colVal无法进行类型转换。
    3的问题是指如果我把这段用来新增一列的代码在一个mouse click event中执行,则是完全没有问题的。为什么?
      

  2.   

    我倒,那么简单的问题,何必想那么复杂,改如下:
        //rowData=new Vector(); // ==========标记1===============
        //这里注释掉                      // 这一行非常重要,如果不重置rowData,
                              // 系统会抛出NullPointerException
                              // table也不会显示出来
        rowData.addElement(colVal); // ==========标记2===============
                                    // 新增的这个纪录中会把4个column values
                                    // 显示在一个格子中。    //DefaultTableModel dtm = (DefaultTableModel) tblReport.getModel();这里也注释
        //dtm.addRow(rowData);这里也
        //tblReport.setModel(dtm);这里也 // ==========标记3===============
                                 // 如果把整段增加纪录的代码移到别的method中,
                                 // 比如用一个event来触发,
                                 // 则不会发生上述的错误。
      

  3.   

    谢谢beyond_xiruo(希偌)兄。把这些行都注释掉当然没有问题了。
    但是我要完成的功能是用一个vector生成一个dtm然后马上再加入一行,结果出错了。这是为什么?
    我刚刚学java,才一个星期,问题多多,每天花大量的时间看api文档。希望以后能多指教。
      

  4.   

    JTable里的一个Row纪录应该是一个一维表,而你的rowData中add了另一个向量,成了二维表。
    正确的rowData应该是{"C1", "C2", "C3", "C4"},而你现在的rowData却是{{"C1", "C2", "C3", "C4"}},系统认为这个rowData只包含一个value,于是整个ColVal被作为一个value被加入JTable的第一列(这就是为什么4个values显示在一个column中),而你的JTable有四列,添加第二列数据时就会出错。如果要改进,rowData我感觉根本没必要使用,就算使用了,也不用再次做new,把原来的元素clear掉就行了。还有对于rowData这样的Vector对象,尽量使用.add()这样在List接口中申明的方法,而不要用addElement()。