Alterar cores da célula da JTable Swing

Estou tentando me sentir confortável com JTables, TableModels, JTableHeaders, renderizadores etc. Estou tentando criar uma tabela fictícia simples (para fins de prática) que se parece com isso:

-    1    2   3
A    A1   A2  A3
B    B1   B2  B3
C    C1   C2  C3

Também quero que a célula B2 - e somente essa célula - tenha um plano de fundo azul (Color.BLUE) - todas as outras células podem ter a cor padrão do Swing que são atribuídas automaticament

Meu código está abaixo e baseia-se em inúmeros exemplos que encontrei neste site e na Internet em geral. Mas não estou obtendo os resultados desejados. Em vez disso, estou recebendo uma tabela assim:

A    A1   A2  A3
B    B1   B2  B3
C    C1   C2  C3

Observe que a primeira linha (o cabeçalho) não está lá. Além disso, com o código que listo abaixo, isso executa e define a cor detodo as células que colorem, não apenas a célula B2 que eu quer

O códig:

public class MyTable
{
    public static void main(String[] args)
    {
        String[][] data = getTableData();
        String[] cols = getTableCols();

        JFrame frame = magicallyCreateJFrame();     // I promise this works!
        MyRenderer myRenderer = new MyRenderer();   // See below

        DefaultTableModel defModel = new DefaultTableModel(data, cols);
        JTable myTable = new JTable(defModel);

        myTable.setDefaultRenderer(Object.class, myRenderer);

        frame.add(myTable);
        frame.pack();
        frame.setVisible(true);            
    }
}

public static String[] getTableCols()
{
    String cols =
    {
        "-",
        "1",
        "2",
        "3",
    };
}

public static String[][] getTableData()
{
    String[][] data =
    {
        {
            "A",
            "A1",
            "A2",
            "A3",
        },
        {
            "B",
            "B1",
            "B2",
            "B3",
        },
        {
            "C",
            "C1",
            "C2",
            "C3",
        },
    };

    return data;
}

E o quick-n-dirtyMyRenderer classe

public class MyRenderer extends DefaultTableCellRenderer  
{ 
    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(row == 2 && column == 2)
        c.setBackground(new java.awt.Color(0, 0, 255)); 

    return c; 
} 

} 

Além do fato de que este éhorríve codifica e quebra muitas técnicas e padrões do tipo "práticas recomendadas" (lembre-se de que é apenas algo com o qual estou brincando), Existe alguma coisa que eu estou fazendo aqui que seja flagrantemente óbvia? Por que não estou recebendo um cabeçalho da tabela (primeira linha "- 1 2 3")? Por que meu renderizador de célula padrão não está funcionando na célula B2 específica que estou especificando?

JTables parecem animais estranhos, bonitos e poderosos. Estou lentamente envolvendo minha mente em torno deles, mas estou engasgando com a implementação. Graças a qualquer um que possa ajudar!

questionAnswers(5)

yourAnswerToTheQuestion