1.这里重置rowData没什么意义,应该重置colVal,然后往colVal中写入数据,后面那句dtm.addRow(rowData)改成dtm.addRow(colVal)这样就不会出现标记2所说的问题。
3的问题不知道你所说的是什么问题
3的问题不知道你所说的是什么问题
解决方案 »
- 问个很弱的问题
- 在单核cpu上Java多线程编程是否一定提高程序效率
- 信阳广播电视大学这样的学校还有必要再读下去吗?
- 怎么在指定的框架中打开一个网页?
- java初学者,求关于Son s = new Son()这句话的理解!
- 方法中的局部变量使用final 修饰后,放在堆中,而不是栈中?
- JAVA基础问题
- JBuilder 7的使用问题--关于鼠标错位的问题
- 请问有些电子书下载解压后是一些后缀是.001 .002 -.300 .A01 -.A05,怎样看?
- 菜鸟新手制作五子棋小游戏出现小问题,请大神解答
- toString()方法是怎么回事?我糊涂了?
- Java开发者:Eclipse的使用简介及插件开发
1、按照如你所说的把标记1处改成colVal,工作正常。但是为什么在初始化model以前我必须建立Vector rowData并且用model.setDataVector(rowData,columnNames)来设定,而不能用colVal来取代rowData?否则会报错:ClassCastException:java.lang.String。应该是colVal无法进行类型转换。
3的问题是指如果我把这段用来新增一列的代码在一个mouse click event中执行,则是完全没有问题的。为什么?
//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来触发,
// 则不会发生上述的错误。
但是我要完成的功能是用一个vector生成一个dtm然后马上再加入一行,结果出错了。这是为什么?
我刚刚学java,才一个星期,问题多多,每天花大量的时间看api文档。希望以后能多指教。
正确的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()。