gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:13:37 26 4
gpt4 key购买 nike

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

    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 列。然而,逻辑是这样的,无论起始位置是什么,我拥有的对象的数组列表,每个对象都必须放置在每个其他单元格中,直到我到达列的末尾。然后,行也每隔一行递增。最终产品应该是这样的(这是在我的列表中有 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 的情况下以这种模式填充表格。我知道哪一行抛出了错误,但我无法找出另一种方法来实现我想要的 - 即将列表中的所有对象设置到表中,无论列表的大小如何。

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

谢谢!

最佳答案

因此,如果您的分数少于 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 开始。对于列表中的每个值,将其添加到表中,然后计算下一个位置。首先,您移至下一栏。如果您发现超出了列数,则需要转到下一行。您再次将该列调整为第一列,然后更新行。

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

关于java - 如何使用对象列表通过 JTable 中定义的起始位置来设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27133556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com