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 já 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];
}
}