我正在努力将我的数组列表变成一个二维数组,然后将其添加到表格上以显示数据。
import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
public class Planettabell
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame vindu = new Test();
vindu.setVisible(true);
}
});
}
}
class Test extends JFrame
{
private String[] name = {"Name", "grade"};
Object[][] cell = {{"nameHer", "GradeHer"}};
Object[][] cell2 = {{"nameHer2", "gradeHer2"}};
Object[][] cell3 = {{"nameHer3", "gradeHer3"} };
public Test()
{
setTitle("Planettabell");
setSize(500, 210);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
List<Object[]> list = new ArrayList<Object[]>();
list.add(cell);
list.add(cell2);
list.add(cell3);
Object[][]array = list.toArray(new Object[list.size()][]);
JTable tabell = new JTable(array, name);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(new JScrollPane(tabell), BorderLayout.CENTER);
}
}
如果我运行它,我会收到此消息
线程“AWT-EventQueue-0”中的异常 java.lang.ArrayIndexOutOfBoundsException:1
如果我在 JTable 上添加“cell”而不是“array”,则此代码可以正常工作,但我需要列表中的整个数组才能工作。
我也尝试过:
int number = list.size()/2;
Object[][] ArrayNew = new Object[number][2];
for(int x = 0; x< number; x++)
{
for(int z = 0; z < 2; z++)
{
int y = 2 * x;
ArrayNew [x][z] = list.get(y+z);
}
}
JTable tabell = new JTable(ArrayNew, name);
而不是list.toarray。但后来我只得到 [[Ljava.lang.Object;@28864ae7 和 [[Ljava.lang.Object;@49214a13] 表中文本应该在的位置。
希望得到任何答案:)
最佳答案
您的列表实际上是一个 3D 数据结构(2D 数组列表),它应该只是 2D(数组列表):
Object[] information = {"nameHer", "GradeHer"};
List<Object[]> list = new ArrayList<Object[]>();
list.add(information); // more data here
Object[][]array = list.toArray(new Object[list.size()][]);
在您的代码中,Object[][] cell = {{"nameHer", "GradeHer"}};
是一个二维数组,然后将其添加到列表中(使列表 3过程中的维度)。
您的单元格不应该是二维的,它们代表您的行并且必须是一维数组。
替换为 Object[] cell = {"nameHer", "GradeHer"};
就可以了
关于java - Arraylist 到 2D 数组,然后到 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367343/