Estou tentando a algum tempo implementar uma Abstract Table model com algumas diferenças das outras que eu fiz.
Seguinte, tenho uma Lista de Questionarios (no BD), e uma Lista de datas (setadas pelo usuario), tendo isto, populo a Table de acordo com outra tabela de respostas, identificada por Questionario e Data (visto que é único pelas restrições).
Ocorre que, para teste deixo em branco algumas datas a serem exibidas, e, a principio as regras funcionam, porém, a tabela renderiza inclusive as celulas que deveriam estar vazias.
Meu Modelo:
public class AdesaoTableModel extends AbstractTableModel {
private List<Adesao_protocolo> lista_adesao = new ArrayList<>();
private List<Date> listaDatas = new ArrayList<>();
private List<Adesao_protocolo> itens = new ArrayList<>();
private List<Questionario> questionarios = new ArrayList<>();
public AdesaoTableModel() {
Configuracoes conf = new Configuracoes();
conf.setCon_id(1);
conf=new ConfiguracoesDAO().buscar(conf);
questionarios=new QuestionarioDAO().listar();
for(int i=0;i<questionarios.size();i++){
if(questionarios.get(i).getQue_id()==conf.getCon_que_flag()){
questionarios.remove(i);
}
}
listaDatas=new Execucoes().ListaDatasUteis(tf_Data_ini.getDate(),tf_Data_fim.getDate());
Adesao_protocolo ade = new Adesao_protocolo();
lista_adesao = new Adesao_protocoloDAO().ListaAdesao_UnidadePorData(tf_Data_ini.getDate(),tf_Data_fim.getDate(), (Unidade) CB_Unidade.getSelectedItem());
for(int i=0;i<lista_adesao.size();i++){
if(lista_adesao.get(i).getTipo()==1){
ade=lista_adesao.get(i);
itens.add(ade);
}
}
}
public int getRowCount() {
return questionarios.size();
}
public int getColumnCount() {
int col=new Execucoes().NumDiasUteisEntreDatas(tf_Data_ini.getDate(),tf_Data_fim.getDate());
if(filtro_pratica.isSelected()==true){
col=col+1;
}
return col+3;
}
@Override
public String getColumnName(int column) {
if(column==getColumnCount()-1){
return "Adesão Geral";
}
if (column == 0) {
return "Unidade";
} else if (column == 1) {
return "Protocolo";
}else if (column <= this.getColumnCount()-2) {
for(int i=2;i<this.getColumnCount();i++){
if(column==i){
return new Execucoes().FormataData(listaDatas.get(i-2));
}
}
}
return "";
}
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0 || columnIndex == 1 || columnIndex==getColumnCount()-1) {
return String.class;
}else {
return Image.class;
}
}
public Object getValueAt(int rowIndex, int columnIndex) {
Icon editar = null;
Unidade u = (Unidade) CB_Unidade.getSelectedItem();
Questionario q = questionarios.get(rowIndex);
int cont=0;
if (columnIndex == getColumnCount()-1) {
return "Total";
}else if (columnIndex<=getColumnCount()-2 && columnIndex>1) {
for(int i=0;i<itens.size();i++){
if(new Execucoes().FormataData(itens.get(i).getAde_data()).equals(getColumnName(columnIndex))==true && itens.get(i).getQuestionario().getQue_id()==q.getQue_id()){
cont++;
int adesao=itens.get(i).getAde_taxa();
if(adesao>80){
editar = new ImageIcon(getClass().getResource("/img/semRisco.png"));
return editar;
}else if(adesao>50 && adesao <80){
editar = new ImageIcon(getClass().getResource("/img/EmAlta.png"));
return editar;
}else{
editar = new ImageIcon(getClass().getResource("/img/vermelho.png"));
return editar;
}
}
}if(cont==0){return "Sem Coleta";}
}else if (columnIndex == 1) {
return q.getQue_nome();
}else if (columnIndex == 0) {
return u.getUni_descricao();
}
return "";
}
}
private void carregaTabela(){
int col=new Execucoes().NumDiasUteisEntreDatas(tf_Data_ini.getDate(),tf_Data_fim.getDate())+3;
model = new AdesaoTableModel();
jTable1.setModel(model);
//filtro = new TableRowSorter<>(model);
jTable1.setRowSorter(filtro);
TableColumnModel ColumnModel = jTable1.getColumnModel();
JTableRenderer renderer = new JTableRenderer();
for(int i=1;i<col;i++){
if(i>2 && i<col-1){
ColumnModel.getColumn(i).setCellRenderer(renderer);
}
}
}
Classe de renderização
public class JTableRenderer extends DefaultTableCellRenderer {
protected void setValue(Object value){
if (value instanceof ImageIcon){
if (value != null){
ImageIcon d = (ImageIcon) value;
setIcon(d);
} else{
setText("");
setIcon(null);
}
} else {
super.setValue(value);
}
}
}
Alguma Luz?