【问题标题】:Rename custom JTable's columns - Java重命名自定义 JTable 的列 - Java
【发布时间】:2017-04-05 07:28:06
【问题描述】:

我在我的应用程序中使用此代码:https://stackoverflow.com/a/8187799。我需要在列和行上显示一个带有自定义标题的表格,因此是JTableRowHeader

我了解如何使用此代码更改行名称,但我找不到应该更改列名称的位置。由于我对这个概念不是很熟悉,所以我对此有点挣扎。

我尝试在model = new DefaultTableModel() 中添加此代码但不起作用,列仍标记为ABC 等:

@Override
public String getColumnName(int column) {
    switch (column) {
    case 0: //First column name:
        return "Name1";
    case 1: //Second column name:
        return "Name2";
    //case 2: More names ....
    default: // other columns that are not defined above
    // using default in a switch statement is always the best practice
    return "";
    }
}  

编辑:我的代码与我链接的代码相同,只是我在这里添加了方法getColumnName(int index),但它不起作用:

model = new DefaultTableModel() {

        private static final long serialVersionUID = 1L;

        @Override
        public int getColumnCount() {
            return 1;
        }

        @Override
        public boolean isCellEditable(int row, int col) {
            return false;
        }

        @Override
        public int getRowCount() {
            return JTableRow.this.getRowCount();
        }

        @Override
        public Class<?> getColumnClass(int colNum) {
            switch (colNum) {
            case 0:
                return String.class;
            default:
                return super.getColumnClass(colNum);
            }
        }

        @Override
        public String getColumnName(int column) {
            return "test";
        }


    };

【问题讨论】:

  • 你试过repaint表和容器吗?
  • @Sarz Nop,我昨天才知道 JTable 的存在所以我真的不知道什么时候执行这个?
  • "我尝试在model = new DefaultTableModel() 中添加此代码" - 你是如何添加的?您是否创建了DefaultTableModel 的子类?你真的更换了模型吗?最好发minimal reproducible example
  • 考虑提供一个可运行的示例来演示您的问题 - 它消除了大部分猜测工作
  • 我编辑了我的帖子。我没有给出整个代码,因为它与链接的代码完全相同,除了我解释的更改(为了尝试重命名列而进行的)。如果您仍然需要,我可以发布它,但我认为这不是必需的。

标签: java swing jtable


【解决方案1】:

如果您查看似乎已复制的代码,您会注意到使用了 2 个表:table 用于实际数据,headerTable 用于行标题。您更改的模型仅用于headerTable,因此不会影响您看到的列,因为这些列由table 提供。

我不会/不能评论为什么使用 2 个表(它仍然看起来很奇怪),所以我将只关注列名:将它们设置为 table

一种方法是提供您自己的表格模型,另一种可能是事后重新调整它们:

for( int i = 0; i < table.getColumnCount(); i++ ) {
  table.getColumnModel().getColumn( i ).setHeaderValue( "Column " + i );
}

【讨论】:

  • 感谢您的帮助,效果很好(后来我选择重命名列)。对于 2 个表,我认为有必要在我的行上有标题。如果您有更简短的解决方案,我会很高兴阅读!
  • @pioupiou1211 好吧,我可能会提供我自己的表格模型,其中包含我的数据以及作为第 0 列的行标题。然后我可能会像你的代码一样设置单元格和标题渲染器'一直在使用,但没有必要使用 2 个同步表。我没有时间提供完整的代码,但无论如何我可能不会这样做,毕竟你要自己学习一些东西,而 imo 的人如果自己尝试的话,学得最好:)
  • 非常感谢您的概述!它让我很好地知道该怎么做。如果我有时间回来,我会试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 2010-09-18
相关资源
最近更新 更多