基于Java的界面開(kāi)發(fā)詳細(xì)步驟(用戶注冊(cè)登錄)
首先要清楚一個(gè)界面由哪些部分組成:
1、可視化部分: 窗體、標(biāo)簽、菜單、選項(xiàng)卡、按鈕......
2、元素規(guī)則部分: 顏色、尺寸、字體、布局
3、內(nèi)容部分: 文字、圖片
其次是所需代碼庫(kù)(java類庫(kù)):
- java.awt(元素規(guī)則類比較多)
- javax.swing(可視化組件較多)
所需要使用的類有以下幾種( 使用這些類時(shí)需要在class前導(dǎo)入):
- javax.siwng.JFrame; //窗體類
- javax.swing.JButton; //按鈕類
- javax.swing.JLabel; //標(biāo)簽類
- javax.swing.JTextField; //文本框類
- javax.swing.JPasswordField; //密碼框類
- javax.swing.ImageIcon; //圖標(biāo)類
- java.awt.Dimension; //尺寸類
- java.awt.FlowLayout; //流式布局類
開(kāi)發(fā)步驟:
定義類,創(chuàng)建對(duì)象,調(diào)用方法
1:創(chuàng)建一個(gè)類UserUI
2:在類中創(chuàng)建一個(gè)方法initUI()
2.1: 創(chuàng)建一個(gè)窗體對(duì)象 JFrame jf=new JFrame("用戶入口界面");
2.2: 設(shè)置窗體相關(guān)屬性:
2.2.1: 設(shè)置窗體大?。?jf.setSize(400, 400);
2.2.2: 設(shè)置窗體位置: jf.setLocation(300, 200);
2.2.3: 設(shè)置窗體關(guān)閉方式: jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
2.2.4: 設(shè)置窗體不可改變大小: jf.setResizable(false);
2.2.5: 設(shè)置窗體內(nèi)的布局方式為流式布局: jf.setLayout(new FlowLayout());
2.2.6: 設(shè)置窗體可視化: jf.setVisible(true);
2.3: 創(chuàng)建組件對(duì)象:圖標(biāo)、圖標(biāo)標(biāo)簽、賬號(hào)標(biāo)簽、賬號(hào)輸入框、密碼標(biāo)簽、密碼文本輸入框、登錄按鈕、注冊(cè)按鈕
2.3.1: 創(chuàng)建圖標(biāo)對(duì)象: ImageIcon icon=new ImageIcon("src/login/111.png");
2.3.2: 創(chuàng)建圖標(biāo)標(biāo)簽對(duì)象: JLabel iconLabel=new JLabel(icon);
2.3.3: 創(chuàng)建賬號(hào)標(biāo)簽對(duì)象: JLabel accountLabel=new JLabel("賬號(hào):");
2.3.4: 創(chuàng)建賬號(hào)輸入框?qū)ο螅?JTextField accountField=new JTextField(33);
2.3.5: 創(chuàng)建密碼標(biāo)簽對(duì)象: JLabel passwordLabel=new JLabel("密碼:");
2.3.6: 創(chuàng)建密碼輸入框?qū)ο螅?JPasswordField passwordField=new JPasswordField(33);
2.3.7: 創(chuàng)建登錄按鈕對(duì)象: JButton loginButton=new JButton("登錄");
2.3.8: 創(chuàng)建注冊(cè)按鈕對(duì)象: JButton registerButton=new JButton("注冊(cè)");
2.4: 組件創(chuàng)建完成后,通過(guò) jf.add (); 語(yǔ)句添加組件
- jf.add (imgjla);
- jf.add (accountjla);
- jf.add (accountjtf);
- jf.add (passwordjla);
- jf.add (passwordjpf);
- jf.add (loginjbt);
- jf.add (registjbt);
3: 在類中創(chuàng)建一個(gè)主函數(shù),創(chuàng)建UserUI對(duì)象,調(diào)用initUI()方法
代碼實(shí)現(xiàn)如下:
package login; import java.awt.*; import javax.swing.*; public class UserUI { public void initUI(){ System.out.println ("UserUI"); //界面 JFrame jf = new JFrame ("用戶界面"); jf.setSize (400, 400);//窗體大小 jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);//窗體關(guān)閉方式 jf.setLocationRelativeTo (null);// 居中 jf.setLayout (new FlowLayout ()); // 創(chuàng)建組件對(duì)象 //在界面中顯示一張圖片: ImageIcon imgIcon = new ImageIcon ("src/login/111.png");//圖標(biāo)對(duì)象 JLabel imgjla = new JLabel (imgIcon);//把圖片顯示在一個(gè)標(biāo)簽里面 JLabel accountjla = new JLabel ("賬號(hào): "); JTextField accountjtf = new JTextField (33);// 33個(gè)字符寬度 JLabel passwordjla = new JLabel ("密碼: "); JPasswordField passwordjpf = new JPasswordField (33);// 33個(gè)字符寬度 JButton loginjbt = new JButton ("登錄"); JButton registjbt = new JButton ("注冊(cè)"); // 添加組件 按順序添加 jf.add (imgjla); jf.add (accountjla); jf.add (accountjtf); jf.add (passwordjla); jf.add (passwordjpf); jf.add (loginjbt); jf.add (registjbt); jf.setVisible (true); // 創(chuàng)建監(jiān)聽(tīng)器對(duì)象 并添加給登錄注冊(cè)按鈕 UIListener uiListener = new UIListener (); loginjbt.addActionListener (uiListener); registjbt.addActionListener (uiListener); // 將界面上的輸入框?qū)ο笞兞棵?中存儲(chǔ)的輸入框?qū)ο蟮刂?復(fù)制一份給監(jiān)聽(tīng)器對(duì)象中輸入框?qū)ο笞兞棵? uiListener.accountjtf = accountjtf; uiListener.passwordjpf = passwordjpf; } public static void main(String[] args){ new UserUI ().initUI (); } }
運(yùn)行后顯示界面如下所示:
通過(guò)調(diào)整一些大小參數(shù),一個(gè)簡(jiǎn)單的窗體就這樣建立起來(lái)了,之后還需要學(xué)習(xí)更多組件和布局的方法來(lái)完善這個(gè)界面。通過(guò)學(xué)習(xí)去搭建這個(gè)窗體,我接觸到了java內(nèi)豐富的包,并學(xué)會(huì)去使用它們,也看到了java強(qiáng)大的應(yīng)用功能。
只有界面是僅僅不能實(shí)現(xiàn)創(chuàng)建和登錄功能的,在界面中我們添加有一個(gè)登錄按鈕和一個(gè)注冊(cè)按鈕,此時(shí)這兩個(gè)按鈕無(wú)論你千點(diǎn)萬(wàn)擊都是沒(méi)反應(yīng)的。要想按鈕響應(yīng)點(diǎn)擊,就要加入動(dòng)作監(jiān)聽(tīng)器!使它能夠?qū)崿F(xiàn)當(dāng)用戶輸入正確的賬號(hào)和密碼之后順利登陸,并彈出登陸界面。
添加按鈕點(diǎn)擊事件步驟:
動(dòng)作監(jiān)聽(tīng)器: ActionListener 接口
這個(gè)監(jiān)聽(tīng)器中有一個(gè)半成品方法(沒(méi)有方法內(nèi)容),被監(jiān)聽(tīng)按鈕被點(diǎn)擊時(shí)調(diào)用,需要我們自己實(shí)現(xiàn)這個(gè)方法
1:創(chuàng)建一個(gè)類UIListener實(shí)現(xiàn)(imp
ements) ActionListener,類似于繼承
2:在類中復(fù)制ActionListener 中的actionPerformed方法過(guò)來(lái),改分號(hào)為大括號(hào)
3:在方法中添加按鈕點(diǎn)擊之后要執(zhí)行的代碼
4:創(chuàng)建一個(gè)UIListener對(duì)象添加給所需要被監(jiān)聽(tīng)的按鈕 addActionListener(UIListener對(duì)象)
在UserUI類中,還需要將界面上的輸入框?qū)ο笞兞棵?中存儲(chǔ)的輸入框?qū)ο蟮刂?復(fù)制一份給監(jiān)聽(tīng)器對(duì)象中輸入框?qū)ο笞兞棵?。因?yàn)楸O(jiān)聽(tīng)器和界面在兩個(gè)類中,我要為界面中的按鈕添加動(dòng)作監(jiān)聽(tīng)器,就必然需要在監(jiān)聽(tīng)器里通過(guò)界面的對(duì)象來(lái)調(diào)用方法獲取密碼框的值,那么我們需要把對(duì)象從界面這個(gè)類傳遞到監(jiān)聽(tīng)器中,在監(jiān)聽(tīng)器中獲取數(shù)據(jù)來(lái)進(jìn)去判斷,再得到相應(yīng)的輸出。
// 創(chuàng)建監(jiān)聽(tīng)器對(duì)象 并添加給登錄注冊(cè)按鈕 UIListener uiListener = new UIListener (); loginjbt.addActionListener (uiListener); registjbt.addActionListener (uiListener); // 將界面上的輸入框?qū)ο笞兞棵?中存儲(chǔ)的輸入框?qū)ο蟮刂?復(fù)制一份給監(jiān)聽(tīng)器對(duì)象中輸入框?qū)ο笞兞棵? uiListener.accountjtf = accountjtf; uiListener.passwordjpf = passwordjpf;
package login; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class UIListener implements ActionListener{ JTextField accountjtf; JPasswordField passwordjpf; // 創(chuàng)建一個(gè)用戶數(shù)組 User[] userList = new User[10]; int index = 0; // 重寫(xiě)點(diǎn)擊按鈕會(huì)調(diào)用的方法 // ActionEvent 動(dòng)作事件 用來(lái)獲取當(dāng)前被點(diǎn)擊的按鈕的信息 @Override public void actionPerformed(ActionEvent e){ // 獲取 按鈕上的文本 用來(lái)判斷是哪個(gè)按鈕被點(diǎn)擊了 String ac = e.getActionCommand (); // 獲取輸入框中的賬號(hào)密碼 進(jìn)行驗(yàn)證 登錄 注冊(cè) String account = accountjtf.getText (); String password = passwordjpf.getText (); System.out.println ("賬號(hào): " + account + " 密碼: " + password); if(account.equals ("") || password.equals ("")){ JOptionPane.showMessageDialog (null, "賬號(hào)或密碼不能為空"); return; } if(ac.equals ("登錄")){ System.out.println ("登錄按鈕被點(diǎn)擊了"); // 驗(yàn)證這個(gè)賬號(hào)是否已經(jīng)被注冊(cè)過(guò) for(int i = 0; i < index; i++){ User user = userList[i]; if(user.account.equals (account)){ boolean isLogin = user.login (password); if(isLogin){ // 彈窗 JOptionPane.showMessageDialog (null, "登錄成功"); // 小窗 信息顯示 // 創(chuàng)建一個(gè)小窗對(duì)象 JFrame jf = new JFrame ("歡迎登錄"); jf.setSize (400, 400); JLabel info = new JLabel (); info.setText ("歡迎您: " + user.showInfo ()); jf.add (info); jf.setVisible (true); } else{ // 彈窗 JOptionPane.showMessageDialog (null, "登錄錯(cuò)誤"); } return; } } JOptionPane.showMessageDialog (null, "賬號(hào)不存在,請(qǐng)先注冊(cè)~"); } else if(ac.equals ("注冊(cè)")){ System.out.println ("注冊(cè)按鈕被點(diǎn)擊了"); // 驗(yàn)證這個(gè)賬號(hào)是否已經(jīng)被注冊(cè)過(guò) for(int i = 0; i < index; i++){ User user = userList[i]; if(user.account.equals (account)){ // 彈窗 JOptionPane.showMessageDialog (null, "賬號(hào)已經(jīng)被注冊(cè)過(guò)了"); return; } } // 循環(huán)結(jié)束后 都沒(méi)有彈窗 就表示這個(gè)賬號(hào)沒(méi)有被注冊(cè)過(guò) User user = new User (); user.account = account; user.password = password; // 將存儲(chǔ)了數(shù)據(jù)的用戶對(duì)象 存儲(chǔ)到數(shù)組中 userList[index] = user; index++; // 彈窗 JOptionPane.showMessageDialog (null, "注冊(cè)成功,請(qǐng)登錄~"); } } }
在上述代碼中,通過(guò)ActionEvent 動(dòng)作事件來(lái)獲取當(dāng)前被點(diǎn)擊的按鈕的信息,點(diǎn)擊登錄按鈕后,控制臺(tái)輸出“登錄按鈕被點(diǎn)擊了”,同樣點(diǎn)擊注冊(cè)按鈕后,控制臺(tái)輸出“注冊(cè)按鈕被點(diǎn)擊了”。添加空值條件設(shè)置一個(gè)彈窗,即當(dāng)賬號(hào)或密碼輸入框?yàn)榭諘r(shí),彈框顯示“賬號(hào)或密碼不能為空”。
if(account.equals ("") || password.equals ("")){ JOptionPane.showMessageDialog (null, "賬號(hào)或密碼不能為空"); return; }
創(chuàng)建一個(gè)數(shù)組存放注冊(cè)信息,以便在注冊(cè)時(shí)驗(yàn)證這個(gè)賬號(hào)是否已經(jīng)被注冊(cè)過(guò)。如果注冊(cè)過(guò)則直接登錄,沒(méi)有注冊(cè)過(guò),則彈窗顯示“賬號(hào)不存在,請(qǐng)先注冊(cè)~”。如果賬號(hào)注冊(cè)過(guò),則顯示“賬號(hào)已經(jīng)被注冊(cè)過(guò)了”。
for(int i = 0; i < index; i++){ User user = userList[i]; if(user.account.equals (account)){ boolean isLogin = user.login (password); } } JOptionPane.showMessageDialog (null, "賬號(hào)不存在,請(qǐng)先注冊(cè)~"); } else if(ac.equals ("注冊(cè)")){ System.out.println ("注冊(cè)按鈕被點(diǎn)擊了"); // 驗(yàn)證這個(gè)賬號(hào)是否已經(jīng)被注冊(cè)過(guò) for(int i = 0; i < index; i++){ User user = userList[i]; if(user.account.equals (account)){ // 彈窗 JOptionPane.showMessageDialog (null, "賬號(hào)已經(jīng)被注冊(cè)過(guò)了"); return; } }
利用條件語(yǔ)句,添加登錄返回條件,點(diǎn)擊登錄按鈕后,彈窗顯示“登陸成功”,設(shè)置一個(gè)登錄成功以后彈出的界面,界面內(nèi)容顯示用戶信息,否則顯示“登錄錯(cuò)誤”。當(dāng)按下按鈕時(shí),讓監(jiān)聽(tīng)器來(lái)判斷賬號(hào)密碼是不是匹配,如果匹配,則跳出登陸成功界面。
if(user.account.equals (account)){ boolean isLogin = user.login (password); if(isLogin){ // 彈窗 JOptionPane.showMessageDialog (null, "登錄成功"); // 小窗 信息顯示 // 創(chuàng)建一個(gè)小窗對(duì)象 JFrame jf = new JFrame ("歡迎登錄"); jf.setSize (400, 400); JLabel info = new JLabel (); info.setText ("歡迎您: " + user.showInfo ()); jf.add (info); jf.setVisible (true); } else{ // 彈窗 JOptionPane.showMessageDialog (null, "登錄錯(cuò)誤"); } return; }
創(chuàng)建User類返回登錄后,彈出界面的信息內(nèi)容。用字符連接方式顯示用戶信息,并設(shè)置在線狀態(tài)的改變。
package login; import javax.swing.*; public class User { String account; String password; int score; boolean isOnline; public String showInfo(){ String info = "賬號(hào): " + account + " 密碼: " + password + " 積分: " + score + "是否在線: " + isOnline; return info; } public boolean checkPwd(String pwdIn){ if(pwdIn.equals (password)){ return true; } else{ return false; } } public boolean login(String pwdIn){ if(checkPwd (pwdIn)){ if(isOnline){ JOptionPane.showMessageDialog (null, "賬號(hào)已經(jīng)在線了"); return false; } isOnline = true; score += 5; return true; } else{ return false; } } }
總結(jié)
到此這篇基于Java的界面開(kāi)發(fā)詳細(xì)步驟的文章就介紹到這了,更多相關(guān)Java開(kāi)發(fā)用戶注冊(cè)登錄界面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于MD5算法原理與常用實(shí)現(xiàn)方式
這篇文章主要介紹了關(guān)于MD5算法原理與常用實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08SpringBoot監(jiān)控SQL運(yùn)行情況的流程步驟
Druid是Java語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池,雖然?HikariCP?的速度稍快,但是,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能?,也是阿里巴巴的開(kāi)源項(xiàng)目,本文給大家介紹了SpringBoot監(jiān)控SQL運(yùn)行情況的流程步驟,需要的朋友可以參考下2024-03-03Spring Boot應(yīng)用的極速部署腳本示例代碼
最近在工作中遇到了一個(gè)問(wèn)題,需要極速的部署Spring Boot應(yīng)用,發(fā)現(xiàn)網(wǎng)上這方面的資料較少,所以自己來(lái)總結(jié)下,這篇文章主要給大家介紹了關(guān)于Spring Boot應(yīng)用的極速部署腳本的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08hadoop運(yùn)行java程序(jar包)并運(yùn)行時(shí)動(dòng)態(tài)指定參數(shù)
這篇文章主要介紹了hadoop如何運(yùn)行java程序(jar包)并運(yùn)行時(shí)動(dòng)態(tài)指定參數(shù),使用hadoop 運(yùn)行 java jar包,Main函數(shù)一定要加上全限定類名,需要的朋友可以參考下2021-06-06Java實(shí)現(xiàn)將byte[]轉(zhuǎn)換為File對(duì)象
這篇文章將通過(guò)一個(gè)簡(jiǎn)單的例子為大家演示Java如何實(shí)現(xiàn) byte[] 轉(zhuǎn)換為 File 對(duì)象,并將其上傳到外部服務(wù)器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03springboot使用DynamicDataSource動(dòng)態(tài)切換數(shù)據(jù)源的實(shí)現(xiàn)過(guò)程
這篇文章主要給大家介紹了關(guān)于springboot使用DynamicDataSource動(dòng)態(tài)切換數(shù)據(jù)源的實(shí)現(xiàn)過(guò)程,Spring Boot應(yīng)用中可以配置多個(gè)數(shù)據(jù)源,并根據(jù)注解靈活指定當(dāng)前使用的數(shù)據(jù)源,需要的朋友可以參考下2023-08-08SpringBoot?整合?Spring-Session?實(shí)現(xiàn)分布式會(huì)話項(xiàng)目實(shí)戰(zhàn)
本文主要介紹了SpringBoot?整合?Spring-Session?實(shí)現(xiàn)分布式會(huì)話項(xiàng)目實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07