Pessoal
Como relatei antes, estou postando o meu problema novamente pois da outra forma ficou muito longa a questão para acessar.
Estou tentando entender o q está acontecendo com a minha JTable e não estou conseguindo entender porque:
- Fiz uma lista de todos os registros do banco postgres. Ok tenho 58 registros
- Fiz uma lista da geração da TableMode com sysout . Ok tenho 58 registros.
- Fiz uma lista de saida da geração do PrecoDao. Ok tenho 58 registros.
- Na aplicação quando mostro o Relatório de Preços. Ok tenho 58 registros.
Quando mostro a aplicação na JTable só aparece 27 registros. Só que o JScrollPane está funcionando para baixo e para cima. Não sei se é problema do ScrollPane só vai até os 27 registros. O que será que está acontecendo?
Vou postar meu codigo da tablemodel, dao e o trecho da JTable abaixo:
A aplicação:
private void preencheTbm(){
PrecoDao dao = null ;
try {
dao = new PrecoDao();
PrecoTableModel minha = new PrecoTableModel(dao.listAll());
jTPreco.setModel(minha);
jTPreco.setPreferredSize(new java.awt.Dimension(800, 434));
defineRenderers();
int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER;
int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS;
JScrollPane scroller = new JScrollPane();
jScrollPane1.add(scroller);
jScrollPane1.setViewportView(jTPreco);
} catch (SQLException ex) {
Logger.getLogger(jIFPrecos.class.getName()).log(Level.SEVERE, null, ex);
}
try {
dao.closeConnection();
} catch (SQLException ex) {
Logger.getLogger(jIFPrecos.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public List<Preco> listAll() throws SQLException {
List<Preco> lista = new ArrayList<Preco>();
PreparedStatement stmt = getConnection().prepareStatement(
"SELECT "
+ " p.id idpreco, "
+ " p.idtipopreco idtipopreco, "
+ " p.idprotese idprotese, "
+ " p.valor preco, "
+ " tipopreco.descricao descricaotp, "
+ " protese.nome nomeprotese "
+ "FROM "
+ "preco p "
+ " INNER JOIN tipopreco ON (tipopreco.id = idtipopreco)"
+ " INNER JOIN Protese ON (Protese.id = idprotese)"
+ " ORDER BY 1"
+ ";" );
ResultSet rs = stmt.executeQuery();
while ( rs.next() ) {
Preco p = new Preco();
TipodePreco tp = new TipodePreco();
Protese pr = new Protese();
p.setIdtipopreco ( rs.getInt( "idtipopreco" ) );
p.setDescricao (rs.getString("descricaotp"));
p.setIdprotese ( rs.getInt( "idprotese" ) );
p.setNomeprotese( rs.getString("nomeprotese"));
p.setId ( rs.getInt( "idpreco" ) );
p.setPreco( rs.getBigDecimal( "preco" ) );
/* Aqui nesse print sai todos os 58 registro do banco
System.out.println(" Id. Tipopreco=" + (p.getIdtipopreco().toString()));
System.out.println(" Nome Tipo=" + (tp.getDescricao()));
System.out.println(" Id.Protese=" + (p.getIdprotese().toString()));
System.out.println("Nome Protese=" + (pr.getNome())); */
System.out.println(" Id.=" + (p.getId().toString()));
/* System.out.println("Preco=" + (p.getPreco())); */
lista.add( p );
}
rs.close();
stmt.close();
return lista;
}
public class PrecoTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
/* Lista de Preco que representam as linhas. */
private List<Preco> linhas;
/* Array de Strings com o nome das colunas. */
private String[] colunas = new String[]{
" Id.", "Tipo de Tabela ", "Id.", "Descrição da Prótese ", " Id.", " Valor "};
/* Cria um PrecoTableModel vazio. */
public PrecoTableModel() {
linhas = new ArrayList<Preco>();
}
/* Cria um PrecoTableModel carregado com
* a lista de Preco especificada. */
public PrecoTableModel(List<Preco> listaprecos) {
//System.out.println("passei na PrecoTableModel!");
this.linhas = new ArrayList<Preco>(listaprecos);
//System.out.println("linhas=" + linhas.size());
linhas = new ArrayList<Preco>(listaprecos);
for (Preco p: linhas){
/* Aqui quando emito o print sai os 58 registros
System.out.println(" Id. Tipopreco=" + (p.getIdtipopreco().toString()));
System.out.println(" Nome Tipo=" + (p.getDescricao()));
System.out.println(" Id.Protese=" + (p.getIdprotese().toString()));
System.out.println("Nome Protese=" + (p.getNomeprotese())); */
System.out.println(" Id.=" + (p.getId().toString()));
/* System.out.println("Preco=" + (p.getPreco())); */
}
}
/* Retorna a quantidade de colunas. */
@Override
public int getColumnCount() {
// Esta retornando o tamanho do array "colunas".
//System.out.println("tamanho da coluna=" +colunas.length);
return colunas.length;
}
/* Retorna a quantidade de linhas. */
@Override
public int getRowCount() {
// Retorna o tamanho da lista de Preco.
//System.out.println("linhas=" + linhas.size());
return linhas.size();
}
/* Retorna a quantidade de linhas. */
@Override
public String getColumnName(int columnIndex) {
// Retorna o conteudo do Array que possui o nome das colunas
//System.out.println("nome da coluna=" +colunas[columnIndex]);
return colunas[columnIndex];
}
;
/* Retorna a classe dos elementos da coluna especificada.
* Este método é usado pela JTable na hora de definir o editor da célula. */
@Override
public Class<?> getColumnClass(int columnIndex) {
// Retorna a classe referente a coluna especificada.
// Aqui é feito um switch para verificar qual é a coluna
// e retornar o tipo adequado. As colunas são as mesmas
// que foram especificadas no array "colunas".
switch (columnIndex) {
case 0: // Primeira coluna é o nome, que é uma String.
return Integer.class;
case 1: // Segunda coluna é o telefone, que também é uma String..
return String.class;
case 2: // Terceira coluna é a data de cadastro,
// apesar de ser do tipo Calendar,
// estou retornando Degerate por causa da formatação.
return Integer.class;
case 3: // Quarta coluna é a mensalidade, um double.
return String.class;
case 4: // Quarta coluna é a mensalidade, um double.
return Integer.class;
case 5: // Quarta coluna é a mensalidade, um double.
return Double.class;
default:
throw new IndexOutOfBoundsException("ERRO. Coluna fora do limite - ClassPreco!");
}
}
;
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Preco preco = linhas.get(rowIndex);
switch (columnIndex) {
// Seguindo o exemplo: "Tipo","Data de Cadastro", "Nome", "Idade"};
case 0:
return preco.getIdtipopreco();
case 1:
return preco.getDescricao();
case 2:
return preco.getIdprotese();
case 3:
return preco.getNomeprotese();
case 4:
return preco.getId();
case 5:
return preco.getPreco();
default:
// Isto não deveria acontecer...
throw new IndexOutOfBoundsException("Erro - columnIndex fora de limite GetPreco!");
}
}
@Override
//modifica na linha e coluna especificada
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Preco Preco = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado
switch (columnIndex) { // Seta o valor do campo respectivo
case 0:
// Preco.setGrupoPreco(aValue.toString());
case 1:
// Preco.setGrupoPreco(aValue.toString());
case 2:
// Preco.setId(aValue.toString());
case 3:
// Preco.setNome(aValue.toString());
case 4:
// Preco.setPrazo(aValue.toString());
case 5:
// Preco.setPrazo(aValue.toString());
default:
// Isto não deveria acontecer...
}
fireTableCellUpdated(rowIndex, columnIndex);
}
//modifica na linha especificada
public void setValueAt(Preco aValue, int rowIndex) {
Preco preco = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado
preco.setPreco(rowIndex);
fireTableCellUpdated(rowIndex, 5);
}
;
;
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public Preco getPreco(int indiceLinha) {
return linhas.get(indiceLinha);
}
/* Adiciona um registro. */
public void addPreco(Preco m) {
// Adiciona o registro.
linhas.add(m);
int ultimoIndice = getRowCount() - 1;
fireTableRowsInserted(ultimoIndice, ultimoIndice);
}
/* Remove a linha especificada. */
public void removePreco(int indiceLinha) {
linhas.remove(indiceLinha);
fireTableRowsDeleted(indiceLinha, indiceLinha);
}
/* Adiciona uma lista de Preco ao final dos registros. */
public void addListaDePreco(List<Preco> Preco) {
// Pega o tamanho antigo da tabela.
int tamanhoAntigo = getRowCount();
// Adiciona os registros.
linhas.addAll(Preco);
fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
}
/* Remove todos os registros. */
public void limpar() {
linhas.clear();
fireTableDataChanged();
}
/* Verifica se este table model esta vazio. */
public boolean isEmpty() {
return linhas.isEmpty();
}
public void setVisible(boolean b) {
}
}