Java-簡易聊天室系統(tǒng)_第1頁
Java-簡易聊天室系統(tǒng)_第2頁
Java-簡易聊天室系統(tǒng)_第3頁
Java-簡易聊天室系統(tǒng)_第4頁
Java-簡易聊天室系統(tǒng)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Java程序設(shè)計課程設(shè)計報告華北科技學(xué)院課程設(shè)計說明書班級:信息與計算科學(xué)B091學(xué)號: 2009090141XX 姓名:設(shè)計題目:簡易聊天室系統(tǒng)設(shè)計時間:2011.12.26 至 2011.12.30扌指導(dǎo)教師:XXXXXXX評語:評閱成績:評閱教師:目 錄1弓I言11.1課程設(shè)計選題11.2課程設(shè)計的目的11.3本選題的設(shè)計背景12.1功能需求12.2系統(tǒng)的開發(fā)運(yùn)行環(huán)境22總體設(shè)計23.1系統(tǒng)體系結(jié)構(gòu)設(shè)計23詳細(xì)設(shè)計與實現(xiàn)34.1登錄模塊34.2客戶端注冊界面模塊54.3客戶端聊天模塊84.4服務(wù)器端模塊104小結(jié)和展望13參考文獻(xiàn)14附錄15使用說明書15源程序清單19-III-Java

2、程序設(shè)計課程設(shè)計報告1.1課程設(shè)計選題簡易聊天室系統(tǒng)1.2課程設(shè)計的目的使學(xué)生鞏固和加深以Java語言為基礎(chǔ)的面向?qū)ο缶幊碳夹g(shù)理論知識的理解,提高 實際動手編程能力的培養(yǎng),掌握以 Java為核心的應(yīng)用軟件開發(fā)方案,達(dá)到能獨(dú)立閱 讀、編制和調(diào)試一定規(guī)模的Java程序的水平。1.3本選題的設(shè)計背景聊天是是網(wǎng)絡(luò)中廣泛應(yīng)用的服務(wù)之一,特別是現(xiàn)在信息社會對聊天的依賴也越累 越大,我們品是在生活中很多人都在用的QC就是一種很好的聊天工具,它不僅只是聊 天那么簡單,其它的功能也非常強(qiáng)大?;贘ava語言在網(wǎng)絡(luò)編程中的廣泛應(yīng)用與我們 基本每時每刻都在接觸的聊天系統(tǒng)。我選擇嘗試對一簡單的聊天系統(tǒng)進(jìn)行開發(fā)。對本聊

3、天系統(tǒng)開發(fā)的意義:網(wǎng)絡(luò)聊天系統(tǒng)交流是系統(tǒng)的關(guān)鍵目的所在,能讓我們在 簡單的語句中對復(fù)雜社會的了解;交流的過程中使得人與人之間距離徹底拉近,就像面 對面的交談彼此之間沒有界限,沒有差別,只有心與心的共振。它沒有壓抑,只有爭論,就是心靈之間的一種平臺。也是另一種交友的一種重要方 式。缺少它你會感覺沒什么,但是你一旦有了它你會發(fā)現(xiàn)它是那么的重要。需求分析在信息社中,信息是第一手資料,人們聊天也是信息的傳播。曾經(jīng)的會議及面談已 不再發(fā)揮主宰作用了,隨著各種聊天工具的上市,大家都對聊天產(chǎn)生濃厚的興趣,聊天 系統(tǒng)的存在也有了很大價值。2.1功能需求用戶角度考察系統(tǒng)應(yīng)具有哪些功能及非功能性需求。能實現(xiàn)用戶注

