Comparação de objetos

Pessoal

Sou iniciante em Java e estou com uma dúvida, talvez até já tenha sido esclarecido aqui. Possuo duas telas, uma em que o usuário cadastra um login e senha e outra onde ele valida essa senha e login para entrar no programa. O meu teste fcou dessa maneira:

private void btValidaActionPerformed(java.awt.event.ActionEvent evt) {
validaSenha Log = new validaSenha();
validaSenha Pass = new validaSenha();

    if (txtLogin.getText().toString().equals(Log.getLogin()) && (txtsenha.getText().toString().equals(Pass.getSenha()))) {
        System.out.println("OK");
    } else {
        JOptionPane.showMessageDialog(null, "Usuário ou Senha INCORRETOS! Tente novamente");
        limpaCampos(painelMenuSenha);
           
        }
}

Acontece que sempre cai no “else”, a minha validação está incorreta, mas não sei como fazer essa comparação. Andei pesquisando e pelo que entendi ele esta fazendo a comparação da posição de memória e não do conteúdo, mas como faço essa comparação? O que esta errado nesse código?

Obrigado pela ajuda

ve se isso arruma

validaSenha validador = new validaSenha(); 

if (txtLogin.getText().equals(validador.getLogin()) && (txtsenha.getText().equals(validador.getSenha()))) {

Perguntar besteira não é vergonha, pelo menos eu acho. Então la vai:

Nesta linha abaixo:

(txtLogin.getText().toString().equals(Log.getLogin())

Essa parte “toString()” serve para que? Para converter um valor numérico para String?

mas o método getText() do JTextField já te retorna uma String eu não sei pra que você ia quere esse toString()
e deu certo do geito que te passei?

Quando tudo está certo demais, é melhor verificar se o problema não está em outro lugar.

Já verificou se os valores retornados por Log.getLogin() e pass.getSenha() são os que você espera?

Use um debbuger para testar cada um dos valores envolvidos:
txtLogin.getText(), txtsenha.getText(), Log.getLogin(), Pass.getSenha()

Outra coisa… Os toString() são mesmo desnecessários.

A classe para validar o login é mesmo validaSenha? Por que você não usa uma classe só que valida ao mesmo tempo o login e a senha? Me parece mais lógico fazer:

ValidaLogin validador = new ValidaLogin() if (validador.valida(txtLogin.getText(), txtSenha.getText())) System.out.println("OK"); else { JOptionPane.showMessageDialog(null, "Usuário ou Senha INCORRETOS! Tente novamente"); limpaCampos(painelMenuSenha); }

Note que o código acima também encapsula a forma como a senha é verificada. O que é bom, pois os equals deveriam ser responsabilidade do validador, não de quem usa o validador.

Finalmente, use as convenções de código. Nomes de classe começam com letras maiúsculas. Variáveis com letras minúsculas. Por exemplo:

Classes: ValidaLogin, ValidaSenha, JTextField
Variaveis: log, pass, loginDoUsuario, txtSenha.

Por fim, dá uma olhada no tópico: http://www.guj.com.br/posts/list/50115.java

Que vai te dar dicas de como postar códigos e usar alguns recursos do fórum adequadamente. :slight_smile: