Java|系統登錄功能的設計與製作

  • 2020 年 3 月 13 日
  • 筆記

問題描述

登錄模組是任何一個系統都不可或缺的一個模組,是系統的安全之門。登錄模組通常由內容面板和登錄窗體構成。

解決方案

1 內容面板

所有組件都要布置在窗體的內容面板上,而登錄模組的內容面板使用了背景圖片來美化窗體介面,這就需要繼承Swing的JPanel類來編寫自己的面板類,然後將該面板類作為窗體的內容面板。

內容面板的程式程式碼如下:

package com.lzw.login;  import java awt.*;  import java.net.URL;  import javax.swing.*;    public class LoginPanel extends JPanel{        public int width,height;      private image img;        // 創建背景圖片      public LoginPanel(){          super();          URL url = getClass().getResource("......"); // 獲取圖片的URL。          img = new imagelcon(url).getimage();      }        // 圖片展示的位置      protected void paintComponent(Graphics g){          super.paintComponent(g);          g.drawimage(img,0,0,this); // 以左上角為起點      }  }

2 登錄窗體

創建LoginDialog類,該類繼承JFrame類,成為一個窗體。將內容面板設為LoginPanel類的對象。該窗體用於布置各種組件,來實現登錄的介面。

窗體主要用到的控制項如下表所示。

圖1 控制項表

3 事件處理

登錄按鈕的事件處理

登錄按鈕用於執行用戶名和密碼的驗證工作,如果驗證用戶名和密碼有效,則啟動系統,否則禁止進入系統。

在登錄按鈕的動作事件監聽器中,首先獲取用戶輸入的用戶名與密碼資訊,然後調用Dao類的checkLogin()方法,如果該方法返回true,則登錄成功,否則禁止用戶登錄,並顯示提示語句。

程式重要程式碼如下:

private JButton getLoginButton(){      if(loginButton == null){          loginButton = new JButton();          loginButton.setBounds(new Rectangle(109,114,48,20));          loginButton.setlcon(new imagelcon(getClass().getResource("..."))); // 給登錄圖標也添加上監聽器          loginButton.addActionListener(new ActionListener(){              public void actionPerformed(ActionEvent e){                  try{                      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());                        // 驗證登錄資訊                      userStr = userField.getText(); // 獲取用戶名                      Sting passStr = new String(passwordField.getPassword()); // 獲取密碼                        // 開始驗證                      if(!Dao.checkLogin(userStr,passStr)){                          JOptionPane.showMessageDialog(loginDialog.this,"資訊核對錯誤!請輸入正確資訊!",JOptionPane.ERROR_MESSAGE);                        return;                      }                  }catch(Exception e1){                      e1.printStackTrace();                  }                    // 顯示主窗體                  mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                  mainFrame.setVisible(true);                  mainFrame.getCzyStateLabel().setText(userStr);                  setVisible(false); // 隱藏窗體              }          })      }  }

4 密碼文本框的回車響應

在系統登錄窗體的密碼文本框中添加了按鍵事件監聽器,它在獲取到密碼文本框輸入的回車字元時將執行登錄事件。此過程與單擊登錄按鈕具有相同的作用。也就是說,輸完密碼後,用敲回車代替單擊登錄按鈕。

程式程式碼如下:

private JpasswordField getPasswordField(){      if(passwordField == null){          passwordField == new JPasswordField();          passwordField.setBounds(new Rectangle(143,69,125,22));          passwordField.addKeyListener(              new java.awt.event.KeyAdapter(){              public void keyTyped(java.awt.event.KeyEvent e){                  if(e.getKeyChar() == 'n'){                      loginButton.doClick();                  }              }          });      }      return passwordField;  }

結語

在本案例中最核心的技術就是對checkLogin()方法的使用,該方法是驗證用戶登錄資訊的關鍵所在。

Tags: