《Java程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告簡(jiǎn)易聊天室系統(tǒng)

上傳人:仙*** 文檔編號(hào):28300983 上傳時(shí)間:2021-08-25 格式:DOC 頁(yè)數(shù):54 大小:881KB
收藏 版權(quán)申訴 舉報(bào) 下載
《Java程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告簡(jiǎn)易聊天室系統(tǒng)_第1頁(yè)
第1頁(yè) / 共54頁(yè)
《Java程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告簡(jiǎn)易聊天室系統(tǒng)_第2頁(yè)
第2頁(yè) / 共54頁(yè)
《Java程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告簡(jiǎn)易聊天室系統(tǒng)_第3頁(yè)
第3頁(yè) / 共54頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《《Java程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告簡(jiǎn)易聊天室系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《《Java程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告簡(jiǎn)易聊天室系統(tǒng)(54頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

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

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

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

4、、各客戶端能連接起來(lái),服務(wù)器能與客戶端相連實(shí)現(xiàn)用戶之間信息的發(fā)送與共享。2.2 系統(tǒng)的開(kāi)發(fā)運(yùn)行環(huán)境本系統(tǒng)開(kāi)發(fā)平臺(tái): Java 本系統(tǒng)集成開(kāi)發(fā)環(huán)境:MyEclipse本系統(tǒng)運(yùn)行環(huán)境: windows 7 2 總體設(shè)計(jì)3.1 系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)聊天系統(tǒng)客戶端服務(wù)器用戶登錄用戶注冊(cè)建立連接監(jiān)聽(tīng)客戶用戶數(shù)據(jù)操作聊天交互3 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)4.1 登錄模塊1.功能設(shè)計(jì)(1)主要實(shí)現(xiàn)用戶的登錄與注冊(cè)。2.界面設(shè)計(jì)圖1 登錄窗口3模塊主要算法(1)事件的處理方法public void actionPerformed(ActionEvent e) Object source = e.getSource();/確定

