这是我第一次尝试使用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函数传递给包含元素的String,用!*分隔。目前数据看起来像这样:
firstName!*123456!*lastName
然后将其拆分为Object [],我当前正在使用迭代器将其放入表格单元格中。
然而,我不断被ArrayIndexOutOfBoundsException: 27 >=27
抛出,所以看起来我对细胞生成/群体做错了。
我确信有更好的方法可以做到这一点,但在阅读了几个例子后,我仍然有点困惑。
非常感谢任何建议或建议。
谢谢!
答案 0 :(得分:1)
我发现这样做的最简单方法是编写自定义TableModel
。我写了很多这些,当你绕过它们时,它们并不那么困难。鉴于您发布的代码,您已收到此消息。
从TableModel
获取您的AbstractTableModel
课程。这将处理任何模型侦听器的注册(其中一个将是您的JTable
)。然后在插入时,您需要调用fireXXX()
以通知所有侦听器有新数据。从您要替换所有数据的示例代码中,这将是fireTableDataChanged()
。
答案 1 :(得分:0)
查看Glazedlists项目:http://www.glazedlists.com/
它以一种非常易于使用的方式解决了这个问题。有关您的具体案例的文档可以在http://www.glazedlists.com/propaganda/features#TOC-Easy-TableModels
找到