【问题标题】:Java JTable dynamic populationJava JTable 动态填充
【发布时间】:2013-06-19 23:59:42
【问题描述】:

这是我第一次尝试使用 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 &gt;=27 被抛出,所以看起来我在细胞生成/填充方面做错了。

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

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

谢谢!

【问题讨论】:

  • 如果你想从数据库中获取数据并动态创建 jtable 请参考java4practices.blogspot.in/2012/12/…
  • 什么是numberOfElement?您应该使用一些面向对象而不是字符串..,并且您正在使用迭代器而不检查它是否 hasNext()
  • @GaneshRengarajan 我不喜欢视图直接调用 bd :(
  • 数据不是来自数据库,而是来自另一个内部函数。
  • 元素的数量基本上是有多少列,所以在这种情况下它是3,因为它是firstname,int value,lastname

标签: java swing user-interface jtable


【解决方案1】:

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

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

【讨论】:

  • 感谢 Dobbo。任何推荐的阅读,或者我应该只有一个谷歌? :) 谢谢
  • @tony,最简单的方法是找出你得到异常的原因。你的数学或数据有问题。创建自定义 TableModel 不会解决此问题。我建议您首先尝试使用您在问题中发布的字符串的代码。那就是让一行数据工作。然后尝试两行。最后检查如果您的字符串不包含 3 的倍数的项目会发生什么。
  • @Tony Just Google 获取一些示例。自从我编写了我的第一个表格模型以来已经很久以前,我真的不记得我用作示例了。 @camickr 确实有关于异常的观点,您需要修复它。我不知道这是否被扔进了setValueAt() or next().
【解决方案2】:

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

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

找到

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-22
    • 2020-02-21
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2012-10-31
    相关资源
    最近更新 更多