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.
[code]/*
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;
}
}
[/code]
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);
}