пример здесь

аюсь освоиться с JTables, TableModels, JTableHeaders, рендерерами и т. Д. Я пытаюсь создать простую фиктивную таблицу (для практических целей), которая выглядит следующим образом:

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

Я также хочу, чтобы ячейка B2 - и только эта ячейка - имела синий фон (Color.BLUE) - все остальные ячейки могут иметь цвет по умолчанию Swing, который они назначают автоматически.

Мой код приведен ниже и основан на бесчисленных примерах, которые я нашел на этом сайте и в Интернете в целом. Но я не получаю желаемых результатов. Вместо этого я получаю таблицу, которая выглядит следующим образом:

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

Обратите внимание, что первая строка (заголовок) вообще отсутствует. Кроме того, с помощью приведенного ниже кода, он выполняется и устанавливает цветвсе клетки, которые окрашивают, а не только ячейку B2, которую я хочу.

Код:

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;
}

И быстрый-н-грязныйMyRenderer класс:

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; 
} 

} 

Помимо того, что этокакой ужас кодировать и ломать множество шаблонов и техник типа «лучших практик» (помните, что я просто играю с этим),Есть ли что-нибудь, что я делаю здесь, что очевидно?? Почему я не получаю заголовок таблицы (первая строка "- 1 2 3")? Почему мой рендерер ячеек по умолчанию не работает с указанной ячейкой B2?

JTables кажутся странными, красивыми и могущественными животными. Я медленно оборачиваюсь вокруг них, но задыхаюсь от реализации. Спасибо всем, кто может помочь!

Ответы на вопрос(1)

Ваш ответ на вопрос