2

出于某种原因,调用此 JTable 时,此 JTable 没有任何变化(此方法在用户提交 SQL 查询后更新 JTable)。

Givens:已验证 dataVector 和 columnNamesVector 已正确填充。JTable 是一个私有类变量。

private void updateData() {
    updateDataVariables();
    table = new JTable(dataVector, columnNamesVector)
    {
        @SuppressWarnings({ "unchecked", "rawtypes" })
        public Class getColumnClass(int column)
        {
            for (int row = 0; row < getRowCount(); row++)
            {
                Object o = getValueAt(row, column);

                if (o != null)
                {
                    return o.getClass();
                }
            }

            return Object.class;
        }
    };
}

有任何想法吗?

4

2 回答 2

4

将对象与引用变量混淆是初学者的常见谬误,但您需要了解它们是截然不同的。当你调用这个时:

table = new JTable(dataVector, columnNamesVector) {.....

您正在创建一个新的 JTable 对象并让表变量引用它,但这对 GUI 显示的 JTable对象没有影响,该对象是表变量之前引用的对象。因此,您正在更改引用变量的属性,但保持原始对象不变。

解决方案:您不应该创建一个新的 JTable,而应该创建一个新的 TableModel,然后将该 TableModel 放入现有的可视化 JTable 中。您可以通过调用setModel(newModel)它来更改表的模型。

编辑:或者正如 wolfcastle 指出的那样,您可以更新现有的 TableModel 而不是重新创建一个。

于 2013-05-13T01:44:53.853 回答
2

您需要告诉 JTable 模型中的数据已通过触发适当的事件进行更新。

看这个教程

于 2013-05-13T01:45:03.400 回答