2010-04-01 163 views
1

我有一个可变数目的二维数组。 第一维是可变的,第二维是恒定的。 即:可变数量的二维数组合成一个大阵列

Object[][] array0 = { 
{"tim", "sanchez", 34, 175.5, "bla", "blub", "[email protected]"}, 
{"alice", "smith", 42, 160.0, "la", "bub", "[email protected]"}, 
... 
}; 

Object[][] array1 = { 
{"john", "sdfs", 34, 15.5, "a", "bl", "[email protected]"}, 
{"joe", "smith", 42, 16.0, "a", "bub", "[email protected]"}, 
... 
}; 

... 

Object[][] arrayi = ... 

我生成这些阵列与一个for循环:

for (int i = 0; i < filter.length; i++) { 
    MyClass c = new MyClass(filter[i]); 
    //data = c.getData(); 
} 

在哪里“过滤器”是填充有信息的另一阵列告诉“MyClass的”如何以填充阵列。 “getData()”返回i个数组中的一个。

现在我只需要在一个大的二维数组中的一切。 即:

Object[][] arrayComplete = { 
{"tim", "sanchez", 34, 175.5, "bla", "blub", "[email protected]"}, 
{"alice", "smith", 42, 160.0, "la", "bub", "[email protected]"}, 
... 
{"john", "sdfs", 34, 15.5, "a", "bl", "[email protected]"}, 
{"joe", "smith", 42, 16.0, "a", "bub", "[email protected]"}, 
... 
... 
}; 

最后,我需要一个二维数组养活我的挥杆的TableModel。

有关如何完成此任何想法?它现在正在吹我的脑海。

+0

见这是一个简单的例子,如@Bill K所建议的那样,使用'Collection'构造一个'TableModel'。http://stackoverflow.com/questions/2541037/i-have-to-select-the-checkbox-two-times-要检查在uncheck-in-jtable/2541265#2541265 – trashgod 2010-04-01 18:28:03

回答

7

如果您开始考虑使用对象和集合而不是阵列,那么您的头部吹气将显着减少。严重的是,像这样的数组工作太快了!这就是OO编程发明的原因。

从最简单的对象开始:用户。它看起来像用户包含名字,姓氏,年龄,其他内容和电子邮件地址。

现在是你所有的用户的集合?微不足道的管理!

然后,您必须将该组用户映射到摆台模型。一个简单的toArray()方法可以返回你想要的一维数组。从这些创建二维数组应该很容易,等等(虽然我不确定二维数组是否是要走的路)

此外,创建一个Person构造函数,它将Object []用于您不必改变你的对象的创建方式 - 以你所做的方式将它们创建为数组实际上非常高效。

如果在这之后它仍然令人困惑,我们应该弄清楚为什么你要用数组喂食你的表模型 - 这真的有必要吗?一般而言,一组对象将更容易管理。

(很抱歉的多个编辑。不知为什么,我总是看到击中后保存更多...)

+0

感谢您的帮助,但我不明白你在说什么。 我也不创建我的“人员”,我从网页中检索他们。 我的程序比这个例子复杂得多。我试图尽可能简单地将其打散,现在我遇到了麻烦,将您的解决方案应用到我的实际程序中。 我想你说的是我有一些重大的结构错误,但我记下了如何正确管理它。 – qlb 2010-04-02 12:02:49

+0

我的个人对象负责从网页中检索数据。 “MyClass”构造函数接受这个Person对象,并将信息放入jTableModel符合格式中。但是现在我有多个Person对象。 对不起,也许我的例子有点不对,因为我把它分解为一堆2d数组一起添加到一个大的2d数组的问题。 – qlb 2010-04-02 12:04:26

+0

最佳方式是实现您自己的JTableModel并存储一组“Person”对象。当请求进入您的表模型时,从您的集合中获取正确编号的Person,然后从该对象返回与请求的列匹配的属性。 JTableModel对象成为您的模型(Person)和视图(JTable)之间的翻译(控制器)。 – 2010-04-02 18:23:28

2

据我所知,秋千表使用数组,但是这并不意味着你也应该这么做!

做什么Bill描述并将您的数据分解成对象类,然后将它一次一行地输入到您的表中。这将保持您的数据表示很好。

Swing仅用于“显示”和“输入”。它不应该是您存储数据的位置,也不应该代表数据。

1

你应该听别人的给予意见,但如果你在做什么,你本来打算做坚持,这是多么:

public static Object[][] concat(Object[][]... arrays) { 
    int length = 0; 
    for (Object[][] comp : arrays) { 
     length += comp.length; 
    } 
    Object[][] ret = new Object[length][]; 
    int offset = 0; 
    for (Object[][] comp : arrays) { 
     System.arraycopy(comp, 0, ret, offset, comp.length); 
     offset += comp.length; 
    } 
    return ret; 
} 

所以,现在比如,你可以做以下:

Object[][] arr1 = { 
     { "A" }, 
     { "B" }, 
    }; 
    Object[][] arr2 = { 
     { "1" }, 
     { "2" }, 
    }; 
    Object[][] arr3 = { 
     { "x", "x" }, 
     { "y", "y" }, 
    }; 
    Object[][] all = concat(arr1, arr2, arr3); 
    System.out.println(Arrays.deepToString(all)); 
    // prints "[[A], [B], [1], [2], [x, x], [y, y]]" 

您也可以使用这样的:

Object[][] all = new Object[0][]; 
    all = concat(all, arr1); 
    all = concat(all, arr2); 
    all = concat(all, arr3); 
    // : 
    // maybe more... like in a loop 

    System.out.println(Arrays.deepToString(all)); 
    // prints "[[A], [B], [1], [2], [x, x], [y, y]]" 
相关问题