Изменение цвета ячеек Swing JTable

Я пытаюсь освоиться с 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;
}

И класс quick-n-dirty 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 кажутся странными,красивые и могущественные звери. Я медленно обдумываю их, но задыхаюсь от реализации. Спасибо всем, кто может помочь!

5
задан IAmYourFaja 24 August 2011 в 20:28
поделиться