JTable

13 respostas
Naruto

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

13 Respostas

malves_info

Pode postar o fonte aqui?

Ratao

Posta seu código ai.

Naruto

codigo é esse aqui

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;
	}
}

ai ai no JTable eu chamo assim

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;
	}

ai eu naum sei pq ele faz isso hehe :/

Naruto

galeraaa desculpa ai resolvi a minha situaçãoo
:D
vlww
era que eu fiz um erro no [code]# public int intgetRowCount() {
return linha; }

na verdade era no getRowCount...
vlwww

Naruto

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

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

mas c eu fizer isso não vo ter que muda tudo que eu ja fiz???
naquela classe tabela???

Ratao

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

tentei ja mais parece que pega direto o nome que esta no banco mesmo
:confused:
a

Naruto

alguem?

ViniGodoy

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

sim ok smais da forma que eu fiz… aquela classe não é a maneira correta de criar?

ViniGodoy

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.

Criado 28 de julho de 2008
Ultima resposta 28 de jul. de 2008
Respostas 13
Participantes 4