Seguinte galera sou novo aki e estou mexendo em JTable.
Tenho uma tabela onde jogo os dados da consulta no banco.
Já consigo pegar o valor da linha da tabela.
O problema é passar esse valor para outro Frame. Ou seja esse valor vai servir para fazer uma consulta no banco e setar todos os valores no JTField!
ai vai meu código
private void consultarCliente() {
ResultSet rs = null;
String pegaNome = jTConsultaNome.getText();
try {
Connection connection;
connection = conexaoBD.getConnection();
Statement stmt = connection.createStatement();
rs = stmt.executeQuery("SELECT cod_cliente, nome_cliente " +
“FROM tb_cad_cliente WHERE nome_cliente like '%” + pegaNome + “%’” +
“ORDER BY nome_cliente”);
ResultSetMetaData rsmd = rs.getMetaData();//executa as colunas id, nome …
if (rs.next() == false) {
//msgnaolocalizado();
JOptionPane.showMessageDialog(this, "Erro!");
} else {
DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel();
modelo.setNumRows(0);
modelo.insertRow(0, new Object[]{rs.getString("cod_cliente"), rs.getString("nome_cliente")});
//rs = s.executeQuery("SELECT * FROM cliente where codigo='"+rs.getString("codigocliente")+"' ");
// if (!rs.next()==false){
//modelo.insertRow(0, );
//}
while (rs.next()) {
modelo = (DefaultTableModel) jTable1.getModel();
modelo.insertRow(0, new Object[]{rs.getString("cod_cliente"), rs.getString("nome_cliente")});
}
}
} catch (Exception e) {
System.err.println(e);
} finally {
try {
//fechar coneccao com o banco de dados
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public Object obterValorLinha() {
ClienteBean cliente = new ClienteBean();
//AlterarCliente altCli = new AlterarCliente();
int linha = jTable1.getSelectedRow();
int coluna = jTable1.getSelectedColumn();
Object cod_cliente = null;
cod_cliente = jTable1.getValueAt(linha,coluna).toString();
//String valor = jTable1.getValueAt(linha,coluna).toString();
//int cod_cliente = Integer.parseInt(valor);
//altCli.recebeValor(cod_cliente);
System.out.println(cod_cliente);
JOptionPane.showMessageDialog(this, cod_cliente);
cliente.setCod_cliente(cod_cliente);
return cod_cliente;
}
1° Coloque seu código entre as tags e
2° Não tenho ideia do que voce quis dizer com o seu problema esta em passar o valor da tabela para outro JFrame e com esse pedaço de código.
Essa é minha classe ClienteBean
public class ClienteBean {
public Object cod_cliente;
private String nome_cliente;
public Object getCod_cliente() {
return cod_cliente;
}
public String getNome_cliente() {
return nome_cliente;
}
public void setCod_cliente(Object cod_cliente) {
this.cod_cliente = cod_cliente;
}
public void setNome_cliente(String nome_cliente) {
this.nome_cliente = nome_cliente;
}
}
Nesse método, que está na classe ConsultaCliente, eu envio para a classe ClienteBean o valor da linha que eu peguei da tabela. Esse método está em outra classe!
public Object obterValorLinha() {
ClienteBean cliente = new ClienteBean();
int linha = jTable1.getSelectedRow();
int coluna = jTable1.getSelectedColumn();
Object cod_cliente = null;
cod_cliente = jTable1.getValueAt(linha,coluna).toString();
cliente.setCod_cliente(cod_cliente);
return cod_cliente;
}
Nesse método, que está na classe AlterarCleinte, recupero o valor da linha do JTable passa da para ClienteBean para exibir num JTfield.
public void recebeValor() {
ClienteBean cliente = new ClienteBean();
Object cod_cliente_rec = cliente.getCod_cliente();
jTCod_Cliente.setText(String.valueOf(cod_cliente_rec));
}
Não dá erro, o problema é que exibe o valor null no JTfield!!!
Foi mal pelos erros aew, to começando!!!
Se alguém puder ajudar agradeço!!!
Você não está chamando o método, você só está criando um novo Cliente e nada mais…
Não seria isso que você quer fazer?
...
ClienteBean cliente = new ClienteBean();
Object cod_cliente_rec = seiLáQueClasse.obterValorLinha();
cliente.setCod_cliente(cod_cliente_rec);
...
Não é isso!
O problema é no método “public Object getCod_cliente” da classe ClienteBean, ele sempre retorna um valor null!
Alguém pode me dar uma dica aew.
vlw!!!
Que tal começar aprendendo a trabalhar direito com o JTable?
Para começar, entenda como o TableModel funciona e pare imediatamente de usar o DefaultTableModel.
Abaixo, dois artigos ótimos que vão te explicar como a Table funciona:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472
Faça sua classe de negócios ler os dados do banco, criar uma List de objetos e então faça um TableModel personalizado que diga para a table como essa lista ser exibida. Dessa forma, você não duplicando dados na forma de String dentro do seu model, deixa o código mais eficiente, mais organizado e se livra de erros chatos como o que você está tendo.
O JTable é um dos componentes mais poderosos e bem bolados do Swing. Mas é também o que tem um dos usos mais complexos (pior que ele só o JTree), e é importante saber exatamente como ele funciona.
Ola!
Talvez você não esteja passando seu bean como argumento. tipo:
private ClienteBean cliente;
recebeValor(ClienteBean bean){
// Dessa forma você vai ter uma copia do cliente ja com os dados.
this.cliente = bean;
/*Sempre que você cria um:
ClienteBean cliente = new ClienteBean();
ele vem com dados null, porisso você deve passar um ClienteBean
como argumento do metodo ou declarar um no inicio do seu programa*/
Object cod_cliente_rec = cliente.getCod_cliente();
jTCod_Cliente.setText(String.valueOf(cod_cliente_rec));
}
Acho que isso deve resolver o seu problema!
Valeu cara vou tentar fazer isso aki!!!
Mas como faço para inicializar esse método no construtor ?
recebeValor(ClienteBean bean)