Prepare -se <r /> nos estágios iniciais de <r />, antes de tudo, você deve claramente ter uma idéia geral, que funções para alcançar, para entender quais aspectos de todo o módulo a serem usados e para descobrir suas deficiências a partir de o processo de fazer. A maior parte do progresso técnico precisa sair da prática.
Função : Função de registro do usuário+Função de login do sistema+Código de verificação de geração
Conhecimento : Design de janelas, design de banco de dados, atributos de embalagem Javabean, implementação do JDBC da conexão do banco de dados, código de geração de código de verificação (incluindo código de verificação de cores) e alguns como usar informações regulares sobre o registro de verificação de expressão, obtendo aleatoriamente caracteres para obter caracteres string, string, Controle do número de caracteres no texto, etc.
Mapa de visualização do módulo de design:
Visualização do código de verificação de cores:
Banco de dados usado: MySQL
Design de banco de dados
Crie um banco de dados DB_DATABASE01, que contém uma tabela TB_USER para salvar os dados de registro dos usuários.
Ele contém 4 campos
id int (11)
Nome de usuário Varchar (15)
Senha Varchar (20)
Email Varchar (45)
A declaração MySQL pode ser projetada assim:
Crie esquema db_database01; use db_database01; 1, "lxiyu", "lxiyu", [email protected]);
Use Lxiyu como um nome de usuário.
Selecione a instrução para verificar o formulário criado:
Escreva atributos do usuário de embalagens javabeus
pacote com.lixiyu.model; Public void setId (int id) {this.id = id;} public string getUseernerName () {return userName;} public void setUserName (string userName) {thi s.username = nome de usuário;} public string getPassword () {return senha; } Public void setPassword (string senha) {this.password = senha;} public String getEmail () {return email;} public void Seitemail (strin e email) {this.email = email;}}
Escreva a classe de ferramentas JDBC
Coloque o código relacionado à operação do banco de dados na interface dbconfig e na classe dbhelper
A interface dbconfig é usada para salvar o banco de dados, nome de usuário e código de informação de senha:
pacote com.lixiyu.util;
Para simplificar o desenvolvimento do JDBC, o DBHelper usou a combinação do Commons Dbutil.
A classe dbhelper herda a interface dbconfig.
(1) Método getConnection (): Obtenha a conexão do banco de dados, use a fonte de dados MySQL para simplificar a programação para evitar anormalidades devido ao carregamento de drivers de banco de dados.
(2) Existir () Método: Determine se existe o nome de usuário de entrada.
(3) Método check (): Quando o usuário insere o nome de usuário e a senha, verifique se o método check () está correto.
(4) Salvar () Método: Após o usuário inserir informações de registro legal, salve as informações.
Código detalhado:
pacote com.lixiyu.util; Commons.dbutils.Queryrunner; Importar com.mysql.jdbc.jdbc2.option.msqldatarce; conexão getConnection () {mysqldatasource mds = new mysqldatasorce (); senha); * * Para determinar se o usuário que especifica o nome do usuário está disponível. / Definir a consulta Connnnection (); rsh); .PrintStackTrace ();} finalmente. Use o componente Lang Commons para evitar injeção de SQL * * @return: retorne a true, retorno de erro ao false */ public static boolean check (string username, char [] senha) {nome de usuário = stringscapeutils.escapesql (nome de usuário); Nome do usuário de entrada para o QueryRunner Runner = new Queryrunner (); / / Crie o objeto Queryrunner String sql = "Selecione senha em TB_USER WHERENAME = '" + nome de usuário + "'; Plot ResultsetHandler <ject> rsh = new Scalalandler (); resultado.tocharray (); // A senha Arrays.Fill (querypasswork D, '0'); ); As informações registradas inseridas pelo usuário * * @return: Se o salvar for retornado com sucesso ao TRUE, a falha de preservação retorna o falso * / public static boolean Save (usuário do usuário) {QueryRunner Runner = new QuestionRunner (); String de objeto SQL = "Inserir em TB_USER (nome de usuário, senha, email) (?,?);"; .getpassword (), user.getemail ()}; ////////se o salvamento for devolvido com sucesso ao true Return true;} else {// Se a preservação falhar, retorne false retorno false;}} Catch (sqLexception e) {E.printStacktrace ();} finalmente { Igualmente (Conn);
Login do sistema
1.1 Design de janela
Use o layout do BoxLayout para definir o método de arranjo de controle de cima para baixo:
Copie o código do seguinte: contentPane.setLayout (new BoxLayout (contentPane, boxlayout.page_axis));
A janela usa controles, domínios de texto, domínios de senha, botões e outros controles para implementar o código:
ALIMENTAÇÃO PUBLICAÇÃO ALIMENTAÇÃO DO MENO {O FELIORIANTE FUNCIONTAL FORMULTRO ENTREGO EM { ("" com.sun.java.swing.plaf.nimbus.nimbusLookAndfeel ");} catch (arremesso e) {eventQueue.invokeler (new r) desnável () {public void run () {try {login frame = novo login (); UsernamePanel = novo JPanel (); Usernamelable; (); jpasswordfield (); = new jlabel ("/u9a8c/u8bc1/u7801/uff1a"); ValidateTextfield.setFont (new Font ("Microsoft yahei", font.plain, 15); validatePanel.add (validateTextfield); validateTextfield.setColumns (5); RandomTtTomtt Ext = RandomstringUtils.randomalphanumic (4); CaptChalabelAbel = Randomstringutils.randomalphanumic (4); captChalabelAbel = Randomstringutils.randomalphanumic (4); captChalabelAbel = RandomstringUtils.randomalphanumic (4); captChalabelAbel = RandomstringUtils.randomalphanumic (4); captChalabelAbel. ); ); Cancelbutton = novo jbutton ("Exit"); .Add (cancelada);
Exibir na janela:
Classe pública Swingutil {/** De acordo com o tamanho do contêiner, as coordenadas do canto superior esquerdo são calculadas. )/ 2; Coordenadas do canto esquerdo}}
1.2 Código de verificação de obtenção e desenho
Classe pública Captchalabel estende Jlabel {private estático final serialversionuid = -963570191302793615L; O rótulo} @OverridePublic Void Paint (gráficos G) {Super. G.DrawString (texto, 5, 25);
*Código de verificação de cores:
Classe pública colorfulCaptchalabel estende Jlabel {private estático final serialversionuid = -963570191302793615l; .gray, color.green, color.light_gray, color.magenta, color.orange, color.pink, color.red, color.yllow}; .text = text; .SetFont (nova fonte ("Microsoft yahei", font.plain, 16)); [color Randomutils.NextInt (Colors.Length));
1.3 Escola não vazia
if (nome de usuário.isempty ()) {// Determine se o nome do usuário é esvaziado. (Senha) .isempty ()) {// Determine se a senha está vazia JobPane.showMessagedialog (isto, "A senha não pode estar vazia!", " {// Determine se o código de verificação é esvaziado.
1.4 Verificação de legalidade
se (! ! Para solicitar o JobPane.ShowMessagedialog (isto, "Erro do Código de Verificação!", "Informações de Aviso", JobParning_Message);
1.5 Exibir a janela principal
EventQueue.inVokelateer (new Runnable () {@OverridePublic void run () {mainframe frame = new mainframe (); // Crie a janela principal. ) {E.PrintStackTrace ();}}});
Projete a janela principal (relativamente simples isso):
Public mainframe () {setDefaultCloseoperation (jframe.exit_on_close); ContentPane .SetLayout (New BorderLayout (0, 0)); El .SetFont (New Font ("Microsoft Yahei", Font.Plain, 40); // Definir tag fonts contentPane.add (tiplabel, borderlayout.center); // rótulo de aplicativo setLocation (swingutil.centrecontainer (getsi ze ())) ));
Registro do usuário
1.1 Design de janela
Classe pública Extende JFRame {/****/privado de serigrafia final = 24912942297163163338L; Exibir informações de prompt/*** Inicie o aplicativo. (Throwable e) {e.printStackTrace ();} eventQueue.invokelo (new Runnable () {@OverridePublic void run () {try {Register Frame = Newer (); f rame.setVisible (true);} catch (Exceção e ) {E.PrintStackTrace ();}}});}/*** Crie o quadro New JPanel (); /u540d/uff1a "); uernamelabel.setFont para 4/U7684 /U7B57/U7B26/u7B26/ u4e32 "); abstractDocument doc = (abstractdocument) usernametextField.GetDocument (); DOC.SetDocumentFilter (New DocumentSizeFilter (15)); // Limit the length of the character in the text domain to 15doc.adddocumentListener (Novo DocumentSizeliser, 15); "); PasswordLabel1.setFont Toset (" Microsoft Yahei ", Font.Plain, 15)); PasswordPanel1.add (PasswordField1 = NewWordField (PasswordField1 = NewWordField (); abstrctDocument) PasswordField1.getDocument (); 20); .Setcolumns (10); 15); Documeentsizelis, 20); .Add (emailpanel); ); .AddddocumentListener (Novo documentSizelistener, 45); TTON ENVIAR; , font.Plina, 15); = Novo jbutton ("/u53d6/u6d88"); Yahei ", font.plain, 15); buttonPanel.add (cancelbutton); pack (); // ajuste automaticamente o tamanho da janela setLocation (swingutil.centrecontrecontrecontrecontrecontRecontr ainer (getsize ()); // que a janela seja exibida na janela em o meio da janela}
1.2 Use DocumentFilter para limitar o número de caracteres disponíveis no texto
Classe pública DocumentSizeFilter estende o DocumentFilter {private int maxsize; , Int office, string string, atributeset att) lança badLocationException {if (fb.getDocume (). GetLength () + string.length ()) <= maxsize) grande -Length Super.insertString (fb, deslocamento, string, attr) ; Lança BadLocationException {if (fb.getDocument (). GetLength () + text.length () <= maxsize) {// super.replace (fb, deslocamento, comprimento, texto, atts); Classe} else {Toolkit.getDefaultToolkit ().
1.3 Use a interface DocumentListener para implementar o controle de texto de exibição.
Classe pública DocumentizedSizelisizelisizelisizelisizelisize elementos DocumentListener {private Jlabel Tiplabel; }@ O ouverridepublic void remavenate (documentEvent e) {SettipText (e);}@osuepublic voidUpDate (documentEvent e) {SettipText (e);} private void SettipText (documentEvent e) {document Doc = e.getDocument (); /// obten the the Documento do objeto tiplabel.setforeground (color.black); %tiplabel. () + "/" + maxSize);}}
1.4 Escola não vazia
if (nome de usuário.isempty ()) {// Determine se o nome do usuário é esvaziado. (Senha1) .isempty ()) {// Determine se a senha está vazia em jornais. ()) {// julgando se a senha de confirmação é esvazipanepane.showMessagedialog (isto, "confirmar a senha não pode estar vazia!", " (isto, "email não pode estar vazio!", "Informações de aviso", jobpane.warning_message);
1.5 Use string de verificação de expressão regular (verificação de legitimidade)
// trigo se o nome de usuário é legal se (! Padring.matches ("// w {5,15}", nome de usuário) {jobpane.showmessagedialog (this, "por favor, digite o nome de usuário legal!", "Informações de aviso" , JobPane.warning_message); Isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, isso, essa "entrada de senhas diferentes! "," "," "" Informações de aviso ", JobPane.warning_message); retornar;} // Verifique se o endereço de email é legítimo if (! Pattern.matches (" // w+@/w+/w+", email) { JobPine.ShowMessagedialo G (isto, "Por favor, digite o e -mail legal!", "Informações de aviso", JobPane.warning_message); Log (este, "Nome de usuário já existia", "Informações de aviso", JobPane.warning_message);
1.6 Salvar as informações de registro
Usuário Usuário = User (); If (dbhelper.save (usuário)) {jobpane.showMessagedialog (este "registro do usuário!" ANE .Information_Message); ;}}}
Neste ponto, um módulo de registro de login simples e completo é concluído.
O acima é todo o conteúdo deste artigo. Espero que todos possam gostar.