Displaying an Icon in a Column Head of a JTable Component - Java Swing

Java examples for Swing:JTable Column

Description

Displaying an Icon in a Column Head of a JTable Component

Demo Code


import java.awt.Component;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;

public class Main {
  public static void main(String[] args) throws Exception {
    DefaultTableModel model = new DefaultTableModel();
    JTable table = new JTable(model);

    model.addColumn("Col1");
    model.addColumn("Col2");

    // Set the icon renderer on the second column
    table.getTableHeader().getColumnModel().getColumn(1)
        .setHeaderRenderer(new My());

    // Set the text and icon values on the second column for the icon render
    table.getColumnModel().getColumn(1)/*from w  w  w  . j  a  v a2  s.  c o  m*/
        .setHeaderValue(new TextAndIcon("Col2", new ImageIcon("icon.gif")));
  }
}// This class is used to hold the text and icon values
// used by the renderer that renders both text and icons

class TextAndIcon {
  TextAndIcon(String text, Icon icon) {
    this.text = text;
    this.icon = icon;
  }

  String text;
  Icon icon;
}

class My extends  DefaultTableCellRenderer {
  public Component getTableCellRendererComponent(JTable table,
      Object value, boolean isSelected, boolean hasFocus, int row,
      int column) {
    // Inherit the colors and font from the header component
    if (table != null) {
      JTableHeader header = table.getTableHeader();
      if (header != null) {
        setForeground(header.getForeground());
        setBackground(header.getBackground());
        setFont(header.getFont());
      }
    }

    if (value instanceof TextAndIcon) {
      setIcon(((TextAndIcon) value).icon);
      setText(((TextAndIcon) value).text);
    } else {
      setText((value == null) ? "" : value.toString());
      setIcon(null);
    }
    setBorder(UIManager.getBorder("TableHeader.cellBorder"));
    setHorizontalAlignment(JLabel.CENTER);
    return this;
  }
};

Related Tutorials