Botão de alterar e salvar,

Pessoal, estou com uma duvida, com ajuda por favor… (Nível de explicação baixo)
Estou com seguinte caso,

1 tenho em um frame com tabelas e 3 botões.
novo- alterar- excluir.
Quando clico no novo ele chama outro frame, ai o usuário preenche e salva, alterar mesma coisa, carrega os itens da tabela, e deveria salvar

O botões novo e excluir estão certo.
Agora o alterar quando ele chama o frame já vem com o meto “Salvar” porem ele cadastra o mesmo produto e não alterar o item.
Já tentei usar um método com String “SalvarAlterar”,mais ai que me pegou, pois os métodos então no outro frame… alguém consegue em ajudar ?
Agradeço

1 curtida

Sim , só colocar o código !!!

1 curtida

Seus metodos não deveriam estar nos frames.

os frames são uma apresentação / visualização / interação com o usuario.

vc deveria ter um objeto responsavel por criar um novo, alterar e excluir. uma classe diferente, uma instancia unica que os 3 frames compartilham ( ok poderiam ser 3 instancias diferentes também, num primeiro momento, desde que vc esteja salvando em um mesmo lugar como um banco de dados ou um atributo estatico )

seus frames vão apenas delegar o processamento para este objeto.

se vc pensar assim, vai ficar muito mais simples

2 curtidas

Form 1

 String salvarAlterar;

     void NovoProduto() {
                salvarAlterar = "salvar";
                //* Novo produto
                ViewProduto obj = new ViewProdutos(this);
                obj.setVisible(true);
            }`Texto pré-formatado`



    void AlterarProduto() {
            salvarAlterar = "alterar";
            //** ALTERA PRODUTOS
            int linha = this.jtbprodutos.getSelectedRow();
            try {
                int codigo = (int) this.jtbprodutos.getValueAt(linha, 0);
    // RETORNA DADOS BANCO
                ModelProdutos modelProdutos = controllerProdutos.retonarProdutoController(codigo);
                TableModel model = jtbprodutos.getModel();
    // SETAR DADOS NO CAMPO EM OUTRO FRAME.
                jtRowData.setVisible(true);
                jtRowData.pack();
                jtRowData.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                jtRowData.jtfcodigo.setText(String.valueOf(modelProdutos.getProid()));
                jtRowData.jtfnome.setText(String.valueOf(modelProdutos.getProNome()));
                jtRowData.jtfvalorcusto.setText(String.valueOf(modelProdutos.getProValorCusto()));
                jtRowData.jtfvalordevenda.setText(String.valueOf(modelProdutos.getProValor()));
                jtRowData.jtfestoque.setText(String.valueOf(modelProdutos.getProEstoque()));
            } catch (Exception e) {
                JOptionPane.showMessageDialog(this, "Código inválido ou nenhuma linha selecionada !");
            }
        }

Form 2 aonde encontra os campos para salvar.

private void SalvarProdutos() {
        // salvar produto novo       
        modelProdutos.setProNome(this.jtfnome.getText());
        modelProdutos.setProEstoque(Integer.parseInt(this.jtfestoque.getText()));
        modelProdutos.setProValorCusto(Double.parseDouble(this.jtfvalorcusto.getText()));
        modelProdutos.setProValor(Double.parseDouble(this.jtfvalordevenda.getText()));
        if (controllerProdutos.salvarProdutoController(modelProdutos) > 0) {
            JOptionPane.showMessageDialog(this, "Produto cadastrado com sucesso, ");
            ViewListadeProdutos f1 = (ViewListadeProdutos) parent;
            f1.carregarProdutos();
            this.dispose();
        } else {
            JOptionPane.showMessageDialog(this, " Erro ao cadastrar o produto");
        }
    }

private void SalvarProdutoAlterado() {
        // alterar produto novo       
        modelProdutos.setProNome(this.jtfnome.getText());
        modelProdutos.setProEstoque(Integer.parseInt(this.jtfestoque.getText()));
        modelProdutos.setProValorCusto(Double.parseDouble(this.jtfvalorcusto.getText()));
        modelProdutos.setProValor(Double.parseDouble(this.jtfvalordevenda.getText()));
        if (controllerProdutos.alterarProdutosController(modelProdutos)) {
            JOptionPane.showMessageDialog(this, "Produto alterado com sucesso, ");
            ViewListadeProdutos f1 = (ViewListadeProdutos) parent;
            f1.carregarProdutos();
            this.dispose();
        } else {
            JOptionPane.showMessageDialog(this, " Erro a alterar o produto");
        }

Agora no botão salvar endo encontro a duvida, pois a string esta no form 1.

if (salvarAlterar.equals("salvar")) {
            this.SalvarProdutos();
        } else if (salvarAlterar.equals("alterar")) {
            this.AlterarOutroForm();
        }

Desculpa os texto sou nova no assuntos, estou aprendendo algo informar, “sozinha”…

Você esta usando qual IDE , Eclispe ou NetBeans ? veja isso aqui Utilizando Swing com Banco de Dados

Concordo com você ,ela esta misturando responsabilidade

Estou utilizando o NetBeans, então as aulas que estou assistindo, estamos fazendo no sistemas MVC, como sou nova aqui no fórum, e no assunto, acho que me expressei mau.

Primeiramente, não se trata de uma dúvida boba.
Tente ser mais clara nos títulos, ok?

Cadastra o mesmo produto = a) cria um novo produto com os mesmos dados do antigo? b) Ou cadastra um produto novo, com as mudanças que você queria colocar no produto antigo?

oK, próxima vez serei mais clara, sim opção A) cadastra um no Id, com o mesmo dados.

Isso significa que, especificamente no método para atualizar, você não lê os dados novos digitados no JFrame ou que você sequer executa essa ação.
Você tentou debugar (no NB é depurar) o código?

Sim, executo apenas o arquivo local, “F6” ele da um erro, depois ele carrega, abre quando e um novo produto, ele salva sem problema, quando vai alterar, ele salva, porem não atualiza, e salva um produto com mesmo dados, em um nomo id

Olha, vendo pelo método SalvarProdutos (nomes de métodos devem começar sempre em minúsculos, ok?), você não seta, em nenhum momento, o código referente ao produto que está sendo alterado. É uma premissa definir o código (a chave primária do banco de dados) ou um elemento que seja imutável (CPF de uma pessoa, por exemplo) para ser usado como condição que vai definir qual elemento deve ser atualizado.

Esse seria o primeiro passo para evitar criação de um novo registro no banco.
O segundo é certificar-se de que, ao clicar no botão que dispara a ação de salvar, você realmente use todos os dados que acabou de preencher.

Porque ao invés de ficar narrando o código não explicita o seu código aqui ?

Crocodilo, poderia me ajudar com o código?

Você , esta dando responsabilidade de requisitos funcionais para objetos não funcionais de aplicações de frame, por exemplo você esta persistindo jtRowData pra uma requisição de frame, mas não mostra uma abstração para um DAO, fica difícil entender seu código , me parece que você está usando algo que fique em memória em uma ModelProdutos, pode parar esse código esta fora de padrões de projeto. Vamos esperar alguém colocar um código que seja limpo dessas instanciações sem responsabilidade pra ver se podemos reaproveitar o que você fez.

também tenho um problema parecido…