0

这是我第一次尝试使用 Java Swing JTable,所以我可能在做一些愚蠢的事情。

我正在尝试在 GUI 上的 JFrame 中动态更新 JTable,这是我目前编写的代码:

 private void updateGUI(String input, DefaultTableModel model, int elements)  { //3 elements
    try {
        Object[] cellData = input.split("!\\*");
        Iterator it = Arrays.asList(cellData).iterator();
        int rowCount = cellData.length / numberOfElements;

        model.setRowCount(rowCount);

        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < numberOfElements; j++) {
                model.setValueAt(it.next(), i, j);
            }

        }
    } catch (Exception uhoh) {
        System.out.println("Couldn't add new string to gui");
        uhoh.printStackTrace();
    }

}

本质上,我向 updateGUI 函数传递了一个包含元素的字符串,用 !* 分隔。目前数据如下:

firstName!*123456!*lastName

然后将其拆分为 Object[],我目前正在使用迭代器将其放入表格单元格中。

但是,我不断得到ArrayIndexOutOfBoundsException: 27 >=27被抛出,所以看起来我在细胞生成/种群方面做错了。

我确信有更好的方法可以做到这一点,但是在阅读了几个例子之后,我仍然有点困惑。

任何建议或意见,将不胜感激。

谢谢!

4

2 回答 2

1

我发现最简单的方法是编写一个自定义TableModel. 我已经写了很多,当你了解它们时,它们并不难。鉴于您发布的代码,您已经收到此消息。

从. TableModel_ AbstractTableModel这将处理任何模型侦听器的注册(其中之一将是您的JTable)。然后在插入时,您需要调用fireXXX()以通知所有侦听器有新数据。从您要替换所有数据的示例代码中,这将是fireTableDataChanged().

于 2013-06-19T12:44:56.140 回答
0

看看 Glazedlists 项目:http ://www.glazedlists.com/

它以一种非常易于使用的方式解决了这个问题以及更多问题。有关您的具体案例的文档可以在http://www.glazedlists.com/propaganda/features#TOC-Easy-TableModels找到

于 2013-06-19T15:59:42.557 回答