Tenho um AbstractTableModel e gostaria de alterar linhas especificas de acordo com o resultado de minha consulta porem não sei como fazer o método de colorir a linha.
`public class TBControleServicos extends AbstractTableModel implements TableCellRenderer {
private static final long serialVersionUID = 1L;
/**
* Essa lista armazenará os objetos do tipo {@link Cliente} atualmente
* exibidos na tablela.
*/
private List<SaidaServicosAUX> veiculos;
public TBControleServicos(List<SaidaServicosAUX> saida) {
this();
veiculos.addAll(saida);
}
// ==============================================================
// Construtores.
// ==============================================================
/**
* Constutor que simplesmente instancia o nosso {@link List} que usaremos
* para guardar os valores.
*/
public TBControleServicos() {
// no construtor, instanciamos o List
veiculos = new ArrayList<SaidaServicosAUX>();
}
/**
* Criamos um construtor de conveniência para já popular a lista.
*
* @param lista
* a lista de clientes a ser adicionada.
*/
// ==============================================================
// Métodos implementados.
// ==============================================================
@Override
public Class<?> getColumnClass(int coluna) {
// todas as colunas representam uma String
return String.class;
}
public int getColumnCount() {
// esse método deve retornar o número de colunas. No caso, 3 (uma para o
// nome, uma para o sobrenome e uma para o apelido).
return 9;
}
private String dataFormatada(Date data1){
DateFormat formataData = new SimpleDateFormat("dd/MM/yyyy");
// Calendar c = Calendar.getInstance();
// c.add(Calendar.MONTH,10); adiciona mes
// c.add(Calendar.DAY_OF_WEEK,10);
String data = formataData.format( data1);
return data;
}
@Override
public String getColumnName(int coluna) {
// vamos retornar o nome de cada coluna
switch (coluna) {
case 0:
return "Data Saida"; // o nome da primeira coluna
case 1:
return "Portador"; // o nome da segunda
case 2:
return "OS"; // e o da terceira
case 3:
return "Loja";
case 4:
return "Lente";
case 5:
return "Laboratorio";
case 6:
return "Segue Lente";
case 7:
return"Data Prometida Cliente";
case 8:
return"Urgente";
default:
return ""; // isso nunca deve ocorrer, pois temos só 3 colunas
}
}
public int getRowCount() {
// retorna o número de linhas, ou seja, a quantidade de entradas na
// nossa lista.
return veiculos.size();
}
public Object getValueAt(int linha, int coluna) {
// vai retornar o valor de determinada célula. A linha representa a
// posição do Estado na nossa lista e a coluna vai ser: 1 - Id, 2 -
// Estado e 3 - Sigla
// primeiro vamos pegar o Estado da linha
SaidaServicosAUX e = veiculos.get(linha);
// façamos um switch
switch (coluna) {
case 0:
return dataFormatada((Date)e.getDataSaida()); // retornamos o ID
case 1:
return e.getPortador(); // retornamos o Estado
case 2:
return e.getOrdemServico(); // e a Sigla
case 3:
return e.getLoja(); // e a Sigla
case 4:
return e.getLente();
case 5:
return e.getLaboratorio();
case 6:
return e.getSegueLente();
case 7:
return dataFormatada((Date)e.getDataEntrega());
case 8:
return e.isUrgente();
default:
return null; // isso nunca deve ocorrer, pois temos só 3 colunas
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// nesse caso, todas as células são editáveis
return false;
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {
// aqui devemos atualizar o valor de nossos Estado
// vemos em qual linha ele está
SaidaServicosAUX c = veiculos.get(linha);
// e vemos o que será atualizado
switch (coluna) {
case 0:
c.setDataSaida(java.sql.Date.valueOf(valor.toString()));// mudamos o id
break;
case 1:
c.setPortador(valor.toString());
// mudamos o estado
break;
case 2:
c.setOrdemServico(valor.toString());
// e a sigla
break;
case 3:
c.setLoja( valor.toString());
case 4:
c.setLente(valor.toString());
case 5:
c.setLaboratorio(valor.toString());
case 6:
c.setSegueLente(valor.toString());
case 7:
c.setDataEntrega(java.sql.Date.valueOf(valor.toString()));
case 8:
c.setUrgente(Boolean.valueOf(valor.toString()));
}
// é importante notificar os listeners a cada alteração
fireTableDataChanged();
}
// ==============================================================
// Até aqui seria o mÃnimo necessário para um TableModel funcional, mas
// ainda não há métodos para adicionar, remover ou resgatar objetos. Vamos
// criá-los.
// ==============================================================
/**
* Adiciona um novo {@link Cliente} e notifica os listeners que um novo
* registro foi adicionado.
*/
public void adiciona(SaidaServicosAUX e) {
veiculos.add(e);
// informamos os listeners que a linha (size - 1) foi adicionada
fireTableRowsInserted(veiculos.size() - 1, veiculos.size() - 1);
}
/**
* Similar ao {@link #adiciona(Cliente)}, porém para remover. Recebe o
* Ãndice do cliente a ser removido. Se não souber o Ãndice, use o método
* {@link #getIndice(Cliente)} antes.
*/
public void remove(int indice) {
veiculos.remove(indice);
fireTableRowsDeleted(indice, indice);
}
/**
* Retorna o Ãndice de determinado cliente.
*/
public int getIndice(SaidaServicosAUX e) {
return veiculos.indexOf(e);
}
/**
* Adiciona todos os clientes na lista à este modelo.
*/
public void adicionaLista(List<SaidaServicosAUX> lista) {
int i = veiculos.size();
veiculos.addAll(lista);
fireTableRowsInserted(i, i + lista.size());
}
/**
* Esvazia a lista.
*/
public void limpaLista() {
int i = veiculos.size();
veiculos.clear();
fireTableRowsDeleted(0, i - 1);
}
public void ordenarPorNome() {
//ordena pelo nome
Collections.sort(veiculos, new Comparator<SaidaServicosAUX>() {
public int compare(SaidaServicosAUX o1, SaidaServicosAUX o2) {
return o1.getLaboratorio().compareTo(o2.getLaboratorio());
}
});
//avisa que a tabela foi alterada
fireTableDataChanged();
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
// TODO Auto-generated method stub
return null;
}
}`