Como eu faço para setar a cor de uma linha numa tabela JTable

7 respostas
renatotn7

olá

como eu faço isso?

7 Respostas

brlima

utilizando CellRenderer (google).

marcosbrandao

Da uma olhada na classe DefaultTableCellRenderer. Com da pra fazer isto.

renatotn7

Alguem tem algum exemplo?

cleiton_herrmann

Olá renatotn7…

Eu demorei mas consegui achar uma classe que faz isso no google, porém até hj não saquei muito bem como ela funciona, esse negócio de DefaultTableCellRenderer é meio chatinho, mas eu coloquei ela no meu sistema e ta funcionando…

caso vc ainda não tenha conseguido fazer isso, eu posso te passar, é só pedir ai…

flw t+

renatotn7

pow eu ainda não consegui setar a cor… alguem mais poderia me ajudar com algum exemplo?

cleiton_herrmann

Olá renatotn7, vou postar um código aqui que acho que vai resolver teu problema…

A classe abaixo é a responsável por pintar a célula, simplesmente crie uma classe com o mesmo nome da classe abaixo e jogue esse código dentro dela, ou troque o nome se preferir, ou se precisar, adapte o código as suas necessidades, mais eu acho que não vai ser necessário…

import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class PintarLinhasTabela extends DefaultTableCellRenderer {

    private Map _cores = new HashMap();

    private Point _tempCel = new Point(0, 0);

    private Color _defaultBG;

    public PintarLinhasTabela() {
        this._defaultBG = getBackground();
    }

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

        this._tempCel.x = row;
        this._tempCel.y = column;
        if (this._cores.containsKey(this._tempCel)) {
            c.setBackground((Color) this._cores.get(this._tempCel));
        } else {
            c.setBackground(this._defaultBG);
        }

        return c;
    }

    public void colorirCelula(int row, int col, Color cor) {
        this._cores.put(new Point(row, col), cor);
    }
    
}

como no meu caso eu sempre pinto a ultima linha inserida na tabela, eu faço assim, eu pego a posição da ultima linha inserida, na primeria linha de código abaixo, depois uso o objeto renderer que é do tipo PintalLinhasTabela, que está declarado global na classe onde eu tenho a tabela, que é a classe capaz de pintar, então eu uso ele e o método colorirCelula, passando o index da ultima linha que eu adicionei, a coluna e a cor, como eu tenho 7 colunas na tabela, e na verdade não se pinta a linha, se pinta a célula, então eu uso um laço para pintar todas as células da ultima linha que foi adicionada…

int ultimaLinha = modeloTabela.getRowCount() - 1;
for (int i = 0; i < 6; i++) {
    renderer.colorirCelula(ultimaLinha, i, Color.orange);
}

//declarações globais da sua classe
private PintarLinhasTabela renderer = new PintarLinhasTabela();

qualquer dúvida posta ai, se eu souber ajudar…

flw t+

R

Maravilha!!!

mas acabo perdendo o alinhamento horizontal definido anteriormente,
e se seto o alinhamento de uma coluna acaba setando para todas.
como resolvo isso???

column = tbVendas1.getColumnModel().getColumn(c); 
renderer.colorirCelula(i, c, Color.lightGray);
column.setCellRenderer(renderer); 
                                
column = tbVendas1.getColumnModel().getColumn(1);
renderer.setHorizontalAlignment(SwingConstants.LEFT);
column.setCellRenderer(renderer);
Criado 2 de fevereiro de 2007
Ultima resposta 15 de dez. de 2008
Respostas 7
Participantes 5