我想动态生成一个固定大小的String [](String [] [] object)数组,填充w。行的字符串值从db创建JTable。
为此,我使用String []的ArrayList,动态填充它。然后使用list.toArray()将其转换为Array。 但.toArray()只将列表转换为单维数组Object []或T []。
我需要String [] [] / Object [] []来使用JTable构造函数。
代码
Object[][] dlist = (Object[][]) al.toArray();
生成:java.lang.ClassCastException:[Ljava.lang.Object;不能转换为[[Ljava.lang.Object;
ers = pdao.getEmployeeResultSet(prs.getInt("PROJ_ID"));
ArrayList<String[]> alist = new ArrayList<String[]>();
while (ers.next()){
String eid = ers.getString("EMP_ID");
String ename = ers.getString("EMP_NAME");
String gend = ers.getString("GENDER");
String bd = ers.getString("BIRTHDATE");
String addr = ers.getString("ADDRESS");
String city = ers.getString("City");
String[] str = {eid, ename, gend, bd, addr, city};
alist.add(str);
}
Object[][] dlist = (Object[][]) al.toArray();
String[] cnames = {"EMP_ID","EMP_NAME","GENDER","BIRTHDATE","Address","City"};
jtable = new JTable(dlist, cnames);
我使用tuturial:http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/components/SimpleTableDemoProject/src/components/SimpleTableDemo.java来创建JTable。
答案 0 :(得分:1)
只需使用
String[][] dlist = alist.toArray(new String[][]{});
您传递给方法的数组也可以用作实际数组,如果您知道大小(使用alist.size()
),将会返回该数组,但它对< strong>你想要的数组类型。
您实际上可以通过
确认String[][] holder = new String[alist.size()][];
String[][] returned = alist.toArray(holder);
System.out.println(holder == returned);
将打印
true
现在,显然,由于数组是协变的,你也可以做
Object[][] dlist = al.toArray(holder);
答案 1 :(得分:-2)
如果你真的想要我自己创建双数组:
public static String[][] getDArray(final ArrayList<String[]> aList) {
final int size = aList.size();
final String[][] ans = new String[size][];
for(int i = 0; i < size; ++i)
ans[i] = aList.get(i);
return ans;
}