JTable- Как изменить шрифт для заголовка определенного столбца

Я хочу изменить шрифт заголовка выбранного столбца на JTable. Я попытался сделать это на своем ColumnHeaderRenderer следующим образом:

public class ColumnHeaderRenderer extends JLabel implements TableCellRenderer {

public ColumnHeaderRenderer(JTable table) {
    JTableHeader header = table.getTableHeader();
    setOpaque(true);
    setBorder(BorderFactory.createEtchedBorder());
    setHorizontalAlignment(CENTER);
    setForeground(header.getForeground());
    setBackground(header.getBackground());
    setFont(header.getFont());
    setPreferredSize(new Dimension(0, 25));

}

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

    Color bg = UIManager.getColor("TableHeader.background");
    int selectedColumn = table.getSelectedColumn();
    if (selectedColumn == column){
        bg = new Color(107, 142, 35);
        setFont(getFont().deriveFont(Font.BOLD));// !!!!trying to do it here!!!!
    }
    setBackground(bg);
    setText(value.toString());
    return this;
}

}

Но в результате меняется шрифт всех заголовков столбцов. Так как же изменить его только для выбранного столбца?


person blackbishop    schedule 30.12.2013    source источник


Ответы (1)


Вам нужно сбросить значения

if (selectedColumn == column){
    bg = new Color(107, 142, 35);
    setFont(getFont().deriveFont(Font.BOLD));// !!!!trying to do it here!!!!
} else {
    setFont(UIManager.getFont("TableHeader.font"));
}

Рендеры — это общий ресурс, поэтому все заголовки используют один и тот же рендер. Это означает, что если вы измените состояние рендерера от одного прохода к другому, следующий элемент, визуализируемый при рендеринге, получит все свойства, которые вы использовали ранее...

person MadProgrammer    schedule 30.12.2013
comment
+1, вчера я проголосовал, но не заметил, что вы достигли отметки в 100 тысяч. Поздравляю :) - person camickr; 01.01.2014
comment
@camickr Спасибо, правда устал смотреть 99,8 :P - person MadProgrammer; 01.01.2014