Como chamar uma class apartir de outra class?

3 respostas
tiagomac

Olá, essa é uma dúvida bem simples e não sei nem se a pergunta ficou correta, vou explicar o que to querendo fazer e exibir o código para tornar mais claro para uma ajuda.

então, eu to querendo criar uma JTable que sera povoada com os dados de um jdbc, fiz de um jeito que deu certo, mas to usando esse outro modo agora e to me batendo um pouco ainda com uma questão simples:

aqui vai o código do rdb.java:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;



public class rdb {
	//		Connect to the Database
	public class UserDatabase{

		public Connection conectadb() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
			String user = "usuario";
			String pswd = "password";
			String driver = "com.mysql.jdbc.Driver";
			String url = "jdbc:mysql://localhost/" + user;
			Class.forName(driver);
			Connection con = DriverManager.getConnection(url, user, pswd);
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			return con;
		}

		public UserDatabase() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
			Vector columnNames = new Vector();
			Vector data = new Vector();
			//  Read data from a table
			String sql = "SELECT * FROM catcds";
			Statement stmt = conectadb().createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			ResultSetMetaData rsmd = rs.getMetaData();
			int columns = rsmd.getColumnCount();
			//  Get column names
			for (int i = 1; i <= columns; i++) {
				columnNames.addElement(rsmd.getColumnName(i));
			}
			//  Get row data
			while (rs.next()) {
				Vector row = new Vector(columns);
				for (int i = 1; i <= columns; i++) {
					row.addElement(rs.getObject(i));
				}
				data.addElement(row);
			}
			rs.close();
			stmt.close();
		}
	}
}
esse código está salvo em um arquivo chamado rdb.java (uma classe que implementei no projeto pelo eclipse, nada demais...) agora, na class onde se encontra a classe main que dá a chamada para o programa eu preciso declarar o JTable assim:
private JTable getJTable_Lista() {
		if (jTable_Lista == null) {
			jTable_Lista = new JTable(data, columnNames);
		}
		return jTable_Lista;

Ai que tá o problema, ele não reconhece "data, columnNames" que está no arquivo rdb.java... eu sei que isso é bem básico e já fiz muitas tentativas aqui, tentei usar o super(); antes do código etc, mas o super até onde sei é para usar algo que provem de um "extends" correto? então como eu poderia fazer para criar essa JTable com esses parametros?

3 Respostas

Marck

Cara, pelo que eu entendi voce quer chamar a conexão nesta sua segunda classe. Se eu não me engano, voce tem que criar um metodo dentro da primeira classe e instancia a mesma fazendo chamada para este metodo

Não seria isso(?):

private JTable getJTable_Lista() {
 		if (jTable_Lista == null) {
 	
          //aqui vc instacia e chama o metodo de conexao no caso Database
         //que ira conter todos os objetos para conexão
         //tambem onde data e columnNames estaria contido 
          rdb Database = new rdb();	
          Database.nomeDoMetodo();


           jTable_Lista = new JTable(data, columnNames);
 		}
 		return jTable_Lista;
Sombriks

Você não cria uma tabela assim, na verdade vc deveria dissociar a parte visual (o JTable) dos dados a serem apresentados. Eu recomendo vc ler sobre TableModel e implementar um.

Acredite, se vc lidar com TableModel ao invés da JTable diretamente, seu código vai ficar incrível e a coisa vai funcionar muito bem.

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/AbstractTableModel.html

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/TableModel.html

e eu recomendo uma busca no fórum mesmo sobre o assunto, uma vez que esta é uma questão bem frequente por aqui, :smiley:

Ah, e eu recomendo q vc faça um objeto responsável por acessar o banco, faça outros para cada tipo de tabela que implementem TableModel que reçebam o objeto que lida com o banco no construtor. E esse TableModel vc passa, de alguma forma pra tabela.

shison

Olá a todos.

Pelo que entendi amigo, vc tem no seu arquivo “rdb.java” a definição da classe “rdb”.
Dentro dessa vc definiu outra classe chamada “UserDatabase”, daí então no construtor dessa classe vc declarou os objetos “columnNames” e “data”.

Vector columnNames = new Vector(); Vector data = new Vector();
Dessa forma eles estão disponíveis apenas no escopo do construtor em questão e não tem como acessá-los de outro lugar, tal como da classe main que você está citando.

Você tem de rever o escopo dos seus objetos para poder trabalhar com eles direitinho.

Agora a dica do amigo acima sobre o TableModel realmente é uma boa, se poder dar uma estudada não irá se arrepender :slight_smile:

Tomara que eu tenha conseguido me expressar. até mais.

Criado 2 de janeiro de 2007
Ultima resposta 3 de jan. de 2007
Respostas 3
Participantes 4