5、按鈕 if(source = btnOk) btnOkClick();/取消按鈕if(source = btnCancle) btnCancleClick();/“注冊(cè)”按鈕if(source = btnRegist) btnRegistClick();(2)單擊btnOk按鈕處理方法private void btnOkClick() String username = txtName.getText();String userpwd = new String(txtPwd.getPassword();if(username.equals() JOptionPane.showMessageDi

6、alog(btnOk,“用戶名”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if(userpwd.equals() JOptionPane.showMessageDialog(btnOk,“密碼”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if (userpwd.equals(haiersoft) /默認(rèn)密碼“haiersoft”/驗(yàn)證通過(guò),隱藏登錄窗口,顯示聊天主窗口this.setVisible(false);/FrmMain frmMain = new FrmMain();JFrame frmMain

7、 = RongQi.getFrm(FrmMain);if (frmMain = null) frmMain = new FrmMain ();RongQi.putFrm(FrmMain, frmMain);/FrmMain frmMain = new FrmMain();frmMain.setVisible(true); else JOptionPane.showMessageDialog(btnOk,錯(cuò)誤的用戶名或密碼,提示,JOptionPane.WARNING_MESSAGE);4調(diào)試與測(cè)試 調(diào)試過(guò)程當(dāng)中,遇到密碼文本框設(shè)計(jì)沒(méi)有和實(shí)際設(shè)計(jì)符合,最后通過(guò)同學(xué)的一起解決了這個(gè)問(wèn)題;在處理“取

8、消”的事件時(shí)出現(xiàn)一點(diǎn)小錯(cuò)誤,經(jīng)過(guò)反復(fù)調(diào)試及對(duì)程序的時(shí)間分析發(fā)現(xiàn)將“取消”這個(gè)事件的處理錯(cuò)寫(xiě)為“確定”按鈕。4.2 客戶端注冊(cè)界面模塊1.功能設(shè)計(jì)(1)有用戶的用戶名、昵稱、密碼、性別和頭像的選擇,用這些信息來(lái)實(shí)現(xiàn)用戶的注冊(cè)。2.界面設(shè)計(jì)圖2 注冊(cè)窗口3模塊主要算法 (1)創(chuàng)建一個(gè)頭像柵格布局指定的行數(shù)和列中。所有的部件都享有同等的布局的尺寸。JPanel pimg = new JPanel(new GridLayout(2,5);ButtonGroup bgimg = new ButtonGroup();for (int i = 0; i ckbImage.length; i+) ckbIma

9、gei = new JRadioButton(String.valueOf(i + 1),new ImageIcon(images/+(i + 1) + .gif);ckbImagei.addItemListener(new ImageLIstener();bgimg.add(ckbImagei);pimg.add(ckbImagei);/頭像讀取(2)單擊btnOk按鈕處理的方法private void btnOkClick() String username = txtName.getText();String nickname = txtNickname.getText();String

10、 userpwd = new String(txtPwd.getPassword();String repwd = new String(txtRePwd.getPassword();int sex = 0;if (rbFemale.isSelected() sex = 1;if (username.equals() JOptionPane.showMessageDialog(btnOk,“用戶名”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if(nickname.equals() JOptionPane.showMessageDialog(btnO

11、k,“昵稱”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if(userpwd.equals() JOptionPane.showMessageDialog(btnOk,“密碼”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if (userpwd.length() 10) JOptionPane.showMessageDialog(btnOk,“密碼”長(zhǎng)度范圍在610之間,提示,JOptionPane.WARNING_MESSAGE);return;if (repwd.equals() JOptionPane.

12、showMessageDialog(btnOk,“確認(rèn)密碼”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if (!repwd.equals(userpwd) JOptionPane.showMessageDialog(btnOk,“確認(rèn)密碼”和“密碼”必須相同,提示,JOptionPane.WARNING_MESSAGE);return;if (userpwd.equals(haiersoft) JOptionPane.showMessageDialog(btnOk,注冊(cè)成功,提示,JOptionPane.WARNING_MESSAGE);/調(diào)用bt

13、nCancleClick()方法,清空信息btnCancleClick();else JOptionPane.showMessageDialog(btnOk,注冊(cè)失敗,提示,JOptionPane.WARNING_MESSAGE);return;4調(diào)試與測(cè)試 在調(diào)試用戶注冊(cè)界面曾出現(xiàn)當(dāng)選者用戶頭像時(shí)該頭像就被隱藏了,但我對(duì)程序中多次的調(diào)試,這個(gè)問(wèn)題都沒(méi)有得到好的解決,最后我嘗試將頭像的大小改變這個(gè)問(wèn)題就得得到圓滿的解決。4.3 客戶端聊天模塊1.功能設(shè)計(jì)(1)界面分為3部分:中間部分顯示所有聊天信息,右邊顯示所有在在線客戶,底部用于信息的輸入與發(fā)送。2.界面設(shè)計(jì)圖3 聊天窗口3模塊算法(或重要

14、代碼段)只要求給出1-2主要模塊的算法(1) 從服務(wù)器獲取聊天信息的線程,接受服務(wù)器發(fā)送信息的方法。class GetMsgFromServer extends Thread /private String strMsg = null;public GetMsgFromServer() super();public void run() tryreadMsg = new BufferedReader(new InputStreamReader(socketMsg.getInputStream();dostrMsg = readMsg.readLine();/在文本域顯示聊天信息txtConte

15、nt.append(strMsg + n); while (strMsg != null); catch(Exception e) e.printStackTrace();(2)事件發(fā)送的處理方法public void actionPerformed (ActionEvent e) Object source = e.getSource();if (source = btnSend) String str = txtSend.getText();if (!str.equals() /網(wǎng)絡(luò)通信錯(cuò)誤printMsg.println(nickname + : + str);printMsg.flus

16、h();txtSend.setText();4調(diào)試與測(cè)試 測(cè)試結(jié)果的分析與討論,測(cè)試過(guò)程中遇到的主要問(wèn)題及采取的解決措施。聊天室的設(shè)計(jì)是較為重要的部分,在先前簡(jiǎn)單的界面設(shè)計(jì)時(shí)較為簡(jiǎn)單,當(dāng)通過(guò)在該類中添加實(shí)現(xiàn)對(duì)發(fā)送按鈕監(jiān)聽(tīng)時(shí)由于沒(méi)有定義該類的方法連接使得發(fā)送按鈕不能實(shí)現(xiàn)。對(duì)這個(gè)小問(wèn)題的檢查較為簡(jiǎn)單。4.4 服務(wù)器端模塊1.功能設(shè)計(jì)(1)界面分為3部分:中間顯示所有聊天信息,右邊顯示所有在線用戶,底部用于發(fā)送系統(tǒng)信息。2.界面設(shè)計(jì)圖4 服務(wù)器窗口3模塊算法(1)接收客戶發(fā)送聊天信息的線程class GetMessageThread extends Thread private String str

17、ingFromClient = null;private BufferedReader bufferedReaderFromClient;public GetMessageThread(BufferedReader buffer) throws Exception bufferedReaderFromClient = buffer;public void run() try do stringFromClient = bufferedReaderFromClient.readLine();msgList.addFirst(stringFromClient); while (!stringFro

18、mClient.toLowerCase().endsWith(bye);int index = bufferedReader.indexOf(bufferedReaderFromClient);bufferedReader.remove(index);printWriter.remove(index); catch (Exception e) e.printStackTrace();(2)向所有客戶端發(fā)送消息的線程class SendMessageThread extends Thread public SendMessageThread() throws Exception super ()

19、;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 printWriter.size(); i+) if (printWriter.get(i) != null) printWriter.get(i).println(s);printWriter.get(i).flush(); else sleep(100);/休眠 catch (Except

20、ion e) e.printStackTrace(); 4調(diào)試與測(cè)試 服務(wù)器的是聊天系統(tǒng)中很重要的部分,這個(gè)界面設(shè)計(jì)較為簡(jiǎn)單,擋在當(dāng)中添加一些樹(shù)組件及對(duì)客服端信息的發(fā)送時(shí),問(wèn)題接二連三的出現(xiàn),很多都出現(xiàn)異常,主要是由于在定義語(yǔ)句不小心出現(xiàn)專業(yè)術(shù)語(yǔ)錯(cuò)誤。特別是將字符流放字節(jié)流劉緩沖區(qū)當(dāng)中是后由于吧new給忘記了,在結(jié)果的運(yùn)行中,服務(wù)器總是接收不到客戶端信息,這個(gè)問(wèn)題占據(jù)了我大半天得時(shí)間才叫我給檢查出來(lái)了。通過(guò)這句簡(jiǎn)單的話我深感細(xì)節(jié)決定成敗。4 小結(jié)和展望對(duì)于本系統(tǒng)的實(shí)現(xiàn),首先是構(gòu)建一個(gè)聊天系統(tǒng)主要的框架,通過(guò)查找關(guān)于聊天系統(tǒng)的相關(guān)知識(shí),建立一個(gè)聊天系統(tǒng)主要由服務(wù)器和客戶端,用戶的登錄界面和注冊(cè)界

21、面,這是一個(gè)很簡(jiǎn)易的聊天系統(tǒng)。然后通過(guò)類的建立登錄窗口類FrmLogin客戶端窗口類Frmain、注冊(cè)界面窗口類FrmRegist、服務(wù)器類ChatSever;由這些類運(yùn)行出這幾個(gè)主要的窗口類,在通過(guò)一個(gè)容器類RongQi來(lái)存儲(chǔ)用戶的信息,通過(guò)類Config讀取相應(yīng)的鍵對(duì)應(yīng)信息。實(shí)現(xiàn)簡(jiǎn)單的窗口界面的輸出。其次是通過(guò)在這些類當(dāng)中添加事件處理,如用戶名是否錯(cuò)誤,密碼是否在規(guī)定范圍之內(nèi);客戶端與服務(wù)器之間的信息傳輸實(shí)現(xiàn),實(shí)現(xiàn)對(duì)按鈕的監(jiān)聽(tīng)實(shí)現(xiàn)系統(tǒng)中群消息的發(fā)送。最后,通過(guò)運(yùn)行服務(wù)器和登錄窗口,注冊(cè)一個(gè)用戶名實(shí)現(xiàn)用戶與服務(wù)器的鏈接,就可進(jìn)行在聊天室中聊天,實(shí)現(xiàn)聊天室功能。體會(huì):在這個(gè)課程設(shè)計(jì)中讓我體會(huì)到

22、一個(gè)簡(jiǎn)單的聊天系統(tǒng)也不是那么好實(shí)現(xiàn)的,只是簡(jiǎn)單窗口的實(shí)現(xiàn)也要花費(fèi)一天半時(shí)間,然后通過(guò)用戶窗口之間添加對(duì)事件的處理監(jiān)聽(tīng)器接口鏈接最終實(shí)現(xiàn)簡(jiǎn)單聊天系統(tǒng)。本系統(tǒng)能實(shí)現(xiàn)在客戶端用戶聊天窗口中顯示用戶名昵稱和頭像,服務(wù)器端口能看見(jiàn)當(dāng)前用戶在線狀態(tài)并顯示用戶名和昵稱。實(shí)現(xiàn)多個(gè)用戶之間在線信息的發(fā)送;服務(wù)器能監(jiān)測(cè)當(dāng)前用戶所發(fā)信息。是現(xiàn)簡(jiǎn)單的用戶聊天功能。本系統(tǒng)有很多不足之處,再對(duì)用戶消息的發(fā)送當(dāng)中只能是在一個(gè)窗口實(shí)現(xiàn),就都是在一個(gè)聊天室里面,沒(méi)有私聊的實(shí)現(xiàn),用戶上線后顯示的頭像不是用戶當(dāng)前頭像,是按上線順序進(jìn)行排列的,很難區(qū)分客服端窗口中誰(shuí)是當(dāng)前用戶,對(duì)于用戶下線時(shí)也存在區(qū)分不清;本人覺(jué)得在對(duì)用戶信息的存儲(chǔ)

23、與應(yīng)該建立一個(gè)數(shù)據(jù)庫(kù)會(huì)更好。參 考 文 獻(xiàn)1 邵峰晶, Java SE程序設(shè)計(jì)高級(jí)教程 M. 北京:電子工業(yè)出版, 2010.2 耿祥義,張躍平,基于Java大學(xué)實(shí)用教程 M. 電子工業(yè)出版社, 2011249-252.(宋體,小四號(hào),1.5行距)附 錄使用說(shuō)明書(shū)1.打開(kāi)Eclipse運(yùn)行環(huán)境,打開(kāi)文聊天系統(tǒng)的類ChatSever 點(diǎn)擊下圖箭頭所指按鈕運(yùn)行服務(wù)器。圖5 ChatSever 類窗口運(yùn)行的服務(wù)器窗口如下圖圖6 運(yùn)行服務(wù)器窗口2.在前面的基礎(chǔ)之上在打開(kāi)運(yùn)行FrmLogin類,如下圖圖7 FrmLogin 類窗口運(yùn)行窗口如下圖8 聊天登錄窗口3.可以進(jìn)行用戶注冊(cè)是,點(diǎn)擊“注冊(cè)”按鈕之后

24、彈出如下注冊(cè)窗口圖9 注冊(cè)窗口4.注冊(cè)之后點(diǎn)擊返回到登錄界面登錄用戶上線,如下圖便可進(jìn)行聊天了如下“痞子蔡”的界面圖10 聊天室狀態(tài)窗口服務(wù)器界面如下圖圖11 服務(wù)器狀態(tài)窗口源程序清單首先看看該系統(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

25、private JPanel p;/面板private JLabel lblName, lblPwd;/姓名 密碼 標(biāo)簽private JTextField txtName; /姓名 文本框private JPasswordField txtPwd;/ 密碼框private JButton btnOk, btnCancle,btnRegist;/ 確定 取消 注冊(cè) 按鈕public FrmLogin() super(聊天室登錄);p = new JPanel();p.setLayout(null);lblName = new JLabel(用戶名);lblPwd = new JLabel(密

26、碼);txtName = new JTextField(20);txtPwd = new JPasswordField(20);txtPwd.setEchoChar(*);btnOk =new JButton(確定);btnCancle = new JButton(取消);btnRegist = new JButton(注冊(cè));lblName.setBounds(30, 30, 60, 25);txtName.setBounds(95, 30, 120, 25);/初始大小和位置lblPwd.setBounds(30,60,60,25);txtPwd.setBounds(95,60,120,2

27、5);btnOk.setBounds(30,90,60,25);btnCancle.setBounds(95,90,60,25);btnRegist.setBounds(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

28、);this.add(p);this.setSize(250,170);this.setLocation(300, 300);/設(shè)置窗體不可改變大小this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/事件處理方法public void actionPerformed(ActionEvent e) Object source = e.getSource();/確定按鈕 if(source = btnOk) btnOkClick();/取消按鈕if(source = btnCancle) btn

29、CancleClick();/“注冊(cè)”按鈕if(source = btnRegist) btnRegistClick();/單擊btnOk按鈕處理方法private void btnOkClick() String username = txtName.getText();String userpwd = new String(txtPwd.getPassword();if(username.equals() JOptionPane.showMessageDialog(btnOk,“用戶名”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if(userp

30、wd.equals() JOptionPane.showMessageDialog(btnOk,“密碼”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if (userpwd.equals(haiersoft) /默認(rèn)密碼“haiersoft”/驗(yàn)證通過(guò),隱藏登錄窗口,顯示聊天主窗口this.setVisible(false);/FrmMain frmMain = new FrmMain();/frmMain.setVisible(true);JFrame frmMain = RongQi.getFrm(FrmMain);if (frmMain = nu

31、ll) frmMain = new FrmMain ();RongQi.putFrm(FrmMain, frmMain);/FrmMain frmMain = new FrmMain();frmMain.setVisible(true); else JOptionPane.showMessageDialog(btnOk,錯(cuò)誤的用戶名或密碼,提示,JOptionPane.WARNING_MESSAGE);/單擊btnCancle按鈕處理方法private void btnCancleClick() txtName.setText();txtPwd.setText();/*/隱藏當(dāng)前窗體this.

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

33、 = null) frmRegist = new FrmRegist ();RongQi.putFrm(FrmRegist, frmRegist);/顯示注冊(cè)窗體frmRegist.setVisible(true);public static void main(String args) /加載了一個(gè)和系統(tǒng)一樣風(fēng)格的異常try UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName(); /加載系統(tǒng)風(fēng)格 catch (Exception e) FrmLogin frmLogin = new FrmLogin();frm

34、Login.setVisible(true);RongQi.putFrm(FrmLogin, frmLogin);(2)客戶端注冊(cè)窗口代碼package com.kehuduan.聊天室;/客戶端注冊(cè)窗口import java.awt.GridLayout;import java.awt.event.*;import javax.swing.*;import com.容器.聊天室.RongQi;public class FrmRegist extends JFrame implements ActionListener /繼承窗體 監(jiān)聽(tīng)接口private JPanel p;/標(biāo)簽 用戶名 昵稱

35、 密碼 確認(rèn)密碼 性別 頭像private JLabel lblName, lblNickname, lblPwd, lblRepwd, lblSex, lblImage;private JTextField txtName, txtNickname;/ 姓名 昵稱 文本框private JPasswordField txtPwd, txtRePwd;/密碼框private JRadioButton rbMale, rbFemale;private JRadioButton ckbImage = new JRadioButton8;/用于頭像選擇private JButton btnOk, b

36、tnCancle, btnReturn;/確定 取消 返回 三個(gè)按鈕/選中的頭像private String checkedHeadImg = null;public FrmRegist() /構(gòu)造方法super(用戶注冊(cè));p = new JPanel(null);lblName = new JLabel(用戶名:);lblNickname = new JLabel(昵 稱:);lblPwd = new JLabel(密 碼:);lblRepwd = new JLabel(確認(rèn)密碼:);lblSex = new JLabel(性 別:);lblImage = new JLabel(頭 像:)

37、;txtName = new JTextField(20);txtNickname= 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 pimg = new JPanel(new GridLayout(2,5);ButtonG

38、roup bgimg = new ButtonGroup();for (int i = 0; i ckbImage.length; i+) ckbImagei = new JRadioButton(String.valueOf(i + 1),new ImageIcon(images/+(i + 1) + .gif);ckbImagei.addItemListener(new ImageLIstener();/ckbImagei.addItemListener(new ImageListener();/此處有點(diǎn)問(wèn)題 已解決bgimg.add(ckbImagei);pimg.add(ckbImag

39、ei);/頭像讀取btnOk = new JButton(確定);btnCancle = new JButton(取消);btnReturn = new JButton(返回);btnOk.addActionListener(this);btnCancle.addActionListener(this);btnReturn.addActionListener(this);/添加監(jiān)聽(tīng)器ButtonGroup bgsex = new ButtonGroup();bgsex.add(rbMale);bgsex.add(rbFemale);/性別 數(shù)組lblName.setBounds(30,30,6

40、0,25);txtName.setBounds(95, 30, 200, 25);lblNickname.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);txtRePwd.setBounds(95,120,200,25);lblSex.setBounds(30,150,60,25);rbMale.setBounds(95, 15

41、0, 60, 25);rbFemale.setBounds(160, 150, 60, 25);lblImage.setBounds(30, 180, 60, 25);pimg.setBounds(95,180,280,100);btnOk.setBounds(90,290,60,25);btnCancle.setBounds(155,290,60,25); btnReturn.setBounds(220,290,60,25);p.add(lblName);p.add(txtName);p.add(lblNickname);p.add(txtNickname);p.add(lblPwd);p.

42、add(txtPwd);p.add(lblRepwd);p.add(txtRePwd);p.add(lblSex);p.add(rbMale);p.add(rbFemale);p.add(lblImage);p.add(pimg);p.add(btnOk);p.add(btnCancle);p.add(btnReturn);this.add(p);this.setSize(400, 380);/設(shè)置大小this.setLocation(300,300);/設(shè)置坐標(biāo)/窗體不可改變大小this.setResizable(false); this.setDefaultCloseOperation(J

43、Frame.EXIT_ON_CLOSE);/事件處理方法public void actionPerformed(ActionEvent e) Object source = e.getSource();/確定按鈕if(source = btnOk) btnOkClick();/取消按鈕if(source = btnCancle) btnCancleClick();/返回按鈕if(source = btnReturn) btnReturnClick(); /單擊btnOk按鈕處理的方法private void btnOkClick() String username = txtName.getT

44、ext();String nickname = txtNickname.getText();String userpwd = new String(txtPwd.getPassword();String repwd = new String(txtRePwd.getPassword();int sex = 0;if (rbFemale.isSelected() sex = 1;if (username.equals() JOptionPane.showMessageDialog(btnOk,“用戶名”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if(

45、nickname.equals() JOptionPane.showMessageDialog(btnOk,“昵稱”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if(userpwd.equals() JOptionPane.showMessageDialog(btnOk,“密碼”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;if (userpwd.length() 10) JOptionPane.showMessageDialog(btnOk,“密碼”長(zhǎng)度范圍在610之間,提示,JOptionPane.WAR

46、NING_MESSAGE);return;if (repwd.equals() JOptionPane.showMessageDialog(btnOk,“確認(rèn)密碼”不能為空,提示,JOptionPane.WARNING_MESSAGE);return;/*if (repwd.equals() JOptionPane.showMessageDialog(btnOk,確認(rèn)密碼不能為空,提示,JOptionPane.WARNING_MESSAGE);return;*/if (!repwd.equals(userpwd) JOptionPane.showMessageDialog(btnOk,“確認(rèn)密

47、碼”和“密碼”必須相同,提示,JOptionPane.WARNING_MESSAGE);return;if (userpwd.equals(haiersoft) JOptionPane.showMessageDialog(btnOk,注冊(cè)成功,提示,JOptionPane.WARNING_MESSAGE);/調(diào)用btnCancleClick()方法,清空信息btnCancleClick();else JOptionPane.showMessageDialog(btnOk,注冊(cè)失敗,提示,JOptionPane.WARNING_MESSAGE);return;/單擊btnCancle按鈕的處理方

48、法private void btnCancleClick() /清空信息txtName.setText();txtNickname.setText();txtPwd.setText();txtRePwd.setText();rbMale.setSelected(true);/單擊btnReturn的處理方法private void btnReturnClick() /隱藏當(dāng)前窗體this.setVisible(false);/FrmLogin frmLogin = new FrmLogin();JFrame frmLogin = RongQi.getFrm(FrmLogin);if (frmL

49、ogin = null) frmLogin = new FrmLogin ();RongQi.putFrm(FrmLogin, frmLogin);/顯示登錄窗體frmLogin.setVisible(true);/*FrmLogin fralogin = new FrmLogin();/顯示登錄窗體fralogin.setVisible(true);*/頭像選擇監(jiān)聽(tīng)類class ImageLIstener implements ItemListener public void itemStateChanged(ItemEvent e) JRadioButton source = (JRadi

50、oButton) e.getSource();if(source.isSelected() /顯示邊框source.setBorderPainted(true);checkedHeadImg = source.getText() + .gif;System.out.println(checkedHeadImg);else /隱藏邊框source.setBorderPainted(false);/*public static void main(String args) FrmRegist frm = new FrmRegist ();frm.setVisible(true);*/ /將FrmR

51、egist,java中的main()方法去掉,使聊天室客戶端的入口界面是登登錄界面 (3)客戶端主窗口界面代碼package com.kehuduan.聊天室;/客戶端主窗口界面import java.awt.event.*;import java.io.*;import .Socket;import java.util.StringTokenizer;import javax.swing.*;import com.容器.聊天室.Config;public class FrmMain extends JFrame implements ActionListener /FrmMain 類實(shí)現(xiàn) A

52、ctionListener 接口 實(shí)現(xiàn)發(fā)送聊天信息的功能private JSplitPane splitPaneV,splitPaneH;/分隔面板private JScrollPane spCenter;/滾動(dòng)面板private JPanel pRight; /面板private JPanel pdown; private JTextArea txtContent; /文本區(qū)private JLabel lblSend; / 輸入 標(biāo)簽private JTextField txtSend; / 輸入字符 文本框private JButton btnSend; / 發(fā)送 按鈕/三個(gè)屬性/當(dāng)前聊

53、天的用戶的用戶名public static String username = nie;/當(dāng)前聊天用戶的昵稱public static String nickname = QQ;/當(dāng)前聊天用戶的頭像public static String heading = 7.gif;private Socket socketMsg; /用于消息傳遞的套接字private Socket socketUser; /用于用戶傳遞套接字/用于消息的輸入/輸出流(用于聊天信息傳遞)private PrintWriter printMsg;private BufferedReader readMsg;private ObjectOutputStream printUser; /用于用戶信息輸入流private BufferedReader readUser; /用于用戶信息輸出流private String strMsg = null;/構(gòu)造方法public FrmMain() super(聊天室);txtContent = new JText

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!