Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] JOptionpane bloqueando o JButton - Java Swing

Olá pessoal! Estou com um problema no projeto de estudo de swing.

A proposta da tela(JInternalFrame) é quando o usuário clicar em "Salvar" ele apresenta uma mensagem (JOptionPane) de sucesso ou de erro (Código abaixo), mas quando é apresentado a mensagem o botão de "Salvar" para de funcionar e só volta quando fecho a janela de cadastro de cliente e abro novamente.

Alguém saberia porque isso acontece?

public void cadastraCliente() {
        
        cliente = new Cliente();
        cliente.setDocumento((String) textDocumento.getValue());
        cliente.setNome(textNome.getText());
        cliente.setRazaoSocial(textDocumento.getText().isBlank() ? textDocumento.getText() : null);
        
        System.out.println("aasdsadsadisadgsadihsa");
        
        
        try {
            cliente = clienteController.cadastrarCliente(cliente);
            JOptionPane.showInternalMessageDialog(null, "Cadastrado com sucesso");
            
        } catch (ValidacaoException msg) {
           JOptionPane.showInternalMessageDialog(null, "Falha ao cadastrar");
        }
        
        
    }

Tela de cadastro de cliente

1 resposta
solução!

Olá Matheus! Como vai?

Pelo que você descreveu, parece que o botão "Salvar" está se comportando de maneira inesperada após a exibição de um JOptionPane. Uma possibilidade é que o foco não esteja retornando corretamente para a janela principal após o fechamento do JOptionPane.

Uma coisa que você pode tentar é garantir que o JOptionPane esteja associado corretamente ao JInternalFrame que contém o botão. Para isso, você deve passar o JInternalFrame como o primeiro argumento para o método showInternalMessageDialog, em vez de null. Isso ajudará a garantir que o foco retorne para o JInternalFrame após o fechamento do diálogo.

Aqui está um exemplo de como você pode ajustar o seu código:

public void cadastraCliente() {
    // ... restante do código ...

    try {
        cliente = clienteController.cadastrarCliente(cliente);
        JOptionPane.showInternalMessageDialog(this, "Cadastrado com sucesso");
    } catch (ValidacaoException msg) {
        JOptionPane.showInternalMessageDialog(this, "Falha ao cadastrar");
    }
}

Note que substituí null por this no método showInternalMessageDialog. Isso assume que você está chamando esse método numa classe que estende JInternalFrame. Se não for o caso, você precisará passar a referência correta do JInternalFrame.

Se isso não resolver o problema, talvez seja necessário investigar se algum outro componente está capturando o foco ou se há algum outro evento sendo disparado que interfira no comportamento do botão.

Espero que essa sugestão ajude a resolver o problema, bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.