Problema com lista muito grande

0 respostas
S

Olá! tenho uma aplicação em desenvolvimento usando netbeans+toplink+postgres, sendo que separei a estrutura em controle modelo e visao. Tenho uma listagem enorme com 28.000 registros puxados de um bean, jogo a listagem completa pra dentro de um jtable por intermédio de uma tablemodel e Decorators implementadas, mas porém como é uma lista muito grande ela nao fumega na jtable, no netbeans roda tranqulio, mas rodando independente acontece isso. Nao sei se é heap ou outra coisa, ja tive este problema no inicio e aparentemente tinha solucionado com os decorators. Segue abaixo os codigos.

package Controller.Dao;   
  
import Controller.Formatter.FormataData;   
import Modelo.Bean.Tbunimedlages;   
import Modelo.Decorator.UnimedDecorator;   
import java.util.ArrayList;   
import java.util.List;   
import javax.persistence.Query;   
  
public class UnimedDAO extends GenericDAO{   
  
    public UnimedDAO() {   
    }   
    FormataData data = new FormataData();   
  
    public List<UnimedDecorator> getAllUnimedDecorators() {   
  
        Query query = getEntityManager().createQuery("SELECT t FROM Tbunimedlages t ORDER BY t.idproduni");   
        List<Tbunimedlages> lo = query.getResultList();   
  
        List<UnimedDecorator> listDecorators = new ArrayList<UnimedDecorator>();   
         for(Tbunimedlages t:lo){   
               
            UnimedDecorator dc= new UnimedDecorator();   
            dc.setCodproduni(lo.get(i).getCodproduni());   
            dc.setIdproduni(lo.get(i).getIdproduni());   
            dc.setNomeapresuni(lo.get(i).getNomeapresuni());   
            dc.setNomecomeruni(lo.get(i).getNomecomeruni());   
            dc.setNomelabuni(lo.get(i).getNomelabuni());   
            dc.setQtdfrauni(String.valueOf(lo.get(i).getQtdfrauni()));   
            dc.setUnidadeuni(lo.get(i).getUnidadeuni());   
            dc.setVlrbraspfuni(lo.get(i).getVlrbraspfuni());   
            dc.setVlrbraspmcuni(lo.get(i).getVlrbraspmcuni());   
            dc.setVlrsimprouni(lo.get(i).getVlrsimprouni());   
            dc.setTipoproduni(lo.get(i).getTipoproduni());   
  
            listDecorators.add(dc);   
  
        }   
        return listDecorators;   
    }   
  
}
package Controller.TableModel;   
  
import Modelo.Decorator.UnimedDecorator;   
import java.math.BigDecimal;   
import java.math.RoundingMode;   
import java.util.ArrayList;   
import java.util.List;   
import javax.swing.table.AbstractTableModel;   
  
public class UnimedTableModel extends AbstractTableModel{   
  
    private static final long serialVersionUID = 1L;   
  
       
    private List<UnimedDecorator> unimed;   
  
    public UnimedTableModel() {   
        // no construtor, instanciamos o List   
        unimed = new ArrayList<UnimedDecorator>();   
    }   
  
       
    public UnimedTableModel(List<UnimedDecorator> lista) {   
        this();   
        unimed.addAll(lista);   
    }   
  
        public void zeraUnimed(){   
            unimed = new ArrayList<UnimedDecorator>();   
        }   
  
  
    @Override   
    public Class<?> getColumnClass(int coluna) {   
        // todas as colunas representam uma String   
        return String.class;   
    }   
  
