JTable окрашивает каждую ячейку, когда я хочу, чтобы она окрашивала только определенные ячейки - PullRequest
0 голосов
/ 28 ноября 2018
private class ColorRenderer extends DefaultTableCellRenderer
{           
    String[][] data;    

    public ColorRenderer(String[][] data)
    {
        this.data = new String[data.length][data[0].length];

        for(int i = 0; i < data.length; i++)
        {
            for(int g = 0; g < data[0].length; g++)
            {
                this.data[i][g] = data[i][g];       
            }
        }

    }       

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col)
    {
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);            

        if(row < data.length - 3 && data[row][col].equals(""))
        {               
            c.setBackground(Color.LIGHT_GRAY);
        }

        return c;
    }       
}   

data - это массив данных, который заполняет таблицу JTable.Таблица в основном полна строк, но содержит несколько пустых строк.Я хочу закрасить ячейки, в которых есть только пустые строки, но не последние три строки.

По какой-то причине в настоящее время в моей таблице происходит беспорядочная раскраска, почему?

1 Ответ

0 голосов
/ 28 ноября 2018

В переопределении DefaultTableCellRenderer.getTableCellRendererComponent добавьте часть else после оператора if:

if(row < data.length - 3 && data[row][col].equals(""))
    c.setBackground(Color.LIGHT_GRAY);
else 
    c.setBackground(table.getBackground());

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...