重命名自定义JTable的列 - Java

时间:2017-04-05 07:28:06

标签: java swing jtable

我正在将此代码用于我的应用程序: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";
        }


    };

1 个答案:

答案 0 :(得分:2)

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

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

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

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