Login com Java Swing Utilizando NetBeans e MySQL

Tempo de leitura: 26 min

Escrito por Michel Adriano Medeiros
em 14/02/2020

Objetivo

Vamos criar um sistema de login onde a pessoa também possa cadastrar-se caso não tenha um login. O sistema será construído com o Java Swing, JDK 13 e Maven.

Eu suponho que você já tenha o ambiente Java configurado e instalado o Netbeans. Acredito também que você saiba criar um projeto maven e saiba trabalhar com o Netbeans.

No blog, tem um artigo de como configurar o ambiente Java

Caso você seja muito iniciante, recomendo você fazer o curso: Java para Iniciantes ou se quiser um curso básico e rápido faça Introdução ao Java.

Configuraçao do pom.xml

Criando a Tela de Login

Vou criar as duas telas que teremos no sistema. A tela de login e a de cadastro de usuário.

Escolha a JFrame para criar a tela de login. Eu criei um pacote view para adicionar as telas.

Nas propriedades do JFrame login faça o seguinte:

  1. marque em propriedade o undecorated
  2. em propriedade na aba code escolha Generate Center

Próximo passo:

  1. adicione um JPanel ao JFrame.
  2. clique com o botão direito do mouse sobre o Jpanel e escolha a opção change variable name. Dê no nome de JPanelBase.
  3. em propriedades, clique em background e escolha uma cor que você deseja. Eu fui até a aba RGB e adicionei o código em Color Code F9FD50.
  4. vamos criar um método chamado bordas. Adicione a chamada deste método no início do JFrame login.

O código fica assim:

  1. adicione outro JPanel com o nome de JPanelBase1 sobre o JPanelBase. Não cubra totalmente o JPanelBase, deixe as bordas aparecendo.
  2. mude a cor de fundo do JPanelBase1. Vai ficar desta maneira:
  1. adicione um JPanel sobre o JPanelBase1. Mude o nome do JPanel para JPanelAcesso.
  2. não cubra totalmente até o topo o JPanelBase1. Mude a cor de fundo do JPanelAcesso. Veja como deve ficar:

Quando eu escolhi no JFrame a opção undecorated, a janela padrão não aparece. Na janela padrão é possível você colocar o botão minimizar, maximizar e fechar.

Adicionando os Botões Minimizar e Fechar

Já que escolhi este caminho, vou ter que colocar um meio de fechar e minimizar esta janela.

  1. adicione ao JPanelBase1 dois JLabel.
  2. um deles chame de JLabelFechar e o outro JLabelMinimizar.
  3. no JLabelMinimizar escolhi a font 48 e negrito(bold). Em text coloque o símbolo – (menos).
  4. no JLabelFechar escolhi a font 24 e negrito(bold). Em text coloque a letra x.
  5. coloque o JLabelMinimizar e jLabelFechar no canto superior direito do JPanelBase1.
  6. adicione mais um JLabel ao JPanelBase1. Neste JLabel vou usar para colocar uma imagem. Dê o nome de JLabelImagemTopo.
  7. no meu projeto não tem a pasta resources, que é onde quero guardar imagens. Para aparecer esta pasta fui até a aba files e adicionei a pasta resources dentro do meu projeto.

Agora sim a pasta resources aparece no projeto.

Agora é só escolher imagens de sua preferência e adicionar neste local. Você pode copiar e colar uma imagem no pacote que ela será transferida para a pasta ou arrastar uma imagem até este pacote.

  1. entre em propriedades do JLabelImagemTopo.
  2. em text não esqueça de apagar qualquer coisa que esteja escrito neste campo.
  3. em icon clique no botão …
  4. quando clicar em select, você verá as imagens que estão no pacote resources. Escolha a que você desejar.

Faça algo parecido com isto. Destaquei os botões minimizar e fechar para você ver como ficou.

Eu coloquei bordas no botão minimizar e fechar. Adicione o código em public login().

Criando os Campos de Login e Senha

Adicione dois JLabel ao JPanelAcesso e faça o mesmo procedimento realizado no JLabelImagemTopo.

Os tamanhos utilizados nas imagens são 50×50. Se precisar redimensionar uma imagem utilize o este site. Faça algo parecido com isto.

Entre em propriedades no JLabelMinimizar e JLabelFechar e mude em cursor para Hand Cursor.

Adicione um JTextField para o usuário digitar o login. Mude o nome do JTextField para JTFUserName. Em text digite username. Mude a Font para 18 e na propriedade foreground mude a cor para azul (o código exato da cor que estou utilizando é 207dff).

Adicione um JPasswordField para o usuário digitar a senha. Mude o nome do JPasswordField para JTFPassword. Mude a Font para 18 e na propriedade foreground mude a cor para azul (o código exato da cor que estou utilizando é 207dff).

Programação do Campo Username e Password

