--------------------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
import javax.swing.JTable;
public class RowHeaderExample extends JFrame
{
  public RowHeaderExample()
  {
    super("aaaaaaaaa");
    setSize(500, 200);
    ListModel lm = new AbstractListModel()
    {
      String headers[] =
          {
          "a", "b", "c", "d", "e", "f","g","h","i","g"};      public int getSize()
      {
        return headers.length;
      }      public Object getElementAt(int index)
      {
        return headers[index];
      }
    };
    Object data[][] = new Object[10][6];
    String colname[] =
        {
        "1", "2", "3", "4", "5", "6"};
    DefaultTableModel dm = new DefaultTableModel(data, colname);
    BaseTable table = new BaseTable(dm);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    JList rowHeader = new JList(lm);
    rowHeader.setFixedCellWidth(50);
    rowHeader.setCellRenderer(new RowHeaderRenderer(table));
    JScrollPane scrol1 = new JScrollPane(table);
    scrol1.setRowHeaderView(rowHeader);
    getContentPane().add(scrol1, BorderLayout.CENTER);
    //color
    DefaultTableCellRenderer tcr = new DefaultTableCellRenderer()
    {
      public Component getTableCellRendererComponent(JTable table,
          Object value, boolean isSelected, boolean hasFocus,
          int row, int column)
      {        if (row % 2 == 0)
        {
          setBackground(Color.white);
        }
        else
          if (row % 2 == 1)
          {
            setBackground(new Color(206, 231, 255));          }
        return super.getTableCellRendererComponent(table, value,
            isSelected, hasFocus, row, column);
      }
    };    for (int i = 0; i < colname.length; i++)
    {
      table.getColumn(colname[i]).setCellRenderer(tcr);
    }    //checkbox
    for (int i = 0; i < 6; i++)
    {
      table.setJcheckBox(0, i);
    }    //combobox
    String aa[] =
        {
        "dd", "cc", "gg"};
    for (int j = 0; j < 6; j++)
    {
      table.setJcomboBox(3, j, aa);
    }
  }  public static void main(String[] args)
  {
    RowHeaderExample rowHeaderExample1 = new RowHeaderExample();
    rowHeaderExample1.show();
    rowHeaderExample1.addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
        System.exit(0);
      }
    });
  }
}class RowHeaderRenderer extends JLabel implements ListCellRenderer
{
  RowHeaderRenderer(JTable table)
  {
    JTableHeader header = table.getTableHeader();
    setOpaque(true);
    setBorder(UIManager.getBorder("TableHeader.cellBorder"));
    setHorizontalAlignment(CENTER);
    setForeground(header.getForeground());
    setBackground(header.getBackground());
    setFont(header.getFont());  }  public Component getListCellRendererComponent(JList list, Object value,
                                                int index, boolean isSelected,
                                                boolean cellHasFocus)
  {
    setText( (value == null) ? "" : value.toString());
    return this;
  }
}class BaseTable extends JTable
{
  public BaseTable()
  {
    super();
  }  public BaseTable(TableModel dm)
  {
    super(dm);
    this.setRowHeight(20);
    this.setFont(new java.awt.Font("Dialog", 0, 15));
    this.getTableHeader().setFont(new java.awt.Font("Dialog", 0, 12));
    this.getTableHeader().setReorderingAllowed(false);  }  public void setJcheckBox(int numRows, int numColumns)
  {
    this.getColumn(this.getModel().getColumnName(numColumns)).
        setCellRenderer(
        rowRenderer);
    this.getColumn(this.getModel().getColumnName(numColumns)).setCellEditor(
        rowEditor);
    DefaultCellEditor checkBoxEditor = new DefaultCellEditor(checkBox);    checkBox.setHorizontalAlignment(JLabel.CENTER);
    rowEditor.setEditorAt(numRows, checkBoxEditor);
    rowRenderer.add(numRows, checkBoxRenderer);
  }  public void setJcomboBox(int numRows, int numColumns,
                           String[] date)
  {
    JComboBox comboBox = new JComboBox(); //bu neng dong
    final int row1 = numRows;
    this.getColumn(this.getModel().getColumnName(numColumns)).
        setCellRenderer(
        rowRenderer);
    this.getColumn(this.getModel().getColumnName(numColumns)).setCellEditor(
        rowEditor);
    DefaultCellEditor checkBoxEditor = new DefaultCellEditor(checkBox);
    for (int i = 0; i < date.length; i++)
    {
      comboBox.addItem(date[i]);
    }
    DefaultCellEditor checkBoxEditor2 = new DefaultCellEditor(comboBox);
    rowEditor.setEditorAt(row1, checkBoxEditor2);
  }
  CheckBoxRenderer checkBoxRenderer = new CheckBoxRenderer();
  EachRowEditor rowEditor = new EachRowEditor(this);
  EachRowRenderer rowRenderer = new EachRowRenderer();
  JCheckBox checkBox = new JCheckBox();
}
把这几个类放在一个工程里 运行RowHeaderExample 就可以了
为什么表格颜色加不上?