【问题标题】:Dynamically changing the column header text in JTable动态更改 JTable 中的列标题文本
【发布时间】:2009-09-30 04:46:55
【问题描述】:

我有一个包含 3 列的表格,其标题中有以下值:'No.'、'X [mm]'、'Y [mm]'。该表包含以毫米为单位的点坐标。我有一个复选框,用于检查应该重新填充哪个表格以显示以英寸为单位的坐标。此外,列标题值应为:'No.'、'X [in]'、'Y [in]'。

总之我想动态改变表格的表头文字。

详细说明: 该表是 JTable 的子类。此外,已将“DefaultTableModel”的子类设置为表的模型。我已经在数据模型子类的构造函数中提供了标头值。

有什么想法吗?我的应用程序仅与 jdk v1.4 兼容,因此如果该解决方案与版本兼容会很好:)

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    您可以直接更新 TableColumnModel:

    JTableHeader th = table.getTableHeader();
    TableColumnModel tcm = th.getColumnModel();
    TableColumn tc = tcm.getColumn(0);
    tc.setHeaderValue( "???" );
    th.repaint();
    

    【讨论】:

    • 这不是 100% 的解决方案,因为它仅在模型更改或触发“tableStructureChanged”之前有效。然后将从模型中重新读取列文本。
    • 如果这是一个问题,您可以在最初创建表后使用 table.setAutoCreateColumnsFromModel( false )
    • 其他人在执行此操作时遇到内存泄漏?如果我长时间浏览表,我的堆会越来越大。
    • 如何触发 tableStructure ya @EugeneRyzhikov...?是否需要像@camickr 所说的那样在 setHeaderValue() 之前调用 setAutoCreateColumnsFromModel(false) ?
    【解决方案2】:

    如果您有列号,请使用该代码

     jtable.getColumnModel().getColumn(5).setHeaderValue("newHeader");
    

    【讨论】:

    • 更新表格需要在代码后调用jtable.getTableHeader().repaint();
    【解决方案3】:

    我无法在这里进行测试,但我很熟悉这种方法 '[DefaultTableModel.setColumnIdentifiers(...)][1]' 应该可以满足您的要求。

    基本上,您运行“DefaultTableModel.getColumnCount()”来找出有多少列(除非您已经知道)。然后你运行'DefaultTableModel.getColumnName(int ColumnIndex)'来获取每个的名字,改变你想要的方式并将它放在一个数组中。之后,您使用 'DefaultTableModel.setColumnIdentifiers(...)' 设置它们。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2011-12-16
      相关资源
      最近更新 更多