Naruto
Julho 28, 2008, 6:14am
#1
bom dia… pessoal fiz uma classe seguindo um livro para poder mostrar dados do banco erm uma JTable…
ai fiz tudo de boa ai na JTable eo chamo a classe… e crio o select… porem na hora de mostrar os dos ma JTable so aparece o nome das colunas… por exemplo… no select esta assim : Select nome, cpf, rg from funcionario logo na JTable aparece as 3 colunas… com os nomes mais não os dados… aparentemente esta certo porque ele pega os nome das colunas no select…
o que sera que pode ser??
vlwwwwww
Pode postar o fonte aqui?
Naruto
Julho 28, 2008, 11:01am
#4
codigo é esse aqui
[code]package br.com.siscom.view;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.table.AbstractTableModel;
import br.com.siscom.dao.Conexao;
public class Tabela extends AbstractTableModel {
private Connection conexao;
private Statement statement;
private ResultSet resultset;
private ResultSetMetaData metadata;
private int linha;
private String query;
public Tabela(final String query) throws SQLException, ClassNotFoundException {
conexao = Conexao.getConnection();
statement = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
setQuery(query);
}
public Class getColumnClassName(final int column) {
try {
final String className = metadata.getColumnClassName(column + 1);
return Class.forName(className);
} catch (final Exception exception) {
exception.printStackTrace();
}
return Object.class;
}
public int getColumnCount() {
try {
return metadata.getColumnCount();
} catch (final SQLException sqlexception) {
sqlexception.printStackTrace();
}
return 0;
}
public String getColumnName(final int column) {
try {
return metadata.getColumnName(column + 1);
} catch (final SQLException sqlexception) {
sqlexception.printStackTrace();
}
return "";
}
protected void finalize() {
try {
statement.close();
conexao.close();
} catch (final SQLException sqlexception) {
sqlexception.printStackTrace();
}
}
public int intgetRowCount() {
return linha;
}
public Object getValueAt(final int row, final int column) {
try {
resultset.absolute(row + 1);
return resultset.getObject(column + 1);
} catch (final SQLException sqlexception) {
sqlexception.printStackTrace();
}
return "";
}
public void refresh() throws SQLException {
setQuery(query);
}
public void setQuery(final String qry) throws SQLException {
query = qry;
resultset = statement.executeQuery(qry);
metadata = resultset.getMetaData();
resultset.last();
linha = resultset.getRow();
fireTableStructureChanged();
}
public int getRowCount() {
// TODO Auto-generated method stub
return 0;
}
}
[/code]
ai ai no JTable eu chamo assim
[code]private JTable JTable = null;
private Tabela tabela;
private JTable getJTable() {
String query = “Select nome, cpf, rg from funcionario”;
try {
tabela = new Tabela(query);
} catch (ClassNotFoundException classNotfound) {
JOptionPane.showMessageDialog(null, "Driver não encontrado",
"Erro encontrado", JOptionPane.ERROR_MESSAGE);
} catch (SQLException sqlex) {
JOptionPane.showMessageDialog(null, "Erro na SQL",
"Erro encontrado", JOptionPane.ERROR_MESSAGE);
}
if (JTable == null) {
JTable = new JTable(tabela);
}
return JTable;
}[/code]
ai eu naum sei pq ele faz isso hehe
Naruto
Julho 28, 2008, 11:04am
#5
galeraaa desculpa ai resolvi a minha situaçãoo
vlww
era que eu fiz um erro no [code]# public int intgetRowCount() {
return linha; }
na verdade era no getRowCount…
vlwww
Naruto
Julho 28, 2008, 11:41am
#6
bom mais tem um porem… nesse aee quando eo chamo o o form com o JTable… gostaria de por titulos porque os titulos que sai é os que vem do select por exemplo… select nome, cpf, rg from funcionario… ai sai assim nome cpf rg gostaria de manipularo tamanho das colunas e os titulos e as fonts como faço isso??
Ratao
Julho 28, 2008, 12:01pm
#7
Cria um TableModel para você controlar melhor e estilizar a sua tabela.
Exemplo:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
Naruto
Julho 28, 2008, 12:22pm
#8
mas c eu fizer isso não vo ter que muda tudo que eu ja fiz???
naquela classe tabela???
Ratao
Julho 28, 2008, 12:43pm
#9
Tá certo, não tinha notado. Mas já tentou apelidar as colunas com o nome a qual você deseja?
Tipo assim:
SELECT nome as nome_cliente, cpf as CPF, rg as RG
FROM funcionario
Naruto
Julho 28, 2008, 12:54pm
#10
tentei ja mais parece que pega direto o nome que esta no banco mesmo
a
Faço minhas as palavras do Ratao.
Como eu já disse em outros tópicos, crie o seu próprio TableModel.
Ótimos tutoriais para isso:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472
Naruto
Julho 28, 2008, 3:52pm
#13
sim ok smais da forma que eu fiz… aquela classe não é a maneira correta de criar?
Você pode fazer o que o ratao sugeriu. Ou, você pode passar um array com o nome das colunas.
Normalmente, a gente não trabalha com SQL direto. As classes de negócio são instanciadas e são elas que aparecem no model. Os nomes de algumas colunas (daquelas que não adianta tirar por reflexão) são cadastradas manualmente mesmo.