《Java程序設計》課程設計報告簡易聊天室系統(tǒng)
《《Java程序設計》課程設計報告簡易聊天室系統(tǒng)》由會員分享,可在線閱讀,更多相關《《Java程序設計》課程設計報告簡易聊天室系統(tǒng)(54頁珍藏版)》請在裝配圖網上搜索。
1、《Java程序設計》課程設計報告 華 北 科 技 學 院 課程設計說明書 班級: 信息與計算科學B091 學號: 姓名: 設計題目: 簡易聊天室系統(tǒng) 設計時間: 2011.12.26 至 2011.12.30 指導教師: 評 語:________________________________ ________________________________________ ______________
2、___________________________ _________________________________________ _________________________________________ 評閱成績:__ __評閱教師:__ ___ 目 錄 1 引 言 1 1.1課程設計選題 1 1.2課程設計的目的 1 1.3本選題的設計背景 1 2.1 功能需求 1 2.2 系統(tǒng)的開發(fā)運行環(huán)境 2 2 總體設計 2 3.1 系統(tǒng)體系結構設計 2 3 詳細設計與實現 3 4.1 登錄模塊 3 4.2 客戶端
3、注冊界面模塊 5 4.3 客戶端聊天模塊 8 4.4 服務器端模塊 10 4 小結和展望 13 參 考 文 獻 14 附 錄 15 使用說明書 15 源程序清單 18 -52- 1 引 言 1.1課程設計選題 《簡易聊天室系統(tǒng)》 1.2課程設計的目的 使學生鞏固和加深以Java 語言為基礎的面向對象編程技術理論知識的理解,提高實際動手編程能力的培養(yǎng),掌握以Java為核心的應用軟件開發(fā)方案,達到能獨立閱讀、編制和調試一定規(guī)模的Java程序的水平。 1.3本選題的設計背景 聊天是是網絡中廣泛應用的服務之一,特別是現在信息社會對聊天的依賴也
4、越累越大,我們品是在生活中很多人都在用的QQ就是一種很好的聊天工具,它不僅只是聊天那么簡單,其它的功能也非常強大。基于Java語言在網絡編程中的廣泛應用與我們基本每時每刻都在接觸的聊天系統(tǒng)。我選擇嘗試對一簡單的聊天系統(tǒng)進行開發(fā)。 對本聊天系統(tǒng)開發(fā)的意義:網絡聊天系統(tǒng)交流是系統(tǒng)的關鍵目的所在,能讓我們在簡單的語句中對復雜社會的了解;交流的過程中使得人與人之間距離徹底拉近,就像面對面的交談彼此之間沒有界限,沒有差別,只有心與心的共振。 它沒有壓抑,只有爭論,就是心靈之間的一種平臺。也是另一種交友的一種重要方式。缺少它你會感覺沒什么,但是你一旦有了它你會發(fā)現它是那么的重要。 需求分析 在信息
5、社中,信息是第一手資料,人們聊天也是信息的傳播。曾經的會議及面談已不再發(fā)揮主宰作用了,隨著各種聊天工具的上市,大家都對聊天產生濃厚的興趣,聊天系統(tǒng)的存在也有了很大價值。 2.1 功能需求 用戶角度考察系統(tǒng)應具有哪些功能及非功能性需求。 能實現用戶注冊、用戶的登錄、各客戶端能連接起來,服務器能與客戶端相連實現用戶之間信息的發(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 總體設計 3.1 系統(tǒng)體系結構設計 聊天系統(tǒng) 客戶端 服務器 用戶登錄
6、 用戶注冊 建立連接 監(jiān)聽客戶 用戶數據操作 聊天 交互 3 詳細設計與實現 4.1 登錄模塊 1.功能設計 (1)主要實現用戶的登錄與注冊。 2.界面設計 圖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")) {//默認密碼“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調試與測試 調試過程當中,遇到密碼文本框設計沒有和實際設計符合,最后通過同學的一起解決了這個問題;在處理“取消”的事件時出現一點小錯誤,經過反復調試及對程序的時間分析發(fā)現將“取消”這個事件的處理錯寫為“確定”按鈕。 4.2 客戶端注冊界面模塊 1.功能設計 (1)有用戶的用戶名、昵稱、密碼、性別和頭像的選擇,用這些信息來實現用戶的注冊。 2.界面
11、設計 圖2 注冊窗口 3模塊主要算法 (1)創(chuàng)建一個頭像柵格布局指定的行數和列中。所有的部件都享有同等的布局的尺寸。 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,"“確認密碼”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } if (!repwd.equals(userpwd
16、)) { JOptionPane.showMessageDialog(btnOk,"“確認密碼”和“密碼”必須相同","提示", JOptionPane.WARNING_MESSAGE); return; } if (userpwd.equals("haiersoft")) { JOptionPane.showMessageDialog(btnOk,"注冊成功","提示", JOptionPane.WARNING_MESSAGE); //調用btnCancleClick()方法,清空信息 btnCancleClick(
17、); } else { JOptionPane.showMessageDialog(btnOk,"注冊失敗","提示", JOptionPane.WARNING_MESSAGE); return; } } 4調試與測試 在調試用戶注冊界面曾出現當選者用戶頭像時該頭像就被隱藏了,但我對程序中多次的調試,這個問題都沒有得到好的解決,最后我嘗試將頭像的大小改變這個問題就得得到圓滿的解決。 4.3 客戶端聊天模塊 1.功能設計 (1)界面分為3部分:中間部分顯示所有聊天信息,右邊顯示所有在在線客戶,底部用于信息的輸入與發(fā)送。 2.界面設
18、計 圖3 聊天窗口 3模塊算法(或重要代碼段)―――只要求給出1-2主要模塊的算法 (1) 從服務器獲取聊天信息的線程,接受服務器發(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("")) { //網絡通信錯誤 printMsg.println(nickname + ":" + str); printMsg.flush(); txtSend.setText(""); } } } 4調試與測試 測試結果的分析與討論,測試過程中遇到的主
21、要問題及采取的解決措施。 聊天室的設計是較為重要的部分,在先前簡單的界面設計時較為簡單,當通過在該類中添加實現對發(fā)送按鈕監(jiān)聽時由于沒有定義該類的方法連接使得發(fā)送按鈕不能實現。對這個小問題的檢查較為簡單。 4.4 服務器端模塊 1.功能設計 (1)界面分為3部分:中間顯示所有聊天信息,右邊顯示所有在線用戶,底部用于發(fā)送系統(tǒng)信息。 2.界面設計 圖4 服務器窗口 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調試與測試 服務器的是聊天系統(tǒng)中很重要的部分,這個界面設計較為簡單,擋在當中添加一些樹組件及對客服端信息的發(fā)送時,問題接二連三的出現,很多都出現異常,主要是由于在定義語句不小心出現專業(yè)術語錯誤。特別是將字符流放字節(jié)流劉緩沖區(qū)當中是后由于吧new給忘記了,在結果的運行中,服務器總是接收不到客戶端信息,這個問題占據了我大半天得時間才叫我給檢查出來了。通過這句簡單的話我深感細節(jié)決定成敗。 4 小結和展望 對于本系統(tǒng)的實現,首先是構建一個聊天系統(tǒng)主要的框架,通過查找關于聊天系統(tǒng)的相關知識,建立一個聊天系統(tǒng)主要由服務器和客戶端,用戶的登錄界面和注冊界面,這
27、是一個很簡易的聊天系統(tǒng)。 然后通過類的建立登錄窗口類FrmLogin客戶端窗口類Frmain、注冊界面窗口類FrmRegist、服務器類ChatSever;由這些類運行出這幾個主要的窗口類,在通過一個容器類RongQi來存儲用戶的信息,通過類Config讀取相應的鍵對應信息。實現簡單的窗口界面的輸出。 其次是通過在這些類當中添加事件處理,如用戶名是否錯誤,密碼是否在規(guī)定范圍之內;客戶端與服務器之間的信息傳輸實現,實現對按鈕的監(jiān)聽實現系統(tǒng)中群消息的發(fā)送。 最后,通過運行服務器和登錄窗口,注冊一個用戶名實現用戶與服務器的鏈接,就可進行在聊天室中聊天,實現聊天室功能。 體會:在這個課程設計中
28、讓我體會到一個簡單的聊天系統(tǒng)也不是那么好實現的,只是簡單窗口的實現也要花費一天半時間,然后通過用戶窗口之間添加對事件的處理監(jiān)聽器接口鏈接最終實現簡單聊天系統(tǒng)。本系統(tǒng)能實現在客戶端用戶聊天窗口中顯示用戶名昵稱和頭像,服務器端口能看見當前用戶在線狀態(tài)并顯示用戶名和昵稱。實現多個用戶之間在線信息的發(fā)送;服務器能監(jiān)測當前用戶所發(fā)信息。是現簡單的用戶聊天功能。 本系統(tǒng)有很多不足之處,再對用戶消息的發(fā)送當中只能是在一個窗口實現,就都是在一個聊天室里面,沒有私聊的實現,用戶上線后顯示的頭像不是用戶當前頭像,是按上線順序進行排列的,很難區(qū)分客服端窗口中誰是當前用戶,對于用戶下線時也存在區(qū)分不清;本人覺得在對
29、用戶信息的存儲與應該建立一個數據庫會更好。 參 考 文 獻 [1] 邵峰晶, Java SE程序設計高級教程 [M]. 北京:電子工業(yè)出版, 2010. [2] 耿祥義,張躍平,基于Java大學實用教程 [M]. 電子工業(yè)出版社, 2011 249-252.(宋體,小四號,1.5行距) 附 錄 使用說明書 1.打開Eclipse運行環(huán)境,打開文聊天系統(tǒng)的類ChatSever 點擊下圖箭頭所指按鈕運行服務器。 圖5 ChatSever 類窗口 運行的服務器窗口如下圖 圖6 運行服務器窗口 2.在前面的基礎之上在打開運行FrmLogin類,如下圖
30、 圖7 FrmLogin 類窗口 運行窗口如下 圖8 聊天登錄窗口 3.可以進行用戶注冊是,點擊“注冊”按鈕之后彈出如下注冊窗口 圖9 注冊窗口 4.注冊之后點擊返回到登錄界面登錄用戶上線,如下圖便可進行聊天了如下“痞子蔡”的界面 圖10 聊天室狀態(tài)窗口 服務器界面如下圖 圖11 服務器狀態(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;//姓名 密碼 標簽 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); //設置窗體不可改變大小 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、/默認密碼“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(""); /*//隱藏當前窗體
40、 this.setVisible(false); FrmRegist frmRegist = new FrmRegist(); //顯示注冊窗體 frmRegist.setVisible(true);*/ } //單擊btnRegist按鈕的處理方法 private void btnRegistClick() { //隱藏當前窗體 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)一樣風格的異常 try { UIManager.set
42、LookAndFeel( UIManager.getSystemLookAndFeelClassName()); } //加載系統(tǒ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; //標簽 用戶名 昵稱 密碼 確認密碼 性別 頭像 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() {//構造方法 super("用戶注冊"); p = new JPanel(null); lblName = new JLabel("用戶名:"); lblNickname = new JLabel("昵 稱:"); lblPwd = new JLabel("密 碼:"); lblRepwd = new JLabel("確認密碼:"); 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);//默認 性別為男 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); //性別 數組 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);//設置大小 this.setLocation(300,300);//設置坐標 //窗體不可改變大小 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,"“確認密碼”不能為空","提示", JOptionPane.WARNING_MESSAGE); return; } /*if (repwd.equals("")) { JOptionPane.showMessageDialog(btnOk,"確認密碼不能為空","提示",JOptionPane.WARNING_MESSAGE);
58、 return; }*/ if (!repwd.equals(userpwd)) { JOptionPane.showMessageDialog(btnOk,"“確認密碼”和“密碼”必須相同","提示", JOptionPane.WARNING_MESSAGE); return; } if (userpwd.equals("haiersoft")) { JOptionPane.showMessageDialog(btnOk,"注冊成功","提示", JOptionPane.WARNING_MESSAGE); //
59、調用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() { //隱藏當前窗體 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 類實現 ActionListener 接口 實現發(fā)送聊天信息的功能 private JSplitPane splitPaneV,splitPaneH;//分隔面板 private JScrollPane spCenter;//滾動面板
65、 private JPanel pRight; //面板 private JPanel pdown; private JTextArea txtContent; //文本區(qū) private JLabel lblSend; // "輸入" 標簽 private JTextField txtSend; // "輸入字符" 文本框 private JButton btnSend; // "發(fā)送" 按鈕 //三個屬性 //當前聊天的用戶的用戶名 public static String username = "nie"; //當前聊
66、天用戶的昵稱 public static String nickname = "QQ"; //當前聊天用戶的頭像 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; //構造方法 public FrmMain() { super("聊天室"); txtContent = new JText
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。