在Java中添加新的JTable时,JTable中的TableColumns是否链接?

时间:2012-10-11 08:21:36

标签: java swing jtable tablecolumn

我有几个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);
        }

但是显示正确的列:

  • 缺少列中的所有数据
  • 列似乎与它们来自的表相关联,如 调整大小可以调整其来自的表中的列的大小!

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

1 个答案:

答案 0 :(得分:3)

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

其次,TableColumn有自己的模型(包裹在TableColumnModel中),对象的更改将被注册监视它的所有模型反映(因此依赖的视图)他们)。

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

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