Clique com o botão direito do mouse no JTFUserName e escolha o focusGainded.

No método criado digite o seguinte código:

Vamos colocar bordas no JTFUserName e JTFPassword, adicione o código no método bordas.

Clique com o botão direito do mouse em JTFUserName e escolha o focusLost.

Digite o seguinte código no método criado.

Vamos fazer para o JTFPassword o método focusGained. Depois digite o seguite código:

Adicionando o Botão Entrar

Adicione um JButton para fazer o login no sistema. Mude o nome para JBLogin. Mude a font para 24, background color verde claro (código da cor 85ef47) e foreground azul (código da cor 207dff). Em cursor mude para a opção Hand Cursor. Em text digite Entrar.

Veja como ficou na imagem. Note também estiquei o botão para ficar do mesmo tamanho que os campos de login e password.

Para esticar o botão basta selecionar a borda do botão e esticar. Para ver o botão verde como na imagem temos que executar o programa. Então, execute e veja como está.

Programação dos Botões Fechar e Minimizar

O botão fechar do sistema não está funcionando, então para fechar o programa clique no botão vermelho.

Vamos fazer funcionar o botão minimizar e fechar do login funcionar.

Clique como o botão direito do mouse no botão JLabelMinizar e escolha mouseClicked.

No método criado digite o código:

Faça o mesmo procedimento para o JLabelFechar. Digte o código:

Montando a Tela de Cadastro de Usuário

Vamos fazer a outra tela que é a cadastro de usuário, para poder fazer o login no sistema.

Para pegar toda a estrutura da tela do login vou clicar com o botão direito do mouse na tela login e escolher copiar.

E depois colar no pacote view e dar o nome para esta nova tela de Cadastro. Na tela cadastro remova os itens que não vamos utilizar. Deixe como está na figura a seguir.

Depois que você remover os elementos que não for utilizar alguns erros no código irão aparecer. Basta apagar as linhas que estiverem dando erro.

Os dados que serão preenchidos para um novo cadastro serão: nome completo, username, password, telefone, gênero e imagem. Com referência que fizemos na tela de login, você com certeza consegue construir esta tela.

Sua tela de cadastro de usuário deve ficar parecida com esta.

O tamanho da imagem que estou utilizando para o sem imagem é de 225×225.

Agora que a tela de cadastro de usuário está pronta, temos que colocar na tela de login uma maneira de acessar a tela de cadastro de usuário.

Coloquei uma nova JLabel escrito novo cadastro na tela de login para podermos mudar de tela e fazer o cadastro.

O código para mudar para a nova tela fica no mouseClicked, já fizemos este procedimento no botão fechar e minimizar a janela. Código para mudar de tela.

Agora tenho que fazer a mesma coisa na tela de cadastro de usuário, vou colocar uma JLabel no mouseClicked e o código para voltar para a tela de login.

Outra coisa que foi esquecida na tela de cadastro foi adicionar um botão para finalizar o cadastro do novo usuário.

A tela ficou assim:

O código do JLabel Voltar fica:

Verificações da Tela de Cadastro de Usuário

Na tela de cadastro de usuário o gênero dá para escolher feminino e masculino, temos que dizer ao sistema que só deve ser escolhido um gênero.

Para isto escolha o elemento ButtonGroup e arraste para dentro da tela cadastro de usuário.

Quando você arrasta o ButtonGroup para dentro da tela, ele não fica exposto como os outros elementos.

No construtor da tela cadastro, vamos adicionar ao ButtonGroup os dois checkbox, feminino e masculino. O código fica assim:

Sendo que o JCBFeminino e JCBMasculino são nomes dos checkboxes adicionados para escolher o gênero.

O próximo passo é permitir somente números no campo telefone. Vou criar um novo pacote chamado tools e uma nova classe chamada Numero.

Na classe Numero vou colocar um método chamada justNumbers. Veja o código.

No campo telefone escolha o evento keyTyped.

O código dentro deste evento é:

Com isto, o campo telefone só vai reconhecer as teclas de números, backspace e delete.

Programação da Imagem do Usuário

Outra coisa que temos que fazer relativo a esta tela é sobre a imagem. Vamos fazer a seguinte solução: quando o usuário clicar sobre a imagem ele poderá escolher uma outra.

Vamos criar a classe TrabalhandoComImagem que no pacote tools. Com o seguinte código:

Na imagem do usuário adicione no evento MouseClicked o seguinte código:

Adicione uma variável de classe desta maneira (String uuid;) porque no código uuid = idOne.toString(); vamos precisar desta variável.

Outra coisa que você tem que ver, esse código da classe TrabalhandoComImagem:

No meu caso as imagens que eu escolher para o usuário serão salvas em E:\alunos/. Escolha um local na sua máquina ou até em uma rede.

Se você executar o programa e escolher uma imagem, você verá que a imagem irá substituir a imagem padrão.