    @Override   
    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 11;   
    }   
  
    @Override   
    public String getColumnName(int coluna) {   
           
        switch (coluna) {   
        case 0:   
            return "Código"; // o nome da primeira coluna   
        case 1:   
            return "Cód.Produto"; // o nome da segunda   
        case 2:   
            return "Descrição Comercial"; // e o da terceira   
                case 3:   
            return "Descrição Apresentação"; // e o da terceira   
                case 4:   
            return "Laboratório"; // e o da terceira   
                case 5:   
            return "Unidade"; // e o da terceira   
                case 6:   
            return "Qtd.Frac."; // e o da terceira   
                case 7:   
            return "Valor Simpro";   
                case 8:   
             return "Valor BrasÍndice PF";   
                case 9:   
            return "Valor BrasIndice PMC";   
                case 10:   
                        return "Tipo de Produto";   
        default:   
            return "";      }   
    }   
  
    @Override   
    public int getRowCount() {   
           
        return unimed.size();   
    }   
  
    @Override   
    public Object getValueAt(int linha, int coluna) {   
           
        UnimedDecorator c = unimed.get(linha);   
           
        switch (coluna) {   
        case 0:   
            return c.getIdproduni();   
        case 1:   
            return c.getCodproduni();   
        case 2:   
            return c.getNomecomeruni();   
                case 3:   
            return c.getNomeapresuni();   
                case 4:   
            return c.getNomelabuni();   
                case 5:   
            return c.getUnidadeuni();   
                case 6:   
            return c.getQtdfrauni();   
                case 7:   
            return c.getVlrsimprouni();   
                case 8:   
            return c.getVlrbraspfuni();   
                case 9:   
            return c.getVlrbraspmcuni();   
                case 10:   
            return c.getTipoproduni();   
        default:   
            return null;   
        }   
    }   
  
    @Override   
    public boolean isCellEditable(int rowIndex, int columnIndex) {   
           
        return false;   
    }   
  
    @Override   
    public void setValueAt(Object valor, int linha, int coluna) {   
           
        UnimedDecorator c = unimed.get(linha);   
           
        switch (coluna) {   
        case 0:   
            c.setIdproduni(Long.parseLong(valor.toString())); // mudamos o nome   
            break;   
        case 1:   
            c.setCodproduni(valor.toString()); // mudamos o sobrenome   
            break;   
        case 2:   
            c.setNomecomeruni(valor.toString()); // e o apelido   
            break;   
                case 3:   
            c.setNomeapresuni(valor.toString()); // e o apelido   
            break;   
                case 4:   
            c.setNomelabuni(valor.toString()); // e o apelido   
            break;   
                case 5:   
            c.setUnidadeuni(valor.toString()); // e o apelido   
            break;   
                case 6:   
            c.setQtdfrauni(valor.toString()); // e o apelido   
            break;   
                case 7:   
            c.setVlrsimprouni(BigDecimal.valueOf(Double.parseDouble(valor.toString())));   
            break;   
                case 8:   
            c.setVlrbraspfuni(BigDecimal.valueOf(Double.parseDouble(valor.toString())));   
            break;   
                case 9:   
            c.setVlrbraspmcuni(BigDecimal.valueOf(Double.parseDouble(valor.toString())));   
            break;   
                case 10:   
            c.setTipoproduni(valor.toString());   
            break;   
        }   
           
        fireTableDataChanged();   
    }   
  
       
       
    public void adiciona(UnimedDecorator c) {   
        unimed.add(c);   
           
        fireTableRowsInserted(unimed.size() - 1, unimed.size() - 1);   
    }   
  
       
    public void remove(int indice) {   
        unimed.remove(indice);   
        fireTableRowsDeleted(indice, indice);   
    }   
  
       
    public int getIndice(UnimedDecorator c) {   
        return unimed.indexOf(c);   
    }   
  
       
    public void adicionaLista(List<UnimedDecorator> lista) {   
                this.zeraUnimed();   
        int i = unimed.size();   
        unimed.addAll(lista);   
        fireTableRowsInserted(i, i + lista.size());   
    }   
  
       
    public void limpaLista() {   
        int i = unimed.size();   
        unimed.clear();   
        fireTableRowsDeleted(0, i - 1);   
  
                unimed = new ArrayList<UnimedDecorator>();   
    }   
}

Este pedaço popula a jtable, alias esta vindo em branco.

/*monta os dados no grid*/   
    private void setMontaTbUnimed(){   
  
        JTableUnimedLages.removeAll();   
        unitm.removeTableModelListener(JTableUnimedLages);   
        // aqui está a grande jogada!   
        //ctm.addTableModelListener(this);   
        unitm.adicionaLista(getUnimedControl().getAllUnimedControl());   
  
        JTableUnimedLages.getColumnModel().getColumn(0).setPreferredWidth(80);   
        JTableUnimedLages.getColumnModel().getColumn(1).setPreferredWidth(80);   
        JTableUnimedLages.getColumnModel().getColumn(2).setPreferredWidth(500);   
        JTableUnimedLages.getColumnModel().getColumn(3).setPreferredWidth(500);   
        JTableUnimedLages.getColumnModel().getColumn(4).setPreferredWidth(300);   
        JTableUnimedLages.getColumnModel().getColumn(5).setPreferredWidth(80);   
        JTableUnimedLages.getColumnModel().getColumn(6).setPreferredWidth(80);   
        JTableUnimedLages.getColumnModel().getColumn(7).setPreferredWidth(120);   
        JTableUnimedLages.getColumnModel().getColumn(8).setPreferredWidth(120);   
        JTableUnimedLages.getColumnModel().getColumn(9).setPreferredWidth(120);   
        JTableUnimedLages.getColumnModel().getColumn(10).setPreferredWidth(120);   
      //desabilitar auto resizeE   
        this.JTableUnimedLages.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);   
        this.JTableUnimedLages.setRowHeight(25);   
  
      //tipo zero = seleção única   
      this.JTableUnimedLages.setSelectionMode(0);   
  
    }
Criado 1 de setembro de 2011
Respostas 0
Participantes 1