Boas ppl,
Estou utilizando um JTable pra mostrar os dados de uma bd, porem esta-me dando um erro que nao consigo resolver:
Eu estou utilizando o NetBeans, e adiciono o JTable arrantando o control.
public void popularTabela()
{
try
{
Conexao cn = new Conexao();
cn.setUser(txtUser.getText().toString());
cn.setPass(txtPass.getText().toString());
String sql = "select * from "+txtTabela.getText().toString()+"";
cn.abrirConexao();
java.sql.Statement st = cn.getConn().createStatement();
ResultSet rs = st.executeQuery(sql);
String[] columnNames = {"a","b","c","d"};
int rowNum = 0;
int numColumns = 4;
Object[][] data = new Object[][]{};
DefaultTableModel model = new DefaultTableModel(data,columnNames);
if (rs != null) if rs == null, then there is no ResultSet to view
{
while ( rs.next() )
{
//O erro acontece por alguma coisa aqui
data[rowNum][0] = rs.getString(1);
data[rowNum][1] = rs.getString(3);
data[rowNum][2] = rs.getString(4);
data[rowNum][3] = rs.getString(8);
model.addRow(data);
rowNum++;
}
}
rs.close();
st.close();
cn.fecharConexao();
jt = new JTable(model);
jt.setAutoCreateColumnsFromModel(false);
jt.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_NEXT_COLUMN);
jt.setShowHorizontalLines(true);
jt.setGridColor(java.awt.SystemColor.control);
jt.setShowGrid(true);
jt.setModel(model);
jt.createDefaultColumnsFromModel();
JScrollPane jsp = new JScrollPane(jt);
getContentPane().add(jsp, BorderLayout.CENTER);
jt.setVisible(true);
}
catch(SQLException e)
{
e.printStackTrace();
}
}
O Erro que estou obtendo é: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
Vc nao esta difinindo o tamanho do array, por isso da o erro.
Faz o seguinte teste, define as dimensoes do array, tipo [numero de registros do ResultSet +1][5]
for (int i = 0; i < vTabela.size(); i++) {
Associado assoT = (Associado) vTabela.get(i);
Vector linha = new Vector();
linha.add(assoT.getCodAssociado());
linha.add(assoT.getNomeAssociado());
tabelaModelo.addRow(linha);
}
for (int i = 0; i < vTabela.size(); i++) {
Associado assoT = (Associado) vTabela.get(i);
Vector linha = new Vector();
linha.add(assoT.getCodAssociado());
linha.add(assoT.getNomeAssociado());
tabelaModelo.addRow(linha);
}
[/quote]
Vector? Argh!!!
Use:
List<Associado> linha = new ArrayList<Associado>();
ou então
List<Associado> linha = new LinkedList<Associado>();
victorwss qual a vantagem q vou ter com ArrayList ???
[quote=victorwss][quote=RobsonFagundes]por ex assim
for (int i = 0; i < vTabela.size(); i++) {
Associado assoT = (Associado) vTabela.get(i);
Vector linha = new Vector();
linha.add(assoT.getCodAssociado());
linha.add(assoT.getNomeAssociado());
tabelaModelo.addRow(linha);
}
[/quote]
Vector? Argh!!!
Use:
List<Associado> linha = new ArrayList<Associado>();
ou então
List<Associado> linha = new LinkedList<Associado>();[/quote]
[quote=RobsonFagundes]
victorwss qual a vantagem q vou ter com ArrayList ???
[/quote]
Desempenho principalmente. O Vector estava sendo criado com um escopo local a um método e nunca era compartilhado por várias Threads, logo a sincronização que ele tem é desnecessária. Eliminando-se esta sincronização se tem um grande aumento de desempenho.
Há outras questões também acerca de Vector e Hashtable que fazem com que elas sejam consideradas Collections legadas, e como legadas, é desencorajado o seu uso. Na verdade a Sun tem uma grande vontade de colocar @Deprecated nelas e esquecê-las para sempre, mas existem alguns poucos casos raros onde o uso de Vector ainda se justifica.
valeu ai victorwss pela dica
vou mudar maneira de preencher minhas tabelas, relatorios e talss…
Abraço
[quote=victorwss][quote=RobsonFagundes]
victorwss qual a vantagem q vou ter com ArrayList ???
[/quote]
Desempenho principalmente. O Vector estava sendo criado com um escopo local a um método e nunca era compartilhado por várias Threads, logo a sincronização que ele tem é desnecessária. Eliminando-se esta sincronização se tem um grande aumento de desempenho.
Há outras questões também acerca de Vector e Hashtable que fazem com que elas sejam consideradas Collections legadas, e como legadas, é desencorajado o seu uso. Na verdade a Sun tem uma grande vontade de colocar @Deprecated nelas e esquecê-las para sempre, mas existem alguns poucos casos raros onde o uso de Vector ainda se justifica.[/quote]
Eu também durante muito tempo usei o “Vector” para várias tarefas, mas já vi muitos comentários, lições ou dicas dizendo que melhor usar outras opções, como arrayList , list pelo desempenho proporcionado… também estou mudando minha visão sobre o Vector