Problemas ao visualizar dados em JTable

0 respostas
C
Construi uma Jtable para visualizar os dados de uma base acess. mas ocorre o seguinte erro.

Tenho 5 registros na base mas na ora de visualizar mostra somente o último.

A clase para criar os nós eu  peguei pronta como exemplo.

Segue fontes:

======Jtable ===========

mport java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;
import javax.swing.JButton;

import javax.swing.JTable;

import javax.swing.ListSelectionModel;

import javax.swing.ScrollPaneConstants;
public class FrameC extends javax.swing.JFrame {

public JButton bt_cancelar = new JButton(Fechar);

public JButton bt_eliminar = new JButton(Eliminar);

private javax.swing.JPanel bAdd;

private javax.swing.JPanel pnTable;

private javax.swing.JScrollPane scrollTable;

private javax.swing.JTable table;

String url = jdbcdbc:dbsample;

Connection con;

Statement stmt;

private static final long serialVersionUID = 1L;

public FrameC() {

try {

initComponents();

} catch(Exception ex) {

ex.printStackTrace();

}

}
private JTable initComponents() throws Exception {

bAdd = new javax.swing.JPanel();

pnTable = new javax.swing.JPanel();

scrollTable = new javax.swing.JScrollPane();

table = new javax.swing.JTable();
setTitle(Consulta Funcionários);

addWindowListener(new java.awt.event.WindowAdapter() {

public void windowClosing(java.awt.event.WindowEvent evt) {

}
});

bAdd.setLayout(null);

pnTable.setLayout(new java.awt.GridLayout(1, 0));

pnTable.setBorder(new javax.swing.border.TitledBorder(“Funcionários”));

try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

}catch (ClassNotFoundException e) {

System.err.print("ClassNotFoundException: ");

System.err.print(e.getMessage());

}

try {

con = DriverManager.getConnection(url, user, password);

stmt = con.createStatement();
}catch(SQLException ex){

System.err.print("SQLException: " + ex.getMessage());

}
ResultSet uprs = stmt.executeQuery(SELECT * FROM Funcionario);

while (uprs.next()){

String cod = uprs.getString(COD_FUNC);

String nome = uprs.getString(NOME_FUNC);

String email = uprs.getString(EMAIL);

String fone = uprs.getString(NUM_FONE);
ArrayList dados = new ArrayList();

String[] colunas = new String[] { Código,Nome,E-Mail,Telefone };

boolean [] edicao = {false, true};
// Alimenta as linhas de dados

dados.add(new String[] {cod,nome,email,fone});

SimpleTableModel modelo = new SimpleTableModel(dados, colunas, edicao);

JTable table = new JTable(modelo);

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

scrollTable.setViewportView(table);

scrollTable.setVerticalScrollBarPolicy(

ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

}

pnTable.add(scrollTable);

bAdd.add(pnTable);

pnTable.setBounds(10, 10, 370, 230);

bAdd.add(bt_cancelar);

bt_cancelar.setBounds(380, 215, 80, 23);

getContentPane().add(bAdd, java.awt.BorderLayout.CENTER);

bAdd.add(bt_eliminar);

bt_eliminar.setBounds(380, 180, 80, 23);

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-474)/2, (screenSize.height-283)/2, 474, 283);

bt_cancelar.addActionListener(new EventosControlFrameC(this));
return table;

}

}

===== fonte auxiliar para criar as linhas de dados=====

mport java.util.ArrayList;

import java.util.Iterator;

import javax.swing.table.AbstractTableModel;

/*

  • Created on 25/05/2004
  • To change the template for this generated file go to
  • Window>Preferences>Java>Code Generation>Code and Comments
    */

/**


  • Créditos : Bruno R. Lima

  • Construção: 25/05/2004
  • Classe que extende a AbstractTableModel.
  • Faz uma implementação do modelo de tabela para uma JTable
  • @author Bruno R. Lima
    */
    public class SimpleTableModel extends AbstractTableModel{
private ArrayList linhas = null;

private String [] colunas = null;

private boolean [] colsEdicao;

/**

  • Contrutor para a classe, recebendo os dados a serem exibidos
  • e as colunas que devem ser criadas.
  • @param dados
  • @param colunas
    */
    public SimpleTableModel(ArrayList dados, String[] colunas, boolean [] edicao){
    setLinhas(dados);
    setColunas(colunas);
    colsEdicao = edicao;
    }

/**

  • Retorna o numero de colunas no modelo
  • @see javax.swing.table.TableModel#getColumnCount()
    */
    public int getColumnCount() {return getColunas().length;}

/**

  • Retorna o numero de linhas existentes no modelo
  • @see javax.swing.table.TableModel#getRowCount()
    */
    public int getRowCount() {return getLinhas().size();}

/**

  • Obtem o valor na linha e coluna
  • @see javax.swing.table.TableModel#getValueAt(int, int)
    */
    public Object getValueAt(int rowIndex, int columnIndex) {
    // Obtem a linha, que é uma String []
    String [] linha = (String [])getLinhas().get(rowIndex);
    // Retorna o objeto que esta na coluna
    return linha[columnIndex];
    }
public String[] getColunas() {return colunas;}

public ArrayList getLinhas() {return linhas;}

public void setColunas(String[] strings) {colunas = strings;}

public void setLinhas(ArrayList list) {linhas = list;}

/**

  • Seta o valor na linha e coluna
  • @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
    /
    public void setValueAt(Object value, int row, int col){
    // Obtem a linha, que é uma String []
    String [] linha = (String [])getLinhas().get(row);
    // Altera o conteudo no indice da coluna passado
    linha[col] = (String)value;
    // dispara o evento de celula alterada
    fireTableCellUpdated(row,col);
    }
    /
    *
  • Retorna se a celula pode ser editada
  • @see javax.swing.table.TableModel#isCellEditable(int, int)
    */
    public boolean isCellEditable(int row, int col){
    return colsEdicao[col];
    }

/**

  • Adiciona o array na linha
    */
    public void addRow( String [] dadosLinha){
    getLinhas().add(dadosLinha);
    // Informa a jtable de que houve linhas incluidas no modelo
    // COmo adicionamos no final, pegamos o tamanho total do modelo
    // menos 1 para obter a linha incluida.
    int linha = getLinhas().size()-1;
    fireTableRowsInserted(linha,linha);
    return;
    }

/**

  • Remove a linha pelo indice informado
  • @param row
    */
    public void removeRow(int row){
    getLinhas().remove(0);
    // informa a jtable que houve dados deletados passando a
    // linha reovida
    fireTableRowsDeleted(row,row);
    }

/**

  • Remove a linha pelo valor da coluna informada
  • @param val
  • @param col
  • @return
    */
    public boolean removeRow(String val, int col){
    // obtem o iterator
    Iterator i = getLinhas().iterator();
    int linha = 0;
    // Faz um looping em cima das linhas
    while(i.hasNext()){
    // Obtem as colunas da linha atual
    String[] linhaCorrente = (String[])i.next();
    linha++;
    // compara o conteudo String da linha atual na coluna desejada
    // com o valor informado
    if( linhaCorrente[col].equals(val) ){
    getLinhas().remove(linha);
    // informa a jtable que houve dados deletados passando a
    // linha removida
    fireTableRowsDeleted(linha,linha);
    return true;
    }
    }
    // Nao encontrou nada
    return false;
    }

/**

  • Retorna o nome da coluna.
  • @see javax.swing.table.TableModel#getColumnName(int)
    */
    public String getColumnName(int col){
    return getColunas()[col];
    }

}

Criado 29 de junho de 2006
Respostas 0
Participantes 1