JFrame através da JTable

3 respostas
java
F

Pessoal bom dia, estou a procura e não acho.
Tenho uma JFrame com uma tela, quero selecionar uma linha e abrir uma outra JFrame com os dados do cliente. Já estou usando bando de dados, estou com o PGAdmin.


O meu Dão do cadastro de cliente é:

package modeloDao;

import modeloConection.ConexaoBD;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import javax.swing.JOptionPane;

import modeloBeans.Beans_Cadastro_Cliente;

/**

*
  • @author Felipe Marques
    */
    public class Dao_Cadastro_Cliente {

    ConexaoBD conex = new ConexaoBD();
    
    Beans_Cadastro_Cliente mod = new Beans_Cadastro_Cliente ();
    
    String estado;
    
public void Salvar (Beans_Cadastro_Cliente mod)

{

conex.conexao();

try {

PreparedStatement pst = conex.con.prepareStatement(insert into cliente (cliente_razao_social,cliente_cnpj,

+ cliente_ie,cliente_telefone,cliente_rua,cliente_numero,cliente_complemento,cliente_bairro,

+ "cliente_cidade,cliente_estado,cliente_cep,cliente_contato,cliente_email,cliente_situacao,cliente_nome_fantasia) "

+ values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?));

pst.setString(1, mod.getRazao_social());

pst.setInt(2, mod.getCnpj());

pst.setInt(3, mod.getIE());

pst.setInt(4, mod.getTelefone());

pst.setString(5, mod.getRua());

pst.setInt(6,mod.getNumero());

pst.setString(7, mod.getComplemento());

pst.setString(8,mod.getBairro());

pst.setString(9, mod.getCidade());

pst.setString(10, mod.getEstado());

pst.setInt(11, mod.getCep());

pst.setString(12, mod.getContato());

pst.setString(13, mod.getEmail());

pst.setString(14, mod.getSituacao());

pst.setString(15, mod.getNome_fantasia());

pst.execute();

JOptionPane.showMessageDialog(null, Salvo com sucesso.);

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, Revise o cadastro. +ex);

}
conex.desconecta();
}

public void alterar (Beans_Cadastro_Cliente mod){

conex.conexao();

try {

PreparedStatement pst = conex.con.prepareStatement(update cliente set cliente_razao_social=?,cliente_cnpj=?,cliente_ie=?,

+ cliente_telefone=?,cliente_rua=?,cliente_numero=?,cliente_complemento=?,cliente_bairro=?,cliente_cidade=?,

+ cliente_estado=?,cliente_cep=?,cliente_contato=?,cliente_email=?,cliente_situacao=?,

+ cliente_nome_fantasia=? where id_cliente=?);

pst.setString(1, mod.getRazao_social());

pst.setInt(2, mod.getCnpj());

pst.setInt(3, mod.getIE());

pst.setInt(4, mod.getTelefone());

pst.setString(5, mod.getRua());

pst.setInt(6,mod.getNumero());

pst.setString(7, mod.getComplemento());

pst.setString(8,mod.getBairro());

pst.setString(9, mod.getCidade());

pst.setString(10, mod.getEstado());

pst.setInt(11, mod.getCep());

pst.setString(12, mod.getContato());

pst.setString(13, mod.getEmail());

pst.setString(14, mod.getSituacao());

pst.setString(15, mod.getNome_fantasia());

pst.execute();

JOptionPane.showMessageDialog(null, Usuário alterado com sucesso!);

}

catch (SQLException ex) {

JOptionPane.showMessageDialog(null, Revise o cadastro.);

}
conex.desconecta();

}

public Beans_Cadastro_Cliente buscacliente (Beans_Cadastro_Cliente mod){

conex.conexao();
conex.executaSql("select * from cliente where cliente_razao_social like '%"+mod.getPesquisa()+"%'");

    try {
        conex.rs.first();
        mod.setCodigo(conex.rs.getInt("id_cliente"));
        mod.setRazao_social(conex.rs.getString("cliente_razao_social"));

                }
    catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Usuário não cadastrado" );
    }



conex.desconecta();
    return mod;

}

}

3 Respostas

rodriguesabner

Quando postar códigos aqui, seleciona ele todo e clica em </>.

Há N maneiras de vc fazer isso, uma delas é via construtor.

Exemplo:

Frame 1:

new NovoFrame(nome, email, situação).setVisible(true);

Frame 2

public class NovoFrame{
   public NovoFrame(String nome, String Email, String situação){
       campoNome.setText(nome);
       .....
   }

    ....
 }

Vc pode passar o Beans_Cadastro_Cliente no construtor também

F

Orochimaru valeu pela dica do </> não sabia que tinha essa função.

Desculpa a ignorância porque estou realmente partindo do zero. Quando você me disse para usar o Frame 1, seria na minha Frame da tabela, usaria esse codigo no MouseClicked ? E como assim passar o Beans_Cadastro_Cliente no construtor?

Desculpa esses perguntas mas os cursos que estou tentando fazer só ensina com a tabela na mesma Frame.

J

Para chamar o seu segundo frame você precisa de algo para invocar sua ação. Suponho que seja o seu botão “acessar”; neste caso, adicione um action listerner nele, similar a este código:

seubotao.addActionListener((e) -> {
    criarUmNovoFrame(seuBean);
});

Caso queira chamar o frame quando um item for selecionado (sem clicar no botão) pode usar o List Selection Listener. Ficará algo similar a isto:

suaTabela.getSelectionModel().addListSelectionListener((e) -> {
        criarUmNovoFrame(seuBean);
});

Ainda sim, caso queira chamar o frame quando o usuário clicar com o mouse, digamos, dois cliques com o botão esquerdo; podes utilizar o Mouse Listener. Um pequeno exemplo:

suaTabela.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);

         if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
             criarUmNovoFrame(seuBean);
         }
   }
});

Em todo caso precisará invocar seu novo frame. Como o @rodriguesabner disse, você pode passar seu bean como parâmetro no construtor para poder recuperar os dados ao criar seu novo frame ou fazer algo mais ou menos assim:

public void criarUmNovoFrame(Bean seuBean){
    JFrame seuNovoFrame = new JFrame();
    seuNovoFrame.preencherCampos(seuBean); // Método que você irá criar para setar os valores

    // Quando o usuário clicar para fechar a nova janela não encerrará seu programa
    seuNovoFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    // Exibe o seu frame
    seuNovoFrame.setVisible(true);
}
Criado 24 de junho de 2020
Ultima resposta 24 de jun. de 2020
Respostas 3
Participantes 3