0

我有几个 JTable,每个都有几列。每个表都显示在 JTabbed 窗格中的不同选项卡上。这些列在表中具有相同的标题名称,但列中的值不同。我试图通过右键单击标题并点击比较来允许在所有表中比较标题。这将打开一个新的 JDialog,同时传递一个具有所选匹配标题的列列表:

public void actionPerformed(ActionEvent arg0) {
                List<TableColumn> columns = new ArrayList<TableColumn>();

                for (int i = 0; i < tables.size(); i++) {

                    String tableName = tabPane.getTitleAt(i);
                    JTable tempTable = (JTable) tables.get(tableName);

                    // Get column at the channel name used
                    TableColumn col = tempTable.getColumn("chosen header");

                    // Add the column to the list of channel columns
                    columns.add(col);
                }

                new comparisonDialog(UI.getFrame(), "chosen header",
                        columns);
            }

这似乎工作正常,将表的所有公共列存储到传递给新 JDialog 的列表中。当我在新的 JDialog 中显示包含这些列的表格时,它似乎也可以工作:

JTable table = new JTable();

for (TableColumn col : passedColumnList) {
            col.setHeaderValue(col.getHeaderValue());
            table.addColumn(col);
        }

但是会显示正确的列:

  • 列中的所有数据都丢失了
  • 这些列似乎链接到它们来自的表,因为调整一个大小会调整它来自​​的表中的列的大小!

我在这里错过了一些简单的东西吗?

4

1 回答 1

3

首先,表中的数据由表模型控制,而不是由列模型控制。

其次, aTableColumn有自己的模型(包装在 a 中TableColumnModel),对对象的更改将反映在所有注册以监视它的模型(以及依赖于它们的视图)中。

您将需要创建一个新的表模型,其中包含每列的数据行,映射到相应的列。

您应该允许您的表模型定义列信息,而不是从基础表中“提取”列引用。

于 2012-10-11T08:53:18.820 回答