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()方法的使用,該方法是驗證用戶登錄資訊的關鍵所在。

