Simplificar quantidade de botões Alterar+Salvar = Salvar Java

Tenho uma aplicação com 6 botões em cada tela, salvar, alterar, novo, deletar, sair, cancelar.

Gostaria de ajuda para juntar dois botões de salvar e alterar em um só, para limpar um pouco minha tela.

Fazer um botão só que faça as duas coisas salvar e alterar, ou seja se o id (que é chave primária no banco de dados da tabela usuario) não existir no sistema criar um cadastro novo(INSERT no banco de dados), caso ele já exista alterar o cadastro(UPDATE no banco de dados), preciso somente da lógica da manipulação do banco de dados, os tratamentos eu me preocupo depois.

Achei vários tópicos na internet mais ainda não intendi a lógica. Uso Postgres + Java. Obrigado!

ESTA É A AÇÃO QUE O BOTÃO DE ALTERAR FAZ NO MEU CADASTRO DE USUÁRIOS, MAS QUE SEGUE A MESMA LÓGICA QUE USO PARA CADASTRO DE EMPRESAS E FUNCIONÁRIOS

conecta.conexao();
try {            
        PreparedStatement pst = conecta.connection.prepareStatement("UPDATE USUARIO SET SENHA=?,NOME=? WHERE LOGIN=?");            
        pst.setString(1, jPFSenha.getText());
        pst.setString(2, jTNome.getText());
        pst.setString(3, jTLogin.getText());
        pst.executeUpdate();

        JOptionPane.showMessageDialog(null, "Dados alterados com Sucesso");

        preencherTabela("select * from USUARIO order by login");//executa o método de preencher os dados na jTable com as informações do banco de dados
        
    } catch (Exception e) {
        
        JOptionPane.showMessageDialog(null, "erro ao alterar dados "+e);
    }
}

BOTÃO SALVAR

conecta.conexao();
if(!jTLogin.getText().equals("") && !jTNome.getText().equals("") && !(String.valueOf(jPFSenha.getPassword()).equals(""))){
   
        try {

            String SQL = "INSERT INTO usuario(login, senha, nome) VALUES(?,?,?)";
            
            
            try (PreparedStatement pst = conecta.connection.prepareStatement(SQL) 
            ) {
                pst.setString(2, String.valueOf(jPFSenha.getPassword()));
                pst.setString(3, jTNome.getText());
                pst.setString(1, jTLogin.getText());
                pst.execute(); 
            } 
            JOptionPane.showMessageDialog(null, "Dados CADASTRADOS com Sucesso");
            preencherTabela("select * from USUARIO order by login");//executa o método de preencher os dados na tabela com as informações do banco de dados
            limpar();//executa o método de limpar os dados do jTextField

        } catch (HeadlessException | SQLException e) {

            JOptionPane.showMessageDialog(null, "erro ao alterar dados "+e);
        }
        }else{
            JOptionPane.showMessageDialog(null, "Favor preencher o cadastro completo!!");         
    }

OBs.: Os dois botões estão funcionando perfeitamente apenas quero que um botão de salvar faça as duas operações de salvar e alterar .

Olá, sim, com certeza tem botão demais, até pq, como vc vai fazer com que o usuário clique no botão correto salvar ou alterar? Pode parecer bobagem, se ele clicar no salvar vai duplicar o registro ai é problema dele, mas na verdade será seu problema depois pq é seu sistema que estará permitindo duplicar registros.
Primeiramente vc terá apenas 1 botão, pode ser SALVAR. Se quiser pode até trocar o label do botão dependendo se vai inserir ou alterar. Mas não recomendo checar o cnpj, eu sempre usei o próprio ID(chave primária incremental) e pra isso vc nem precisa consultar no banco pra ver se existe. É muito simples: faz um if no botão, caso o registro tenha ID vc faz update no ID, caso contrário vc insere.

Verifique se o objeto recebido possui um id valido. Se tiver, vc atualiza. Caso contrário, insere.
Desta forma vc pode usar apenas um botão e direcionar a funcionalidade de acordo com a validação do ID.

Pode me ajudar a montar isso em código? tentei de várias formas, fazendo um select no banco de dados e comparando com o valor digitado, mais nenhum funcionou, desde já agradeço. Adicionei a coluna ID no banco de dados, mas ainda não consegui entender a lógica do código. Obrigado pelas dicas me ajudou muito.

Como eu disse, não precisa fazer consulta a banco, pq tentou fazer? Se com atenção oque escrevi e souber fazer um algoritmo java, verá que na última frase tem o pseudo código. É SÓ FAZER UM IF SOBRE A VARIÁVEL DA SUA CHAVE PRIMÁRIA, VERIFICA SE É NULL OU NÃO

o que pode fazer, partindo do principio que você já tenha o ID do cliente e os demais dados do cliente na sua tela, OK.

crie um boolean por exemplo boolean emEdicao = false , tendo o ID do cliente, você vai pressionar por exemplo o botao alterar, a partir deste momento
altere seu boolean emEdicao para true, ou emEdicao = true , OK. feito isso, depois de alterar tudo no seu cadastro , no botao salvar,
vai criar ai um IF da vida pra verificar este boolean, tipo if emEdicao = true { chama o método alterar } else { chama o metodo salvar }.
lembrando que a sua query SQL vai mudar de acordo com o método salvar ou alterar, se for salvar use o INSERT, se for alterar o UPDATE, entendeu ?

simples assim, já pode retirar seu botão “alterar” e deixar tudo em um só , no botão “salvar”.
lembrar de voltar seu boolean emEdicao para false depois de concluído.

if(cliente.getId() == null) // partindo do principio que seu método getId() retorna a PK da entidade
   salvar(cliente);
else
   editar(cliente);

Rodrigo me ajudou pra caramba, obrigado, já resolvi, tenho um jLabel que carrega a Id do cadastro, se ela estiver vazia eu faço insert se não eu faço update, resolvido!