4、冊、用戶的登錄、各客戶端能連接起來,服務(wù)器能與客戶端相連實現(xiàn) 用戶之間信息的發(fā)送與共享。2.2系統(tǒng)的開發(fā)運(yùn)行環(huán)境本系統(tǒng)開發(fā)平臺:Java本系統(tǒng)集成開發(fā)環(huán)境:MyEclipse本系統(tǒng)運(yùn)行環(huán)境:windows 72總體設(shè)計3.1系統(tǒng)體系結(jié)構(gòu)設(shè)計-2-Java程序設(shè)計課程設(shè)計報告3詳細(xì)設(shè)計與實現(xiàn)4.1登錄模塊1. 功能設(shè)計(1)主要實現(xiàn)用戶的登錄與注冊2. 界面設(shè)計圖1登錄窗口3模塊主要算法(1)事件的處理方法public void actionPeformed(ActionEvent e) Object source = e.getSource(); /確定按鈕 if (source = btnO

5、k) bt nOkClick();/取消按鈕if (source = btnCancle) btnCan cleClick();/ “注冊”按鈕if (source = btnRegist ) bt nRegistClick();(2)單擊btnOk按鈕處理方法private void btn OkClick() Stri ng user name =txtName.getText();Stri ng userpwd =n ewStri ng( txtPwd .getPassword();if (username.equals( ) JOptionPane. showMessageDialog

6、( btnOk, “用戶名”不能為空,提示JOptionPane. WARNING_MESS)AGEreturn ;if (userpwd.equals( ) JOpti on Pa ne. showMessageDialog( bt nOk, “密碼”不能為空,提示,JOptionPane. WARNING_MESSAGEreturn ;if (userpwd.equals( haiersoft ) / 默認(rèn)密碼“ haiersoft ”/驗證通過,隱藏登錄窗口,顯示聊天主窗口this .setVisible( false );/FrmMai n frmMa in = new FrmMai

7、n();JFrame frmMain = RongQi. getFrm(FrmMain);if (frmMain = null ) frmMa in = new FrmMa in ();Ron gQi.putFrm(FrmMa in, frmMai n);/FrmMai n frmMa in = new FrmMai n();frmMain.setVisible(true ); else JOptionPane. showMessageDialog( btnOk,錯誤的用戶名或密碼,提 示,JOptionPane. WARNING_MESS)AGE4調(diào)試與測試調(diào)試過程當(dāng)中,遇到密碼文本框設(shè)計沒

8、有和實際設(shè)計符合,最后通過同學(xué)的一起解 決了這個問題;在處理“取消”的事件時出現(xiàn)一點小錯誤,經(jīng)過反復(fù)調(diào)試及對程序的時 間分析發(fā)現(xiàn)將“取消”這個事件的處理錯寫為“確定”按鈕。4.2客戶端注冊界面模塊1.功能設(shè)計(1)有用戶的用戶名、昵稱、密碼、性別和頭像的選擇,用這些信息來實現(xiàn)用戶的注冊。2.界面設(shè)計圖2注冊窗口3模塊主要算法(1)創(chuàng)建一個頭像柵格布局指定的行數(shù)和列中。所有的部件都享有同等的布局的尺寸。JPanel pimg = new JPanel( new GridLayout(2,5);Butt on Group bgimg = new Butt on Group();for ( int

9、i = 0; i ckblmage. length ; i+) ckblmagei =new JRadioButton(String.valueOf (i + 1),new ImageIcon( images/ +(i + 1) + .gif);ckblmagei.addltemListe ner(new ImageLIste ner();bgimg.add( ckbImagei);pimg.add( ckbImagei); / 頭像讀取(2)單擊btnOk按鈕處理的方法private void btn OkClick() Stri ng user name =txtName.getText(

10、);String nickname = txtNickname .getText();Stri ng userpwd =n ewStri ng( txtPwd .getPassword();String repwd =newString( txtRePwd.getPassword();int sex = 0;if ( rbFemale.isSelected() sex = 1;if (username.equals( ) JOptionPane. showMessageDialog( btnOk, “用戶名”不能為空,提示JOptionPane. WARNING_MESSAGEreturn ;

11、if (nickname.equals( ) JOpti on Pa ne. showMessageDialog( bt nOk, “昵稱”不能為空,提示, JOptionPane. WARNING_MESSAGEreturn ;if (userpwd.equals( ) JOptionPane. showMessageDialog(btnOk, “密碼”不能為空,提示, JOptionPane. WARNING_MESS)AGEreturn ;if (userpwd.length() 10) JOptionPane. showMessageDialog( btnOk, “密碼”長度范圍在 6

12、10之間,提示,JOptionPane. WARNING_MESSAGEreturn ;if (repwd.equals( ) JOptionPane. showMessageDialog( btnOk, “確認(rèn)密碼”不能為空,提示IIJJOptionPane. WARNING_MESSAGEreturn ;if (!repwd.equals(userpwd) JOptionPane. showMessageDialog( btnOk, “確認(rèn)密碼”和“密碼”必須 相同,提示,JOptionPane. WARNING_MESSAGEreturn ;if (userpwd.equals( hai

13、ersoft ) JOptionPane. showMessageDialog(btnOk,注冊成功,提示, JOptionPane. WARNING_MESS)AGE/調(diào)用btnCancleClick() 方法,清空信息btnCan cleClick();else JOptionPane. showMessageDialog( btnOk,注冊失敗,提示, JOptionPane. WARNING_MESS)AGEreturn ;4調(diào)試與測試在調(diào)試用戶注冊界面曾出現(xiàn)當(dāng)選者用戶頭像時該頭像就被隱藏了,但我對程序中多 次的調(diào)試,這個問題都沒有得到好的解決,最后我嘗試將頭像的大小改變這個問題就得

14、得到圓滿的解決。4.3客戶端聊天模塊1. 功能設(shè)計(1)界面分為3部分:中間部分顯示所有聊天信息,右邊顯示所有在在線客戶, 底部用于信息的輸入與發(fā)送。2. 界面設(shè)計圖3聊天窗口3模塊算法(或重要代碼段)只要求給出1-2主要模塊的算法(1)從服務(wù)器獲取聊天信息的線程,接受服務(wù)器發(fā)送信息的方法。class GetMsgFromServer extends Thread /private String strMsg = n ull;public GetMsgFromServer() super ();public void run() try readMsg = new BufferedReader

15、(new InputStreamReader( socketMsg.getInputStream();dostrMsg = readMsg.readL in e();/在文本域顯示聊天信息txtContent .append( strMsg + n); while ( strMsg != null ); catch (Exception e) e.pri ntStackTrace();(2)事件發(fā)送的處理方法public void action Performed (Actio nEve nt e) Object source = e.getSource();if (source = btnS

16、end) String str = txtSend .getText();if (!str.equals( ) /網(wǎng)絡(luò)通信錯誤printMsg .println(nickname + : + str);printMsg .flush();txtSend .setText();4調(diào)試與測試測試結(jié)果的分析與討論,測試過程中遇到的主要問題及采取的解決措施。聊天室的設(shè)計是較為重要的部分,在先前簡單的界面設(shè)計時較為簡單,當(dāng)通過在該 類中添加實現(xiàn)對發(fā)送按鈕監(jiān)聽時由于沒有定義該類的方法連接使得發(fā)送按鈕不能實現(xiàn)。 對這個小問題的檢查較為簡單。4.4服務(wù)器端模塊1.功能設(shè)計(1)界面分為3部分:中間顯示所有聊天

17、信息,右邊顯示所有在線用戶,底部用 于發(fā)送系統(tǒng)信息。2.界面設(shè)計圖4服務(wù)器窗口3模塊算法(1)接收客戶發(fā)送聊天信息的線程class GetMessageThread extends Thread private String stringFromClient= null ;private BufferedReader bufferedReaderFromClie nt ;public GetMessageThread(BufferedReader buffer) throws Exception bufferedReaderFromClie nt= buffer;public void run

18、() try do stri ngFromClie nt= bufferedReaderFromClie nt .readL in e();msgList .addFirst( stringFromClient ); while (! stringFromClient .toLowerCase().endsWith( bye); int index = bufferedReader .indexOf( bufferedReaderFromClient ); bufferedReader .remove(index);prin tWriter.remove(i ndex); catch (Exc

19、eption e) e.pri ntStackTrace();(2)向所有客戶端發(fā)送消息的線程class SendMessageThread extends Thread public SendMessageThread() throws Exception super ();public void run() while ( isRun) try String s =null ;if (! msgList .isEmpty() s = (String) msgList .removeLast();txtContent .append(s + n);for (int i = 0; i prin

20、tWriter .size(); i+) if ( printWriter .get(i) != null ) prin tWriter.get(i).pri ntl n( s);prin tWriter.get(i).flush(); else sleep (100); / 休眠 catch (Exception e) e.pri ntStackTrace();4調(diào)試與測試服務(wù)器的是聊天系統(tǒng)中很重要的部分,這個界面設(shè)計較為簡單,擋在當(dāng)中添加一些 樹組件及對客服端信息的發(fā)送時,問題接二連三的出現(xiàn),很多都出現(xiàn)異常,主要是由于 在定義語句不小心出現(xiàn)專業(yè)術(shù)語錯誤。特別是將字符流放字節(jié)流緩沖區(qū)當(dāng)中,最

21、后由于 把new給忘記了,這種低級錯誤呀,在結(jié)果的運(yùn)行中,服務(wù)器總是接收不到客戶端信 息,這個問題占據(jù)了我大半天得時間才叫我給檢查出來了。通過這句簡單的話我深感細(xì) 節(jié)決定成敗。所謂面向?qū)ο螅疫B對象都沒有,怎么能夠接收消息,報空指針錯誤,悲 催呀。4小結(jié)和展望對于本系統(tǒng)的實現(xiàn),首先是構(gòu)建一個聊天系統(tǒng)主要的框架,通過查找關(guān)于聊天系統(tǒng) 的相關(guān)知識,建立一個聊天系統(tǒng)主要由服務(wù)器和客戶端,用戶的登錄界面和注冊界面, 這是一個很簡易的聊天系統(tǒng)。然后通過類的建立登錄窗口類FrmLogin客戶端窗口類Frmair、注冊界面窗口類 FrmRegis、服務(wù)器類ChatSeve;由這些類運(yùn)行出這幾個主要的窗口類,

22、在通過一個容 器類RongQi來存儲用戶的信息,通過類Config讀取相應(yīng)的鍵對應(yīng)信息。實現(xiàn)簡單的 窗口界面的輸出。其次是通過在這些類當(dāng)中添加事件處理,如用戶名是否錯誤,密碼是否在規(guī)定 范圍之內(nèi);客戶端與服務(wù)器之間的信息傳輸實現(xiàn),實現(xiàn)對按鈕的監(jiān)聽實現(xiàn)系統(tǒng)中群 消息的發(fā)送。最后,通過運(yùn)行服務(wù)器和登錄窗口,注冊一個用戶名實現(xiàn)用戶與服務(wù)器的鏈 接,就可進(jìn)行在聊天室中聊天,實現(xiàn)聊天室功能。體會:在這個課程設(shè)計中讓我體會到一個簡單的聊天系統(tǒng)也不是那么好實現(xiàn) 的,只是簡單窗口的實現(xiàn)也要花費(fèi)一天半時間,然后通過用戶窗口之間添加對事件 的處理監(jiān)聽器接口鏈接最終實現(xiàn)簡單聊天系統(tǒng)。本系統(tǒng)能實現(xiàn)在客戶端用戶聊天窗

23、口中顯示用戶名昵稱和頭像,服務(wù)器端口能看見當(dāng)前用戶在線狀態(tài)并顯示用戶名和 昵稱。實現(xiàn)多個用戶之間在線信息的發(fā)送;服務(wù)器能監(jiān)測當(dāng)前用戶所發(fā)信息。是現(xiàn) 簡單的用戶聊天功能。本系統(tǒng)有很多不足之處,再對用戶消息的發(fā)送當(dāng)中只能是在一個窗口實現(xiàn),就 都是在一個聊天室里面,沒有私聊的實現(xiàn),用戶上線后顯示的頭像不是用戶當(dāng)前頭 像,是按上線順序進(jìn)行排列的,很難區(qū)分客服端窗口中誰是當(dāng)前用戶,對于用戶下 線時也存在區(qū)分不清;本人覺得在對用戶信息的存儲與應(yīng)該建立一個數(shù)據(jù)庫會更 好。參考文獻(xiàn)1 邵峰晶,Java SE程序設(shè)計高級教程M.北京:電子工業(yè)出版,2010.2 耿祥義,張躍平,基于Java大學(xué)實用教程M.電子工

24、業(yè)出版社,2011 249-252.(宋體,小四號,1.5行距)使用說明書1.打開Eclipse運(yùn)行環(huán)境,打開文聊天系統(tǒng)的類ChatSever點擊下圖箭頭所指按鈕運(yùn)行服務(wù)器圖 5 ChatSever 類窗口運(yùn)行的服務(wù)器窗口如下圖-15-Java程序設(shè)計課程設(shè)計報告-16-Java程序設(shè)計課程設(shè)計報告圖6運(yùn)行服務(wù)器窗口2.在前面的基礎(chǔ)之上在打開運(yùn)行FrmLogin類,如下圖St?ui孑 j1 耶 Swrrh Prql1 Fiin WtrKjcivt H|p ffi sLL Frmiogin-Kra 口琛 * 咿 Q JL El * v *l,?fFrmM /#t 艾 3Fa$wordField

25、tKtPwdj/ 建科4+SButton btnOkj btnCanclebtnRegi&t;/ 璃定取泊注協(xié)按栩txtName = nei JTextField (20) j, txtPwd = new JPasswordField(20)s txtPiMd + setEchoChar(”btnOk =nkr 3Buttcnni(Mi定“卄 btriCancl 二 nk J Button (jbtnRegist = new 1 Button ( 11 注 fl!); IblName. set Bounds ( 39 l&j 6&2 25)j, txtName. set Bounds (95

26、込 坨 25h /切姙大十和IS費(fèi)WritableSmj1 risen:圖 7 FrmLogin 類窗口日!?- 陀存運(yùn)行窗口如下-17-Java程序設(shè)計課程設(shè)計報告圖8聊天登錄窗口3.可以進(jìn)行用戶注冊是,點擊“注冊”按鈕之后彈出如下注冊窗口圖9注冊窗口4.注冊之后點擊返回到登錄界面登錄用戶上線,如下圖便可進(jìn)行聊天了如下“痞子 蔡”的界面-18-Java程序設(shè)計課程設(shè)計報告-19-Java程序設(shè)計課程設(shè)計報告圖10聊天室狀態(tài)窗口服務(wù)器界面如下圖圖11服務(wù)器狀態(tài)窗口-20-Java程序設(shè)計課程設(shè)計報告源程序清單首先看看該系統(tǒng)類的組成如下圖博 Package Explorer . Q 淙 n u

27、亡- 一 _ ,115氏.4 co m .f uwu q i. Jj ChtServerJaua, _I-(+j com.kehuduan.?rM山 FrmLoginjava | j) FrmMairkjava J j Frm Re gist.java ;j User.java 由gm.容器期天臺I Ji Canfig javaJj RongQiJavaJRE System Library Jo aSE-1.6 匕 config;i ConfigJni L3* images 垂igif 劇 2.gif v 3-gif 詢 4.gif gj 5-gif 卜 6-gif fe 了 3v &giF-

28、4rn n今腰天索統(tǒng)圖12聊天室系統(tǒng)類窗口 (1)作為客戶端登錄窗口代碼package com.kehuduan.聊天室;import java.awt.event.*;import javax.swing.*;import com.容器.聊天室.RongQi;/作為客戶端登錄窗口public class FrmLogin extends JFrame implements ActionListener private JPanel p; / 面板private JLabel lblName, lblPwd ; / 姓名密碼標(biāo)簽private JTextField txtName; / 姓名文

29、本框private JPasswordField txtPwd; / 密碼框private JButton btnOk, btnCancle , btnRegist ;/ 確定取消注冊按 鈕public FrmLogin() super (聊天室登錄);p = new JPa nel();p.setLayout( null );lblName = new JLabel(用戶名);lblPwd = new JLabel(密 碼);txtName = new JTextField(20);txtPwd = new JPasswordField(20);txtPwd .setEchoChar( *)

30、;btnOk = new JButton(確定);btnCancle = new JButton(取消);btnRegist = new JButton(注冊);IblName.setBou nds(30, 30, 60, 25);txtName.setBounds(95, 30, 120, 25);/初始大小和位置lblPwd .setBounds(30,60,60,25);txtPwd .setBounds(95,60,120,25);btn Ok.setBou nds(30,90,60,25);btnCancle .setBounds(95,90,60,25);btnRegist .se

31、tBounds(160,90,60,25);btnOk.addActionListener(this );btnCancle .addActionListener(this );btnRegist .addActionListener(this );p.add( lblName);p.add( txtName);p.add( lblPwd);p.add( txtPwd);p.add( btnOk);p.add( btnCancle);p.add( btnRegist );this .add( p);this .setSize(250,170);this .setLocation(300, 30

32、0);/設(shè)置窗體不可改變大小this .setResizable( false );this .setDefaultCloseOperation(JFrame.EXIT_ON_CLO;E/事件處理方法public void action Performed(Acti on Eve nt e) Object source = e.getSource();/確定按鈕 if (source = btnOk) bt nOkClick();/取消按鈕if (source = btnCancle) btnCan cleClick();/ “注冊”按鈕if (source = btnRegist ) bt

33、nRegistClick();/單擊btnOk按鈕處理方法private void btn OkClick() Stri ng user name =txtName.getText();Stri ng userpwd =n ewStri ng( txtPwd .getPassword();if (username.equals( ) JOptionPane. showMessageDialog( btnOk, “用戶名”不能為空,提示JOptionPane. WARNING_MESS)AGEreturn ;if (userpwd.equals( ) JOptionPane. showMessa

34、geDialog(btnOk, “密碼”不能為空,提示,JOptionPane. WARNING_MESSAGEreturn ;if (userpwd.equals( haiersoft ) / 默認(rèn)密碼“ haiersoft ”/驗證通過,隱藏登錄窗口,顯示聊天主窗口this .setVisible( false );/FrmMai n frmMa in = new FrmMai n();/frmMai n.setVisible(true);JFrame frmMain = RongQi. getFrm(FrmMain);if (frmMain = null ) frmMa in = new

35、 FrmMa in ();Ron gQi.putFrm(FrmMa in, frmMai n);/FrmMai n frmMa in = new FrmMai n();frmMain.setVisible(true ); else JOptionPane. showMessageDialog( btnOk,錯誤的用戶名或密碼,提示,JOptionPane. WARNING_MESS)AGE/單擊btnCancle按鈕處理方法private void btnCan cleClick() txtName.setText();txtPwd .setText();/*隱藏當(dāng)前窗體this.setVis

36、ible(false);FrmRegist frmRegist = new FrmRegist();/顯示注冊窗體frmRegist.setVisible(true);*/單擊btnRegist按鈕的處理方法private void btn RegistClick() /隱藏當(dāng)前窗體this .setVisible( false );/FrmRegist frmRegist = new FrmRegist();/從容器中獲取注冊窗體JFrame frmRegist = RongQi. getFrm( FrmGegist);/如果為null ,則創(chuàng)建注冊窗體,并放入容器中if (frmRegis

37、t = null ) frmRegist = new FrmRegist ();RongQi.putFrm(FrmRegist , frmRegist);/顯示注冊窗體frmRegist.setVisible( true );public static void main(String args) /加載了一個和系統(tǒng)一樣風(fēng)格的異常try UlManager. setLookAndFeel ( UlManager. getSystemLookAndFeelClassName();/加載系統(tǒng)風(fēng)格catch (Exception e) FrmLogi n frmLogi n =new FrmLog

38、in();frmLogin.setVisible( true );RongQi.putFrm(FrmLogin , frmLogin);-26-Java程序設(shè)計課程設(shè)計報告(2)客戶端注冊窗口代碼package com.kehuduan.聊天室;/客戶端注冊窗口import java.awt.GridLayout;import java.awt.event.*;import javax.swing.*;import com.容器.聊天室.RongQi;public class FrmRegist extends JFrame implements ActionListener /繼承窗體監(jiān)聽接

39、口private JPa nel p;/標(biāo)簽用戶名昵稱密碼確認(rèn)密碼性別頭像private JLabel IblName, lblNickname , IbIPwd, IblRepwd, IblSex , lblImage ;private JTextField txtName, txtNickname;/ 姓名昵稱 文本框private JPasswordField txtPwd , txtRePwd; / 密碼框private JRadioButtonrbMale, rbFemale;private JRadioButton ckbImage = newJRadioButton8;/ 用于頭

40、像選擇private JButton btnOk, btnCancle , btnReturn ; / 確定 取消 返回 三個按鈕/選中的頭像private String checkedHeadlmg= null ;public FrmRegist() / 構(gòu)造方法super (用戶注冊);p = new JPanel( null );IblName = new JLabeI(用戶名:);lblNickname = new JLabeI(昵 稱:);IbIPwd = new JLabeI(密 碼:);IblRepwd = new JLabeI(確認(rèn)密碼:);IblSex = new JLabe

41、l(性 別:);Ibllmage = new JLabeI(頭 像:);txtName = new JTextField(20);txtNick name = new JTextField(20);txtPwd = new JPasswordField(20);txtRePwd= new JPasswordField(20);rbMale = new JRadioButton(男);rbMale .setSelected( true ); / 默認(rèn) 性別為男rbFemale = new JRadioButton(女);/rbFemale.setSelected(true);JPanel pim

42、g = new JPanel( new GridLayout(2,5);Butt on Group bgimg = new Butt on Group();for ( int i = 0; i ckbImage. length ; i+) ckblmagei =new JRadioButton(String.valueOf (i + 1),new ImageIcon( images/ +(i + 1) + .gif);ckblmagei.addltemListe ner( new ImageLIste ner(); ckblmagei.addltemListe ner(new ImageLis

43、te ner();/此處有點問題已解決bgimg.add( ckblmagei);pimg.add( ckblmagei); / 頭像讀取btnOk = new JButton(確定);btnCancle = new JButton(取消);btnReturn = new JButton(返回);btnOk.addActionListener(this );btnCancle .addActionListener(this );btnReturn .addActionListener(this ); / 添加監(jiān)聽器Butt on Group bgsex =new Butt on Group()

44、;bgsex.add( rbMale);bgsex.add( rbFemale);/性別數(shù)組lblName .setBou nds(30,30,60,25); txtName.setBounds(95, 30, 200, 25);IblNickname .setBounds(30, 60, 60, 25); txtNickname .setBounds(95, 60, 200, 25);lblPwd .setBounds(30,90,60,25);txtPwd .setBounds(95,90,200,25); lblRepwd .setBounds(30,120,60,25);txtRePw

45、d.setBou nds(95,120,200,25); lblSex .setBounds(30,150,60,25);rbMale .setBounds(95, 150, 60, 25); rbFemale.setBounds(160, 150, 60, 25);lblImage .setBounds(30, 180, 60, 25); pimg.setBou nds(95,180,280,100);btn Ok.setBou nds(90,290,60,25);btnCancle .setBounds(155,290,60,25);btnReturn .setBounds(220,290

46、,60,25);p.add( lblName);p.add( txtName);p.add( lblNickname );p.add( txtNickname );p.add( lblPwd);p.add( txtPwd);p.add( lblRepwd);p.add( txtRePwd);p.add( IblSex );p.add( rbMale);p.add( rbFemale);p.add( Ibllmage );p.add(pimg);p.add( btnOk);p.add( btnCancle);p.add( btnReturn );this .add( p);this .setSi

47、ze(400, 380);/ 設(shè)置大小this .setLocation(300,300);/ 設(shè)置坐標(biāo)/窗體不可改變大小 this .setResizable( false );this .setDefaultCloseOperation(JFrame.EXIT_ON_CLO;E/事件處理方法public void actionPerformed(ActionEvent e) Object source = e.getSource();/確定按鈕if (source = btnOk) bt nOkClick();/取消按鈕if (source = btnCancle) btnCan cleC

48、lick();/返回按鈕if (source = btnReturn ) bt nReturnClick();/單擊btnOk按鈕處理的方法private void btn OkClick() Stri ng user name = txtName.getText();String nickname = txtNickname .getText();Stri ng userpwd =n ewStri ng( txtPwd .getPassword();String repwd =newString( txtRePwd.getPassword();int sex = 0;if ( rbFemal

49、e.isSelected() sex = 1;if (username.equals( ) JOptionPane. showMessageDialog( btnOk, “用戶名”不能為空,提示JOptionPane. WARNING_MESSAGEreturn ;if (nickname.equals( ) JOptionPane. showMessageDialog(btnOk, “昵稱”不能為空,提示,JOptionPane. WARNING_MESS)AGEreturn ;if (userpwd.equals( ) JOpti on Pa ne. showMessageDialog(

50、bt nOk, “密碼”不能為空,提示, JOptionPane. WARNING_MESSAGEreturn ;if (userpwd.length() 10) JOptionPane. showMessageDialog( btnOk, “密碼”長度范圍在 610之間,提示,JOptionPane. WARNING_MESS)AGEreturn ;if (repwd.equals( ) JOptionPane. showMessageDialog( btnOk, “確認(rèn)密碼”不能為空,提示IIJJOptionPane. WARNING_MESSAGEreturn ;/*if (repwd.

51、equals() JOptionPane.showMessageDialog(btnOk,確認(rèn)密碼不能為空,提示,JOptio nPan e.WARNING_MESSAGE);return;*/if (!repwd.equals(userpwd) JOptionPane. showMessageDialog( btnOk, “確認(rèn)密碼”和“密碼”必須 相同,提示,JOptionPane. WARNING_MESS)AGEreturn ;if (userpwd.equals( haiersoft ) JOptionPane. showMessageDialog(btnOk,注冊成功,提示,JOptionPane. WARNING_MESS)AGE/調(diào)用btnCancleClick()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論