E esta imagem também será enviada para o local que você escolheu, no meu caso E:\alunos/.

Você vai notar também que a imagem vai ser renomeado com um código UUID.

Imagem padrão do sistema substituída.
Imagem renomeada com o código UUID. Note que o local onde a imagem está, é o mesmo do código E:\alunos/

Banco de dados do Sistema

Agora vamos partir para a criação das tabelas no banco de dados.

Eu vou utilizar o Xampp, caso não saiba como instalar o Xampp acesse aqui.

O meu banco de dados chama-se projetologin.

Criei três tabelas: login, usuario e login_usuario.

  • login guarda os dados para o usuário entrar no sistema.
  • usuario guarda dados pessoais do usuário.
  • login_usuario liga o id do login ao id do usuario.

Entre na aba SQL do phpmyadmin e cole o script do banco de dados. Clique no botão executar.

Provavelmente vai aparecer um erro, mas o banco será criado.

Clique no banco de dados criado. Caso o banco não estiver aparecendo, clique no botão que está marcado na imagem.

Escolha novamente a aba SQL só que agora adicione o script apenas das tabelas. Clique no botão executar.

Criando a conexão com o banco de dados

Agora que temos as tabelas, vamos criar a conexão da aplicação com o banco de dados.

Crie uma classe chamada Conexao dentro do pacote conf.

Programação da classe Conexao.

Funcionamento do Cadastro de Usuário

Vamos colocar para funcionar o cadastro de usuário.

Uma regra para este formulário é: quando o usuário digitar o username o sistema deve procurar se há alguém utilizando este username. Se houver, uma mensagem deve aparecer para o usuário escolher outro username.

Para esta verificação, podemos ver todas as verificações de uma vez quando o usuário clicar no botão cadastrar.

Mas eu vou verificar quando o usuário passar para outro campo, ou seja, quando o campo username peder o foco, a verificação será feita.

Vamos criar uma classe chamada CadastroController dentro do pacote controller.

Vamos criar também uma classe chamada CadastroDAO dentro do pacote dao.

Agora faça o mesmos passos feito para criar o CadastroController e CadastroDAO, mas com os nomes LoginController e LoginDAO.

Tratamento de Conexão

Crie no pacote tools uma classe chamada TratamentoConexao, vamos utilizar esta classe para fazer o fechamento das conexões quando não estiverem sendo mais utilizadas.

Classe LoginDAO

A classe LoginDAO tem o seguinte código:

Modelo MVC

Se você não notou ou não sabe, estamos fazendo a estrutura MVC. Por exemplo:

A tela cadastro é a view (V), a classe CadastroController é o controller (C) e o CadastroDAO é o model (m).

Classe ImageIconTool

Criei mais duas classes no pacote tools, uma para mensagens com o nome MessageTool e outra para guardar as imagens do aviso, chamada ImageIconTool.

Lembre-se que as imagens estão armazenadas na pasta src/main/resources. As imagens utilizadas na janela de aviso tem o tamanho de 50×50. Para redimensionar o gif eu utilizei o site iloveimg.

Classe MessageTool

Classe LoginController

Código da classe LoginController.

Declare a variável erro que é um boolean, no início da classe Cadastro.

Na tela cadastro do usuário quando o foco for perdido do campo username tem o seguinte código:

Agora que está tudo preparado, vamos fazer a programação para inserir um novo usuário.

Classe Cadastro

Criei uma classe chamada Cadastro no pacote model.

Classe Login

Criei no mesmo pacote a classe Login.

Classe LoginUsuario

E também criei no pacote model a classe LoginUsuario.

Adicionando Progamação na Classe MessageTool

Voltemos para classe MessageTool para adicionar o método campoNomeVazio e campoSenhaDiferente.

Adicionando Progamação na Tela Cadastro

Na tela cadastro criei um método para fazer as verificações dos campos obrigatórios.

Programação do botão cadastrar.

Classe GerarUUID

Crie uma classe chamada GerarUUID no pacote tools.

Adicionando Progamação na Classe LoginDAO

Adicione na classe LoginDAO o método salvar.

Adicionando Progamação na Classe CadastroDAO

Vamos agora criar o método para salvar o cadastro do usuário na classe CadastroDAO.

Adicionando Progamação na Classe LoginUsuarioDAO

Vamos agora criar o método para salvar as informações na tabela login_usuario. Para isto vamos criar a classe LoginUsuarioDAO.

Criamos todos os métodos necessários para salvar as informações do login, cadastro e a ligação destas duas informações.

Adicionar Método erroAoSalvarDadosUsuario na Classe MessageTool

Vamos para a classe MessageTool para adicionar o método erroAoSalvarDadosUsuario.

Crie uma Classe LoginUsuarioController

Crie no pacote controller a classe LoginUsuarioController. E digite o seguinte código:

