Como chamar uma class apartir de outra class?

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:

[code]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();
	}
}

}
[/code]

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?

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(?):

[code]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; [/code]

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.

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.