Eae pessoal, estou com problema que esta bem difícil de eu resolver, tenho uma tabela onde aparecem os equipamentos locados, e eu quero pintar as linhas da tabela de acordo com o status do equipamento, por exemplo: se o status do equipamento for locado a linha tem que ser azul, se estiver na manutenção a linha tem que ficar vermelha e assim por diante… Até achei alguns tópicos aqui no GUJ que até me deu uma ajudada mas nenhum solucionou o meu problema, só pra constar eu populo minha JTable com um Table Model e puxo os dados de uma base de dados.
Segue os códigos:
Table Model:
public class TableTelaPrincipal extends AbstractTableModel{
BeansTelaPrincipal beanstp = new BeansTelaPrincipal();
ConexaoBD conex = new ConexaoBD();
private final List<BeansTelaPrincipal> dados = new ArrayList<>();
private final String[] colunas = {"ID Locação","Equipamento","Código","Num. de Série", "Status",
"Fisioterapeuta", "Paciente", "Responsavel", "Data inicial",
"Valor da Locação"};
@Override
public String getColumnName(int column) {
return colunas[column];
}
@Override
public int getRowCount() {
return dados.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
public List<BeansTelaPrincipal> read(){
conex.conectar();
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = conex.con.prepareStatement(TelaPrincipal.Select); // Aqui eu puxo o comando SQL do botão que carrega a tabela
rs = stmt.executeQuery();
while (rs.next()){
BeansTelaPrincipal beans = new BeansTelaPrincipal();
beans.setCodlocacao(rs.getInt("l.codlocacao"));
beans.setEquipamento(rs.getString("e.nome"));
beans.setCodigo(rs.getString("e.codinterno"));
beans.setNumserie(rs.getString("e.numeroserie"));
beans.setStatus(rs.getString("l.statusequip"));
beans.setFisio(rs.getString("l.fisio"));
beans.setPaciente(rs.getString("p.nome"));
beans.setResponsavel(rs.getString("p.nomeresponsavel"));
beans.setDatainicial(rs.getString("l.datainicial"));
beans.setValor(rs.getString("l.valorlocacao"));
dados.add(beans);
this.fireTableDataChanged();
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao preencher Tabela.\n Erro:"+ex);
}
conex.desconetar();
return null;
}
public List<BeansTelaPrincipal> clear(){
dados.clear();
return null;
}
@Override
public Object getValueAt(int linha, int coluna) {
BeansTelaPrincipal tp = dados.get(linha);
switch (coluna){
case 0:
return dados.get(linha).getCodlocacao();
case 1:
return dados.get(linha).getEquipamento();
case 2:
return dados.get(linha).getCodigo();
case 3:
return dados.get(linha).getNumserie();
case 4:
return dados.get(linha).getStatus();
case 5:
return dados.get(linha).getFisio();
case 6:
return dados.get(linha).getPaciente();
case 7:
return dados.get(linha).getResponsavel();
case 8:
return dados.get(linha).getDatainicial();
case 9:
return dados.get(linha).getValor();
}
dados.set(linha, tp);
fireTableRowsUpdated(linha, linha);
return null;
}
public BeansTelaPrincipal getBeansTelaPrincipal (int linha){
return dados.get(linha);
}
}
Botão que carrega a tabela:
public static String Select = null;
private void btnCarregarActionPerformed(java.awt.event.ActionEvent evt) {
TabelaLocacao.removeAll();
Select = ("select l.codlocacao, e.nome, e.codinterno, e.numeroserie, l.statusequip, l.fisio, p.nome,"
+ " p.nomeresponsavel, l.datainicial, l.valorlocacao"
+ " from locacao l "
+ "join equipamento e "
+ "on l.codequip = e.codequip"
+ " join paciente p "
+ "on l.codpaciente = p.codpaciente"
+ " where e.tipoequipamento = '"+slctTipoequip.getSelectedItem()+"' ");
// + " order by '"+order+"' ASC ");
tabletp.clear();
tabletp.read();
TabelaLocacao.setDefaultRenderer(String.class, new TableRenderer()); }
Table Cell Renderer que eu tentei implementar:
(Eu não entendo muito esse código eu fiz ele com base em um tópico aqui do GUJ)
public class TableRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
BeansTelaPrincipal bt =((TableTelaPrincipal) table.getModel()).getBeansTelaPrincipal(row);
JLabel c = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setOpaque(true);
if(bt.getStatus().equals("Locado")){
c.setBackground(Color.blue);
} else if (bt.getStatus().equals("Aguardando retirada")){
c.setBackground(Color.yellow);
} else if (bt.getStatus().equals("Manutenção")){
c.setBackground(Color.red);
}
return c;
}
}