Adicione o Método save na Classe LoginController

Vamos adicionar o método save na classe LoginController.

Adicione o Método save na Classe CadastroController

Na classe CadastroController vamos adicionar o método save.

Finalizando o Botão Salvar do Cadastro de Usuário

Vamos voltar para a tela de cadastro e no botão cadastrar, vamos chamar o método save da classe CadastroController.

Já temos a programação deste botão, agora só temos que adicionar uma linha código. CadastroController.save(c);

Imagem para Mostrar Quando Salvar Usuário

Na classe ImageIconTool adicione a variável de classe: public static final Icon USER_SAVED = icon(“userSaved.gif”);

Outro site para redimensionar gifs é o https://ezgif.com/resize

Método sucessoUsuarioCadastrado

Na classe MessageTool adicione o método sucessoUsuarioCadastrado.

Chamar Método sucessoUsuarioCadastrado

Na classe LoginUsuarioController adicione a linha MessageTool.sucessoUsuarioCadastrado();

Voltando ao Arquivo pom.xml

Volte no arquivo pom.xml e modifique o arquivo onde está a anotação <configuration>

Antes estava apontando o inicio do programa o arquivo Start.java, resolvi apontar direto para o arquivo Login.java do pacote view.

Verifique na configuração do projeto para ver se a sua classe principal está apontado para a view Login.java.

Agora teste, tente cadastrar um usuário. O meu deu certo. 😉

Programação da Tela de Login

O cadastro está funcionando, agora vamos fazer a programação do botão entrar.

Só que antes, vamos criar na classe LoginDAO o método entrar.

Vamos até a classe MessageTool e adicionar as mensagens: você entrou no sistema e username ou senha estão errados.

Na classe LoginController adicione o método entrar.

Agora sim, vamos até a tela de login e dê dois cliques no botão entrar e digite o código:

Agora teste e digite uma senha ou username errado para ver a mensagem de erro, e depois entre com os dados corretos.

FUNCIONOU!!!!

Pronto, terminamos por aqui. Agora você tem um modelo de login para um sistema Java desktop.

Tutorial em Vídeo

Quer o tutorial em PDF? Digite o seu email

Você vai gostar também:

Para enviar seu comentário, preencha os campos abaixo:

Deixe um comentário


*


*


Seja o primeiro a comentar!

Damos valor à sua privacidade

Nós e os nossos parceiros armazenamos ou acedemos a informações dos dispositivos, tais como cookies, e processamos dados pessoais, tais como identificadores exclusivos e informações padrão enviadas pelos dispositivos, para as finalidades descritas abaixo. Poderá clicar para consentir o processamento por nossa parte e pela parte dos nossos parceiros para tais finalidades. Em alternativa, poderá clicar para recusar o consentimento, ou aceder a informações mais pormenorizadas e alterar as suas preferências antes de dar consentimento. As suas preferências serão aplicadas apenas a este website.

Cookies estritamente necessários

Estes cookies são necessários para que o website funcione e não podem ser desligados nos nossos sistemas. Normalmente, eles só são configurados em resposta a ações levadas a cabo por si e que correspondem a uma solicitação de serviços, tais como definir as suas preferências de privacidade, iniciar sessão ou preencher formulários. Pode configurar o seu navegador para bloquear ou alertá-lo(a) sobre esses cookies, mas algumas partes do website não funcionarão. Estes cookies não armazenam qualquer informação pessoal identificável.

Cookies de desempenho

Estes cookies permitem-nos contar visitas e fontes de tráfego, para que possamos medir e melhorar o desempenho do nosso website. Eles ajudam-nos a saber quais são as páginas mais e menos populares e a ver como os visitantes se movimentam pelo website. Todas as informações recolhidas por estes cookies são agregadas e, por conseguinte, anónimas. Se não permitir estes cookies, não saberemos quando visitou o nosso site.

Cookies de funcionalidade

Estes cookies permitem que o site forneça uma funcionalidade e personalização melhoradas. Podem ser estabelecidos por nós ou por fornecedores externos cujos serviços adicionámos às nossas páginas. Se não permitir estes cookies algumas destas funcionalidades, ou mesmo todas, podem não atuar corretamente.

Cookies de publicidade

Estes cookies podem ser estabelecidos através do nosso site pelos nossos parceiros de publicidade. Podem ser usados por essas empresas para construir um perfil sobre os seus interesses e mostrar-lhe anúncios relevantes em outros websites. Eles não armazenam diretamente informações pessoais, mas são baseados na identificação exclusiva do seu navegador e dispositivo de internet. Se não permitir estes cookies, terá menos publicidade direcionada.

Visite as nossas páginas de Políticas de privacidade e Termos e condições.

Importante: Este site faz uso de cookies que podem conter informações de rastreamento sobre os visitantes.
Criado por WP RGPD Pro