javaswing

column header not changing untill i click on it


I have a jtable, its header has a pop up menu from which you can change the header, but the changes are not being visible until I click on the header. Please help

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class MyCustomHeaderRender extends DefaultTableCellRenderer {
String columnNameToChange;
int columnHeaderClicked;

public MyCustomHeaderRender (String nameReceived, int column) {
    NameToChange = nameReceived;  
    HeaderClicked = column;     
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
        int row, int column) {

    Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    if (columnHeaderClicked == column) {
        setOpaque(true);
        table.getColumnModel().getColumn(columnHeaderClicked).setHeaderValue(colmNameToChange);
        table.getTableHeader().repaint();
        table.repaint();
    }

    return c;
}
}

Solution

  • A renderer has nothing to do with changing the text of the column. It only paints the text of the column. So get rid of the renderer.

    Instead you need to actually update the TableColumn to contain the new column name.

    So the code would be something like:

    TableColumnModel tcm = table.getColumnModel();
    TableColumn tc = tcm.getColumn(...);
    tc.setHeaderValue(...);
    table.getTableHeader().repaint();