《Java程序設(shè)計》課程設(shè)計報告簡易聊天室系統(tǒng)
《《Java程序設(shè)計》課程設(shè)計報告簡易聊天室系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《《Java程序設(shè)計》課程設(shè)計報告簡易聊天室系統(tǒng)(54頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、《Java程序設(shè)計》課程設(shè)計報告 華 北 科 技 學(xué) 院 課程設(shè)計說明書 班級: 信息與計算科學(xué)B091 學(xué)號: 姓名: 設(shè)計題目: 簡易聊天室系統(tǒng) 設(shè)計時間: 2011.12.26 至 2011.12.30 指導(dǎo)教師: 評 語:________________________________ ________________________________________ ______________
2、___________________________ _________________________________________ _________________________________________ 評閱成績:__ __評閱教師:__ ___ 目 錄 1 引 言 1 1.1課程設(shè)計選題 1 1.2課程設(shè)計的目的 1 1.3本選題的設(shè)計背景 1 2.1 功能需求 1 2.2 系統(tǒng)的開發(fā)運行環(huán)境 2 2 總體設(shè)計 2 3.1 系統(tǒng)體系結(jié)構(gòu)設(shè)計 2 3 詳細(xì)設(shè)計與實現(xiàn) 3 4.1 登錄模塊 3 4.2 客戶端
3、注冊界面模塊 5 4.3 客戶端聊天模塊 8 4.4 服務(wù)器端模塊 10 4 小結(jié)和展望 13 參 考 文 獻(xiàn) 14 附 錄 15 使用說明書 15 源程序清單 18 -52- 1 引 言 1.1課程設(shè)計選題 《簡易聊天室系統(tǒng)》 1.2課程設(shè)計的目的 使學(xué)生鞏固和加深以Java 語言為基礎(chǔ)的面向?qū)ο缶幊碳夹g(shù)理論知識的理解,提高實際動手編程能力的培養(yǎng),掌握以Java為核心的應(yīng)用軟件開發(fā)方案,達(dá)到能獨立閱讀、編制和調(diào)試一定規(guī)模的Java程序的水平。 1.3本選題的設(shè)計背景 聊天是是網(wǎng)絡(luò)中廣泛應(yīng)用的服務(wù)之一,特別是現(xiàn)在信息社會對聊天的依賴也
4、越累越大,我們品是在生活中很多人都在用的QQ就是一種很好的聊天工具,它不僅只是聊天那么簡單,其它的功能也非常強(qiáng)大?;贘ava語言在網(wǎng)絡(luò)編程中的廣泛應(yīng)用與我們基本每時每刻都在接觸的聊天系統(tǒng)。我選擇嘗試對一簡單的聊天系統(tǒng)進(jìn)行開發(fā)。 對本聊天系統(tǒng)開發(fā)的意義:網(wǎng)絡(luò)聊天系統(tǒng)交流是系統(tǒng)的關(guān)鍵目的所在,能讓我們在簡單的語句中對復(fù)雜社會的了解;交流的過程中使得人與人之間距離徹底拉近,就像面對面的交談彼此之間沒有界限,沒有差別,只有心與心的共振。 它沒有壓抑,只有爭論,就是心靈之間的一種平臺。也是另一種交友的一種重要方式。缺少它你會感覺沒什么,但是你一旦有了它你會發(fā)現(xiàn)它是那么的重要。 需求分析 在信息
5、社中,信息是第一手資料,人們聊天也是信息的傳播。曾經(jīng)的會議及面談已不再發(fā)揮主宰作用了,隨著各種聊天工具的上市,大家都對聊天產(chǎn)生濃厚的興趣,聊天系統(tǒng)的存在也有了很大價值。 2.1 功能需求 用戶角度考察系統(tǒng)應(yīng)具有哪些功能及非功能性需求。 能實現(xiàn)用戶注冊、用戶的登錄、各客戶端能連接起來,服務(wù)器能與客戶端相連實現(xiàn)用戶之間信息的發(fā)送與共享。 2.2 系統(tǒng)的開發(fā)運行環(huán)境 本系統(tǒng)開發(fā)平臺: Java 本系統(tǒng)集成開發(fā)環(huán)境:MyEclipse 本系統(tǒng)運行環(huán)境: windows 7 2 總體設(shè)計 3.1 系統(tǒng)體系結(jié)構(gòu)設(shè)計 聊天系統(tǒng) 客戶端 服務(wù)器 用戶登錄
6、 用戶注冊 建立連接 監(jiān)聽客戶 用戶數(shù)據(jù)操作 聊天 交互 3 詳細(xì)設(shè)計與實現(xiàn) 4.1 登錄模塊 1.功能設(shè)計 (1)主要實現(xiàn)用戶的登錄與注冊。 2.界面設(shè)計 圖1 登錄窗口 3模塊主要算法 (1)事件的處理方法 public void actionPerformed(ActionEvent e) { Object source = e.getSource();//"確定"按鈕 if(source == btnOk) { btnOkClick(); }//"取消"按鈕 if(source == b
7、tnCancle) { btnCancleClick(); }//“注冊”按鈕 if(source == btnRegist) { btnRegistClick(); } } (2)單擊btnOk按鈕處理方法 private void btnOkClick() { String username = txtName.getText(); String userpwd = new String(txtPwd.getPassword()); if(username.equals("")) { JOptionPane.show
8、MessageDialog(btnOk,"“用戶名”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if(userpwd.equals("")) { JOptionPane.showMessageDialog(btnOk,"“密碼”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if (userpwd.equals("haiersoft")) {//默認(rèn)密碼“haiersoft” //驗證通過,隱藏登錄窗
9、口,顯示聊天主窗口 this.setVisible(false); //FrmMain frmMain = new FrmMain(); JFrame frmMain = RongQi.getFrm("FrmMain"); if (frmMain == null) { frmMain = new FrmMain (); RongQi.putFrm("FrmMain", frmMain); } //FrmMain frmMain = new FrmMain(); frmMain.setVisible(true);
10、} else { JOptionPane.showMessageDialog(btnOk,"錯誤的用戶名或密碼","提示", JOptionPane.WARNING_MESSAGE); } } 4調(diào)試與測試 調(diào)試過程當(dāng)中,遇到密碼文本框設(shè)計沒有和實際設(shè)計符合,最后通過同學(xué)的一起解決了這個問題;在處理“取消”的事件時出現(xiàn)一點小錯誤,經(jīng)過反復(fù)調(diào)試及對程序的時間分析發(fā)現(xiàn)將“取消”這個事件的處理錯寫為“確定”按鈕。 4.2 客戶端注冊界面模塊 1.功能設(shè)計 (1)有用戶的用戶名、昵稱、密碼、性別和頭像的選擇,用這些信息來實現(xiàn)用戶的注冊。 2.界面
11、設(shè)計 圖2 注冊窗口 3模塊主要算法 (1)創(chuàng)建一個頭像柵格布局指定的行數(shù)和列中。所有的部件都享有同等的布局的尺寸。 JPanel pimg = new JPanel(new GridLayout(2,5)); ButtonGroup bgimg = new ButtonGroup(); for (int i = 0; i < ckbImage.length; i++) { ckbImage[i] = new JRadioButton(String.valueOf(i + 1), new ImageIcon("images/"+(i + 1
12、) + ".gif")); ckbImage[i].addItemListener(new ImageLIstener()); bgimg.add(ckbImage[i]); pimg.add(ckbImage[i]);//頭像讀取 } (2)單擊btnOk按鈕處理的方法 private void btnOkClick() { String username = txtName.getText(); String nickname = txtNickname.getText(); String userpwd = new String(t
13、xtPwd.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.eq
14、uals("")) { JOptionPane.showMessageDialog(btnOk,"“昵稱”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if(userpwd.equals("")) { JOptionPane.showMessageDialog(btnOk,"“密碼”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if (userpwd.length() < 6 || userpwd.l
15、ength() > 10) { JOptionPane.showMessageDialog(btnOk,"“密碼”長度范圍在6~10之間","提示", JOptionPane.WARNING_MESSAGE); return; } if (repwd.equals("")) { JOptionPane.showMessageDialog(btnOk,"“確認(rèn)密碼”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if (!repwd.equals(userpwd
16、)) { JOptionPane.showMessageDialog(btnOk,"“確認(rèn)密碼”和“密碼”必須相同","提示", JOptionPane.WARNING_MESSAGE); return; } if (userpwd.equals("haiersoft")) { JOptionPane.showMessageDialog(btnOk,"注冊成功","提示", JOptionPane.WARNING_MESSAGE); //調(diào)用btnCancleClick()方法,清空信息 btnCancleClick(
17、); } else { JOptionPane.showMessageDialog(btnOk,"注冊失敗","提示", JOptionPane.WARNING_MESSAGE); return; } } 4調(diào)試與測試 在調(diào)試用戶注冊界面曾出現(xiàn)當(dāng)選者用戶頭像時該頭像就被隱藏了,但我對程序中多次的調(diào)試,這個問題都沒有得到好的解決,最后我嘗試將頭像的大小改變這個問題就得得到圓滿的解決。 4.3 客戶端聊天模塊 1.功能設(shè)計 (1)界面分為3部分:中間部分顯示所有聊天信息,右邊顯示所有在在線客戶,底部用于信息的輸入與發(fā)送。 2.界面設(shè)
18、計 圖3 聊天窗口 3模塊算法(或重要代碼段)―――只要求給出1-2主要模塊的算法 (1) 從服務(wù)器獲取聊天信息的線程,接受服務(wù)器發(fā)送信息的方法。 class GetMsgFromServer extends Thread { //private String strMsg = null; public GetMsgFromServer() { super(); } public void run() { try{ readMsg = new BufferedReader( new Inpu
19、tStreamReader(socketMsg.getInputStream())); do{ strMsg = readMsg.readLine(); //在文本域顯示聊天信息 txtContent.append(strMsg + "\n"); } while (strMsg != null); } catch(Exception e) { e.printStackTrace(); } } } (2)事件發(fā)送的處理方法 public void actionPerform
20、ed (ActionEvent e) { Object source = e.getSource(); if (source == btnSend) { String str = txtSend.getText(); if (!str.equals("")) { //網(wǎng)絡(luò)通信錯誤 printMsg.println(nickname + ":" + str); printMsg.flush(); txtSend.setText(""); } } } 4調(diào)試與測試 測試結(jié)果的分析與討論,測試過程中遇到的主
21、要問題及采取的解決措施。 聊天室的設(shè)計是較為重要的部分,在先前簡單的界面設(shè)計時較為簡單,當(dāng)通過在該類中添加實現(xiàn)對發(fā)送按鈕監(jiān)聽時由于沒有定義該類的方法連接使得發(fā)送按鈕不能實現(xiàn)。對這個小問題的檢查較為簡單。 4.4 服務(wù)器端模塊 1.功能設(shè)計 (1)界面分為3部分:中間顯示所有聊天信息,右邊顯示所有在線用戶,底部用于發(fā)送系統(tǒng)信息。 2.界面設(shè)計 圖4 服務(wù)器窗口 3模塊算法 (1)接收客戶發(fā)送聊天信息的線程 class GetMessageThread extends Thread { private String stringFromClient = null
22、; private BufferedReader bufferedReaderFromClient; public GetMessageThread(BufferedReader buffer) throws Exception { bufferedReaderFromClient = buffer; } public void run() { try { do { stringFromClient = bufferedReaderFromClient.readLine(); msgList.addFirst(strin
23、gFromClient); } while (!stringFromClient.toLowerCase().endsWith("bye")); int index = bufferedReader.indexOf(bufferedReaderFromClient); bufferedReader.remove(index); printWriter.remove(index); } catch (Exception e) { e.printStackTrace(); } } } (2)向所有客戶端發(fā)送消息的
24、線程 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");
25、 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 (Exception e) { e.printStackTrace();
26、 } } } } 4調(diào)試與測試 服務(wù)器的是聊天系統(tǒng)中很重要的部分,這個界面設(shè)計較為簡單,擋在當(dāng)中添加一些樹組件及對客服端信息的發(fā)送時,問題接二連三的出現(xiàn),很多都出現(xiàn)異常,主要是由于在定義語句不小心出現(xiàn)專業(yè)術(shù)語錯誤。特別是將字符流放字節(jié)流劉緩沖區(qū)當(dāng)中是后由于吧new給忘記了,在結(jié)果的運行中,服務(wù)器總是接收不到客戶端信息,這個問題占據(jù)了我大半天得時間才叫我給檢查出來了。通過這句簡單的話我深感細(xì)節(jié)決定成敗。 4 小結(jié)和展望 對于本系統(tǒng)的實現(xiàn),首先是構(gòu)建一個聊天系統(tǒng)主要的框架,通過查找關(guān)于聊天系統(tǒng)的相關(guān)知識,建立一個聊天系統(tǒng)主要由服務(wù)器和客戶端,用戶的登錄界面和注冊界面,這
27、是一個很簡易的聊天系統(tǒng)。 然后通過類的建立登錄窗口類FrmLogin客戶端窗口類Frmain、注冊界面窗口類FrmRegist、服務(wù)器類ChatSever;由這些類運行出這幾個主要的窗口類,在通過一個容器類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ā)送。 最后,通過運行服務(wù)器和登錄窗口,注冊一個用戶名實現(xiàn)用戶與服務(wù)器的鏈接,就可進(jìn)行在聊天室中聊天,實現(xiàn)聊天室功能。 體會:在這個課程設(shè)計中
28、讓我體會到一個簡單的聊天系統(tǒng)也不是那么好實現(xiàn)的,只是簡單窗口的實現(xiàn)也要花費一天半時間,然后通過用戶窗口之間添加對事件的處理監(jiān)聽器接口鏈接最終實現(xiàn)簡單聊天系統(tǒng)。本系統(tǒng)能實現(xiàn)在客戶端用戶聊天窗口中顯示用戶名昵稱和頭像,服務(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ū)分不清;本人覺得在對
29、用戶信息的存儲與應(yīng)該建立一個數(shù)據(jù)庫會更好。 參 考 文 獻(xiàn) [1] 邵峰晶, Java SE程序設(shè)計高級教程 [M]. 北京:電子工業(yè)出版, 2010. [2] 耿祥義,張躍平,基于Java大學(xué)實用教程 [M]. 電子工業(yè)出版社, 2011 249-252.(宋體,小四號,1.5行距) 附 錄 使用說明書 1.打開Eclipse運行環(huán)境,打開文聊天系統(tǒng)的類ChatSever 點擊下圖箭頭所指按鈕運行服務(wù)器。 圖5 ChatSever 類窗口 運行的服務(wù)器窗口如下圖 圖6 運行服務(wù)器窗口 2.在前面的基礎(chǔ)之上在打開運行FrmLogin類,如下圖
30、 圖7 FrmLogin 類窗口 運行窗口如下 圖8 聊天登錄窗口 3.可以進(jìn)行用戶注冊是,點擊“注冊”按鈕之后彈出如下注冊窗口 圖9 注冊窗口 4.注冊之后點擊返回到登錄界面登錄用戶上線,如下圖便可進(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.
31、*; import com.容器.聊天室.RongQi; //作為客戶端登錄窗口 public class FrmLogin extends JFrame implements ActionListener { private JPanel p;//面板 private JLabel lblName, lblPwd;//姓名 密碼 標(biāo)簽 private JTextField txtName; //姓名 文本框 private JPasswordField txtPwd;// 密碼框 private JButton btnOk, btnCancle,btnRegist
32、;// "確定" "取消" "注冊" 按鈕 public FrmLogin() { super("聊天室登錄"); p = new JPanel(); p.setLayout(null); lblName = new JLabel("用戶名"); lblPwd = new JLabel("密 碼"); txtName = new JTextField(20); txtPwd = new JPasswordField(20); txtPwd.setEchoChar(*); btnOk =new JButton("確定"); btn
33、Cancle = new JButton("取消"); btnRegist = new JButton("注冊"); lblName.setBounds(30, 30, 60, 25); txtName.setBounds(95, 30, 120, 25); //初始大小和位置 lblPwd.setBounds(30,60,60,25); txtPwd.setBounds(95,60,120,25); btnOk.setBounds(30,90,60,25); btnCancle.setBounds(95,90,60,25); btnReg
34、ist.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); this.add(p); this.setS
35、ize(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();
36、 } //"取消"按鈕 if(source == btnCancle) { btnCancleClick(); } //“注冊”按鈕 if(source == btnRegist) { btnRegistClick(); } } //單擊btnOk按鈕處理方法 private void btnOkClick() { String username = txtName.getText(); String userpwd = new String(txtPwd.getPassword()); if(username.e
37、quals("")) { JOptionPane.showMessageDialog(btnOk,"“用戶名”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if(userpwd.equals("")) { JOptionPane.showMessageDialog(btnOk,"“密碼”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if (userpwd.equals("haiersoft")) {/
38、/默認(rèn)密碼“haiersoft” //驗證通過,隱藏登錄窗口,顯示聊天主窗口 this.setVisible(false); //FrmMain frmMain = new FrmMain(); //frmMain.setVisible(true); JFrame frmMain = RongQi.getFrm("FrmMain"); if (frmMain == null) { frmMain = new FrmMain (); RongQi.putFrm("FrmMain", frmMain); } //F
39、rmMain frmMain = new FrmMain(); frmMain.setVisible(true); } else { JOptionPane.showMessageDialog(btnOk,"錯誤的用戶名或密碼","提示", JOptionPane.WARNING_MESSAGE); } } //單擊btnCancle按鈕處理方法 private void btnCancleClick() { txtName.setText(""); txtPwd.setText(""); /*//隱藏當(dāng)前窗體
40、 this.setVisible(false); FrmRegist frmRegist = new FrmRegist(); //顯示注冊窗體 frmRegist.setVisible(true);*/ } //單擊btnRegist按鈕的處理方法 private void btnRegistClick() { //隱藏當(dāng)前窗體 this.setVisible(false); //FrmRegist frmRegist = new FrmRegist(); //從容器中獲取注冊窗體 JFrame frmRegist = Rong
41、Qi.getFrm("FrmGegist"); //如果為null,則創(chuàng)建注冊窗體,并放入容器中 if (frmRegist == null) { frmRegist = new FrmRegist (); RongQi.putFrm("FrmRegist", frmRegist); } //顯示注冊窗體 frmRegist.setVisible(true); } public static void main(String[] args) { //加載了一個和系統(tǒng)一樣風(fēng)格的異常 try { UIManager.set
42、LookAndFeel( UIManager.getSystemLookAndFeelClassName()); } //加載系統(tǒng)風(fēng)格 catch (Exception e) { } FrmLogin frmLogin = new FrmLogin(); frmLogin.setVisible(true); RongQi.putFrm("FrmLogin", frmLogin); } } (2)客戶端注冊窗口代碼 package com.kehuduan.聊天室; //客戶端注冊窗口 import j
43、ava.awt.GridLayout; import java.awt.event.*; import javax.swing.*; import com.容器.聊天室.RongQi; public class FrmRegist extends JFrame implements ActionListener { //繼承窗體 監(jiān)聽接口 private JPanel p; //標(biāo)簽 用戶名 昵稱 密碼 確認(rèn)密碼 性別 頭像 private JLabel lblName, lblNickname, lblPwd, lblRepwd, lblSex, lblImage;
44、 private JTextField txtName, txtNickname;// 姓名 昵稱 文本框 private JPasswordField txtPwd, txtRePwd;//密碼框 private JRadioButton rbMale, rbFemale; private JRadioButton[] ckbImage = new JRadioButton[8];//用于頭像選擇 private JButton btnOk, btnCancle, btnReturn;//確定 取消 返回 三個按鈕 //選中的頭像 private String
45、checkedHeadImg = null; public FrmRegist() {//構(gòu)造方法 super("用戶注冊"); p = new JPanel(null); lblName = new JLabel("用戶名:"); lblNickname = new JLabel("昵 稱:"); lblPwd = new JLabel("密 碼:"); lblRepwd = new JLabel("確認(rèn)密碼:"); lblSex = new JLabel("性 別:"); lblImage = new JLabel("頭 像:")
46、; 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 pim
47、g = new JPanel(new GridLayout(2,5)); ButtonGroup bgimg = new ButtonGroup(); for (int i = 0; i < ckbImage.length; i++) { ckbImage[i] = new JRadioButton(String.valueOf(i + 1), new ImageIcon("images/"+(i + 1) + ".gif")); ckbImage[i].addItemListener(new ImageLIstener()); //ckbIma
48、ge[i].addItemListener(new ImageListener()); //此處有點問題 已解決 bgimg.add(ckbImage[i]); pimg.add(ckbImage[i]);//頭像讀取 } btnOk = new JButton("確定"); btnCancle = new JButton("取消"); btnReturn = new JButton("返回"); btnOk.addActionListener(this); btnCancle.addActionListener(this);
49、 btnReturn.addActionListener(this);//添加監(jiān)聽器 ButtonGroup bgsex = new ButtonGroup(); bgsex.add(rbMale); bgsex.add(rbFemale); //性別 數(shù)組 lblName.setBounds(30,30,60,25); txtName.setBounds(95, 30, 200, 25); lblNickname.setBounds(30, 60, 60, 25); txtNickname.setBounds(95, 60, 200, 25);
50、 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, 150, 60, 25); rbFemale.setBounds(160, 150, 60, 25); lblImage.setBounds(30, 180, 60, 25);
51、 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.add(txtPwd); p.add(lblRepwd); p.add(txtR
52、ePwd); 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.set
53、DefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //事件處理方法 public void actionPerformed(ActionEvent e) { Object source = e.getSource(); //"確定"按鈕 if(source == btnOk) { btnOkClick(); } //"取消"按鈕 if(source == btnCancle) { btnCancleClick(); } //"返回"按鈕 if(source == bt
54、nReturn) { btnReturnClick(); } } //單擊btnOk按鈕處理的方法 private void btnOkClick() { String username = txtName.getText(); String nickname = txtNickname.getText(); String userpwd = new String(txtPwd.getPassword()); String repwd = new String(txtRePwd.getPassword()); int sex =
55、0; if (rbFemale.isSelected()) { sex = 1; } if (username.equals("")) { JOptionPane.showMessageDialog(btnOk,"“用戶名”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if(nickname.equals("")) { JOptionPane.showMessageDialog(btnOk,"“昵稱”不能為空","提示", JOptionPane.WA
56、RNING_MESSAGE); return; } if(userpwd.equals("")) { JOptionPane.showMessageDialog(btnOk,"“密碼”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if (userpwd.length() < 6 || userpwd.length() > 10) { JOptionPane.showMessageDialog(btnOk,"“密碼”長度范圍在6~10之間","提示", JOp
57、tionPane.WARNING_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);
58、 return; }*/ if (!repwd.equals(userpwd)) { JOptionPane.showMessageDialog(btnOk,"“確認(rèn)密碼”和“密碼”必須相同","提示", JOptionPane.WARNING_MESSAGE); return; } if (userpwd.equals("haiersoft")) { JOptionPane.showMessageDialog(btnOk,"注冊成功","提示", JOptionPane.WARNING_MESSAGE); //
59、調(diào)用btnCancleClick()方法,清空信息 btnCancleClick(); } else { JOptionPane.showMessageDialog(btnOk,"注冊失敗","提示", JOptionPane.WARNING_MESSAGE); return; } } //單擊btnCancle按鈕的處理方法 private void btnCancleClick() { //清空信息 txtName.setText(""); txtNickname.setText(""); txtPw
60、d.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 (frmLogin == null) { frmLogin = ne
61、w FrmLogin (); RongQi.putFrm("FrmLogin", frmLogin); } //顯示登錄窗體 frmLogin.setVisible(true); /*FrmLogin fralogin = new FrmLogin(); //顯示登錄窗體 fralogin.setVisible(true);*/ } //頭像選擇監(jiān)聽類 class ImageLIstener implements ItemListener { public void itemStateChanged(ItemEvent e) {
62、 JRadioButton source = (JRadioButton) e.getSource(); if(source.isSelected()) { //顯示邊框 source.setBorderPainted(true); checkedHeadImg = source.getText() + ".gif"; System.out.println(checkedHeadImg); } else { //隱藏邊框 source.setBorderPainted(false); }
63、 } } /*public static void main(String[] args) { FrmRegist frm = new FrmRegist (); frm.setVisible(true); }*/ //將FrmRegist,java中的main()方法去掉,使聊天室客戶端的入口界面是登登錄界面 } (3)客戶端主窗口界面代碼 package com.kehuduan.聊天室; //客戶端主窗口界面 import java.awt.event.*; import java.io.*; import
64、 .Socket; import java.util.StringTokenizer; import javax.swing.*; import com.容器.聊天室.Config; public class FrmMain extends JFrame implements ActionListener { //FrmMain 類實現(xiàn) ActionListener 接口 實現(xiàn)發(fā)送聊天信息的功能 private JSplitPane splitPaneV,splitPaneH;//分隔面板 private JScrollPane spCenter;//滾動面板
65、 private JPanel pRight; //面板 private JPanel pdown; private JTextArea txtContent; //文本區(qū) private JLabel lblSend; // "輸入" 標(biāo)簽 private JTextField txtSend; // "輸入字符" 文本框 private JButton btnSend; // "發(fā)送" 按鈕 //三個屬性 //當(dāng)前聊天的用戶的用戶名 public static String username = "nie"; //當(dāng)前聊
66、天用戶的昵稱 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
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案