如何使用JTable中定义的起始位置使用对象列表设置值?

时间:2014-11-25 17:59:26

标签: java arraylist

我有一个对象列表,我想放在JTable中。下面的地图有一个索引作为键,一个数组作为值。整数数组的第一个元素是行号,第二个是列号:

    mStartLocationMap = new HashMap<Integer, int[]>(); // private static
    mStartLocationMap.put(1,new int[]{0,0});
    mStartLocationMap.put(2,new int[]{1,0});
    mStartLocationMap.put(3,new int[]{0,1});
    mStartLocationMap.put(4,new int[]{1,1});

根据我获得的索引,我会检索相应的起始位置。该表是16行X 24列。然而,逻辑是这样的,无论起始位置是什么,我拥有的对象的arraylist,每个对象必须放在每个其他单元格中,直到我到达列的末尾。然后,行也每隔一行递增。以下是最终产品应该是什么样的(当我的列表中包含96个元素并且下面的代码发布时,这是完成的:

Expected Result

这是我的代码:

    // rowStart and colStart can be 0 or 1
    int counter = 0;
    for(int row=rowStart; row<rowCount ;row=row+2)    // rowcount =16
    {
        for(int col=colStart; col<colCount; col=col+2) // colcount=24
        {
            // myObjs is an ArrayList that contains 96 or less elements. This line throws the exception
            MyObject temp = myObjs.get(counter); 

            myTable.setValueAt(temp,row,col);
            counter++;
        }
    }

我知道这种方式不起作用,但我不确定如何在不抛出ArrayIndexOutOfBoundsException的情况下填充此模式中的表格。我知道哪一行引发了错误,但我无法找到另一种方法来实现我想要的 - 即将列表中的所有对象设置到表中,无论列表的大小是多少。

有人能指出我正确的方向吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

所以如果你的小于96,你想要的是:

┌─┬─┬─┬─┬─┬─┬─┬─┐
│*│ │*│ │*│ │*│ │
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │
├─┼─┼─┼─┼─┼─┼─┼─┤
│*│ │*│ │ │ │ │ │
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │
└─┴─┴─┴─┴─┴─┴─┴─┘

在这种情况下,您循环使用列表并调整当前的行和列,而不是相反:

    int row = rowStart;
    int col = colStart;
    for( MyObject temp : myObjs ) {
        myTable.setValueAt(temp,row,col);
        col+=2;
        if ( col >= colCount ) {
            col = colStart;
            row+=2;
        }
    }

基本上,您从rowStartcolStart开始。对于列表中的每个值,将其添加到表中,然后计算下一个位置。首先,转到下一列。如果您发现已超出列数,则需要转到下一行。您再次将列调整为第一列,然后更新您的行。

您不需要检查行的限制,因为您的列表中不应包含比表中更多的元素。

答案 1 :(得分:0)

你可能会在这一行得到例外:

MyObject temp = myObjs.get(counter);

由于您的数组列表为空,并且您尝试访问第0个元素。