【问题标题】:TableColumns from a JTable are linked when adding to a new JTable in Java?在 Java 中添加到新的 JTable 时,JTable 中的 TableColumns 会被链接?
【发布时间】:2012-10-01 20:38:02
【问题描述】:

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

但是会显示正确的列:

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

我在这里遗漏了一些简单的东西吗?

【问题讨论】:

  • 有两种/三种方式,但我错过了其他重要信息(不包括电池),为了获得更好的帮助,请尽快发布SSCCE

标签: java swing jtable tablecolumn


【解决方案1】:

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

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

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

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

【讨论】:

  • 这很有道理,谢谢。我想我将不得不使用自定义表模型来获取正确列中的值?我无法弄清楚如何使用默认表模型来做到这一点,因为所有值都在第一列中。
  • 你可以让它与默认模型一起工作,我个人启动了AbstractTableModel。基本上,您需要想办法将每一列映射到它们应该代表的数据行
  • 非常感谢,我终于使用默认表格模型让它正常工作了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2013-11-26
  • 1970-01-01
  • 2010-11-15
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多