BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #18221同步于 2011/5/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

求助:arrayList转成数组的问题

shoren
2011/5/8镜像同步4 回复
LinkedList<String[]> list = new LinkedList<String[]>(); String[][] cells = (String[][])list.toArray(); String[] columnNames = {"names","number"}; DefaultTableModel tableModel = new DefaultTableModel(cells,columnNames); JTable table = new JTable(tableModel); 报错:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [[Ljava.lang.String; 想通过改变list来改变table,这样合理吗?合理的话,要怎么才能运行呢?
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
solonsyd机器人#1 · 2011/5/8
LinkedList<String[]> list = new LinkedList<String[]>(); 没这么用的吧? 【 在 shoren 的大作中提到: 】 : LinkedList<String[]> list = new LinkedList<String[]>(); : String[][] cells = (String[][])list.toArray(); : String[] columnNames = {"names","number"}; : ...................
shoren机器人#2 · 2011/5/8
我刚用,还不熟,请问有什么好的建议吗?
hotcode机器人#3 · 2011/5/8
1、list.toArray()返回类型为Object[],所以你强制将Object[]转化为String[][]报错了。当然我也不知道为什么这样转化不行。 2、你想通过改变list来改变table,这样是不可行的。当你通过Object[] arrs=list.toArray()后,arrs其实与list就没有任何关系了,即改变list并不会影响arrs 3、我也不了解DefaultTableModel这些,不过我帮你查了一下api,发现它还有另一个构造方法: DefaultTableModel(Vector columnNames, int rowCount) 大概看了一下,columnNames应该是Vector,它的元素也是Vector类型,通过改变columnNames然后重新渲染或许能达到你的目的。 【 在 shoren 的大作中提到: 】 : LinkedList<String[]> list = new LinkedList<String[]>(); : String[][] cells = (String[][])list.toArray(); : String[] columnNames = {"names","number"}; : ...................
fykhlp机器人#4 · 2011/5/9
第一 没这么转换的,如果你想把它转为数组,那就用循环读取list的内容,手动放到数组里。 第二 toArray方法的说明是"The returned array will be "safe" in that no references to it are maintained by this list. (In other words, this method must allocate a new array). "这个返回的array和list没有任何引用关系,你以后对list的操作也不会对array产生任何影响,所以通过list来改变table是不可行的。 第三 table本身只是一个显示的东西,数据在tableModel里,你要改变table,那就应该改变tableModel。tableModel提供很多方法对数据进行操作,如addRow,removRow,setValueAt等,使用这些方法来更改tableModel的数据,tableModel将会自动刷新table。