Pintar linhas da JTable

4 respostas
igor_jua
Estou tentando pintar as linhas da minha JTable mas não estou obtendo resultados. Tenho uma classe que extende DefaultTableCellRenderer mas mesmo assim não funciona corretamente. O que acontece é que tudo que encontra-se abaixo das lihas pintadas não aparecem amenos que eu selecione suas celulas e ao fazer isto as linhas que estão acima das pintadas começam a desaparecer.
public class ImportTableRenderer extends DefaultTableCellRenderer {
       @Override
    public Component getTableCellRendererComponent(
            JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {
        ImportTableModel model = (ImportTableModel) table.getModel();
        Vector<Import> list = model.getTable();
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        if (row >= list.size()) {
            return this;
        }
        Import im = list.get(row);

        if (im.getEstado().toUpperCase().equals("GERADO") || im.getEstado().toUpperCase().equals("ASSOCIADO")) {
            c.setBackground(Color.RED);
            c.setForeground(Color.WHITE);
            //setValue(value);
            return c;
        } else {
            setBackground(null);
            setValue(value);
            return this;
        }

    }
}

//minha chamada na classe principal ficou assim:
for(int i=0;i<jTable1.getColumnCount();i++){
                        jTable1.getColumnModel().getColumn(i).setCellRenderer(new ImportTableRenderer());
                    }

4 Respostas

ViniGodoy

Não faltou setar o foreground no else? Senão a letra vai ficar branca. E o que é aquele setBackground(null) ali?

igor_jua

Eu vi em um outro tópico que o setBackground(null) tornaria a linha branca.
É realmente ficou faltando eu escrever o setForeground.
E era exatamente isto que ficou faltando para ele funcionar.
O problema agora é que ele esta gerando um java.lang.ArrayIndexOutOfBoundsException: 4 >= 3

Mas isto não é em nenhuma classe que eu implementei. Vou colar aqui o Stacktrace:

Marky.Vasconcelos

Cara, não usa DefaultTableModel não, veja na minha assinatura e na do Vini como se livrar disso.

igor_jua

Tipo, não estou utilizando o DefaultTableModel mas sim O DefaultTableColunmModel…pois tentei implementar um ColunmModel para a remoção de colunas e não obtive muito sucesso, no entanto com o DefaultTableColunmModel
ele deleta colunas numa boa…pelo menos até agora quando gerou essa exception.

O que devo fazer para corrigir?

Criado 18 de agosto de 2010
Ultima resposta 18 de ago. de 2010
Respostas 4
Participantes 3