JAVA聊天室附完整代碼_第1頁(yè)
JAVA聊天室附完整代碼_第2頁(yè)
JAVA聊天室附完整代碼_第3頁(yè)
JAVA聊天室附完整代碼_第4頁(yè)
JAVA聊天室附完整代碼_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選文檔 專(zhuān)業(yè)課程設(shè)計(jì)I基于JAVA的談天室設(shè)計(jì)與實(shí)現(xiàn)一、課題內(nèi)容和要求基于網(wǎng)絡(luò)的文本交互軟件的設(shè)計(jì)和實(shí)現(xiàn),設(shè)計(jì)和實(shí)現(xiàn)一個(gè)簡(jiǎn)潔的基于網(wǎng)絡(luò)的文本消息發(fā)送和接收軟件?;疽螅涸撥浖軐?shí)現(xiàn)文本消息發(fā)送和接收功能。提高要求(1):支持以多播方式發(fā)送文本消息,提高要求(2):性能穩(wěn)定,界面友好。按課程設(shè)計(jì)報(bào)告的要求寫(xiě)出具體的設(shè)計(jì)和實(shí)現(xiàn)報(bào)告。二、設(shè)計(jì)思路分析談天室是一項(xiàng)進(jìn)行文本交互的軟件,應(yīng)用廣泛,并且有用性強(qiáng)的一個(gè)格外典型的人機(jī)交互系統(tǒng)。在信息世界里,談天工具的使用是格外頻繁的,如MSN、QQ、校內(nèi)通之類(lèi)的談天工具很多人都正在使用。此次設(shè)計(jì)的談天室系統(tǒng)主要針對(duì)文本信息的傳送和接收,不能像QQ一樣進(jìn)行圖

2、片、音頻、視頻等文件的傳輸。雖然其功能簡(jiǎn)潔,但是在開(kāi)發(fā)技術(shù)和過(guò)程中,能夠充分學(xué)習(xí)和使用JAVA的技術(shù),進(jìn)一步培育了面對(duì)對(duì)象程序設(shè)計(jì)的思想,加深對(duì)面對(duì)對(duì)象程序設(shè)計(jì)四大特性的理解。人們?nèi)粘I钪性絹?lái)越多地使用談天室這項(xiàng)應(yīng)用來(lái)為自己的工作和學(xué)習(xí)服務(wù)。一個(gè)操作簡(jiǎn)潔,界面友好、運(yùn)行穩(wěn)定的談天室對(duì)于小型局域網(wǎng)的用戶(hù)可以起到很好的溝通作用。所謂談天室就是一個(gè)可以讓很多用戶(hù)同時(shí)相互通信的網(wǎng)上園地,個(gè)人用戶(hù)可以通過(guò)談天室將自己融入整個(gè)主流社會(huì)中。依據(jù)目前使用談天室的用戶(hù)需求顯示,用戶(hù)對(duì)于談天室主要有以下幾點(diǎn)要求:(1)談天功能:可以實(shí)時(shí)接收和發(fā)送信息,并能支持公聊和私聊的的方式,能夠查看談天記錄,談天過(guò)程中能對(duì)

3、字體、表情等進(jìn)行設(shè)定等。(2)用戶(hù)功能:可以隨時(shí)注冊(cè)和登錄及注銷(xiāo),并能選擇性加好友和刪除好友以及查看對(duì)方的開(kāi)放信息,還能看到對(duì)方的登錄狀態(tài)。(3)文件傳輸功能:用戶(hù)可以共享資源,能發(fā)送及接收文件。(4)保密功能:用戶(hù)可以設(shè)定自己的保密狀態(tài),使某些信息對(duì)于其他用戶(hù)是不行見(jiàn)的。(5)系統(tǒng)穩(wěn)定:客戶(hù)端與服務(wù)端的連接穩(wěn)定,不消滅或者少消滅連接不上的狀況。三、概要設(shè)計(jì) 1、談天室的簡(jiǎn)要功能介紹該簡(jiǎn)易談天室是為很多寵愛(ài)談天的用戶(hù)開(kāi)發(fā)設(shè)計(jì)的,和很多大型的網(wǎng)絡(luò)談天室相比該小談天室功能比較簡(jiǎn)潔,但能實(shí)現(xiàn)基本的談天功能,點(diǎn)對(duì)多、點(diǎn)對(duì)點(diǎn)談天和基本的用戶(hù)功能,登錄、注銷(xiāo)、查看在線(xiàn)用戶(hù)等。(1) 用戶(hù)設(shè)置:功能描述:用

4、戶(hù)自定義自己的登錄名,成功設(shè)置后,服務(wù)端能接收到新設(shè)置的用戶(hù)名;(2) 登錄功能:功能描述:在服務(wù)端開(kāi)啟的狀況下,用戶(hù)可以以自己自定義或者默認(rèn)的登錄名和登錄地址端口登錄到客戶(hù)端,并能在服務(wù)器端顯示登錄狀態(tài);(3) 公聊:功能描述:用戶(hù)在談天室中可以選擇與“全部人”談天,談天室中的其他在線(xiàn)用戶(hù)可以正常接收并正確顯示公聊消息。(4) 私聊:功能描述:用戶(hù)可以選擇與談天室的在線(xiàn)用戶(hù)列表中的其他用戶(hù)談天。雙方的談天記錄對(duì)于談天室的其他用戶(hù)是不行見(jiàn)的。(5) 談天心情:功能描述:用戶(hù)在談天的過(guò)程中可以選擇相應(yīng)的心情來(lái)表達(dá)自己的情感。(6) 系統(tǒng)消息:功能描述:服務(wù)端正常運(yùn)行的過(guò)程中,在談天室的每一個(gè)用戶(hù)

5、都能接收服務(wù)器端發(fā)送的信息提示信息。 (7) 用戶(hù)的狀態(tài).功能描述:每一個(gè)客戶(hù)端用戶(hù)都可以實(shí)時(shí)看到目前其他在線(xiàn)用戶(hù)的狀態(tài)。(8) 用戶(hù)注銷(xiāo):功能描述:用戶(hù)可以注銷(xiāo)自己的賬號(hào),并重新登記登錄名和地址。(9) 用戶(hù)退出:功能描述:用戶(hù)可以在正常狀況下退出談天室。(10) 服務(wù)端把握:功能描述:只有在服務(wù)端開(kāi)啟的狀況下,用戶(hù)才能登陸成功和談天;用戶(hù)設(shè)置的地址端口也必需與服務(wù)端的偵聽(tīng)端口全都,否則不能登錄。2、模塊描述本談天室分為談天室服務(wù)端和談天室客戶(hù)端,服務(wù)端與客戶(hù)端之間通過(guò)套接口Socket(TCP)連接。在java中使用套接口相當(dāng)簡(jiǎn)潔,Java API為處理套接口的通信供應(yīng)了一個(gè)類(lèi).Socke

6、t.,使得編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序相對(duì)簡(jiǎn)潔服務(wù)器接受多線(xiàn)程以滿(mǎn)足多用戶(hù)的懇求,通過(guò)JDBC與后臺(tái)數(shù)據(jù)庫(kù)連接,并通過(guò)創(chuàng)建一個(gè)ServerSocket對(duì)象來(lái)監(jiān)聽(tīng)來(lái)自客戶(hù)的連接懇求,默認(rèn)IP地址為:127.0.0.1默認(rèn)端口為8888。(1) 談天室服務(wù)端模塊圖:談天室服務(wù)端端口服務(wù)啟動(dòng)服務(wù)發(fā)送系統(tǒng)消息停止服務(wù)退出服務(wù)器消息顯示端口服務(wù):輸入要偵聽(tīng)的端口,默認(rèn)為8888;啟動(dòng)服務(wù):?jiǎn)?dòng)服務(wù)器,并開(kāi)頭在設(shè)置的端口中偵聽(tīng),客戶(hù)端用戶(hù)可以登錄并開(kāi)頭談天;停止服務(wù):關(guān)閉服務(wù)器,偵聽(tīng)結(jié)束??蛻?hù)端用戶(hù)不能再談天;發(fā)送系統(tǒng)消息:服務(wù)器端給全部人或者個(gè)別用戶(hù)發(fā)送消息。消息顯示:可以顯示全部用戶(hù)的談天記錄,和上線(xiàn)、下線(xiàn)信息。

7、退出服務(wù)器:退出程序,并停止服務(wù);(2)談天室客戶(hù)端模塊圖:談天室客戶(hù)端連接設(shè)置用戶(hù)登錄退出發(fā) 送接收談天消 息用戶(hù)注銷(xiāo)用戶(hù)設(shè)置用戶(hù)設(shè)置:用戶(hù)可以設(shè)置自己的用戶(hù)名進(jìn)行談天;連接設(shè)置:用戶(hù)可以設(shè)置自己的服務(wù)器的IP地址和端口號(hào),默認(rèn)的連接地址為:127.0.0.1:8888;用戶(hù)登錄:只能在談天室服務(wù)端已開(kāi)啟的狀況下,用戶(hù)才能登錄,用戶(hù)登錄之后才能開(kāi)頭談天,登錄后不能再修改用戶(hù)設(shè)置和連接設(shè)置;用戶(hù)注銷(xiāo):退出談天,可以連續(xù)修改用戶(hù)設(shè)置和連接設(shè)置;發(fā)送和接收談天信息:用戶(hù)可以給全部人或者個(gè)別用戶(hù)發(fā)送信息,并能看到其他用戶(hù)發(fā)送給自己或全部人的消息;退出:關(guān)閉全部談天并退出客戶(hù)端。(3) 流程圖談天室服

8、務(wù)器端口服務(wù)啟動(dòng)服務(wù)談天室客戶(hù)端登錄連接設(shè)置談天退出默認(rèn)連接地址或用戶(hù)名 設(shè)置偵聽(tīng)端口 默認(rèn)端口:8888用戶(hù)設(shè)置 設(shè)置用戶(hù)名 設(shè)置IP地址和端口四、具體設(shè)計(jì)ActionListenerChatServer-port:public static in-serverSocket:ServerSocket-messageShow:JTextArea-userLinkList:UserLinkList-showStatus:JTextField+ ChatServer():public+init():public void +startService():public void+stopServic

9、e():public void +sendStopToAll():public void+sendMsgToAll(String):public void+ sendSystemMessage():public voidJFrameThreadServerListen- server: ServerSocket- userLinkList :UserLinkList- isStop: public Boolean+ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkList)ServerReceive-textare

10、a:JTextArea- userLinkList :UserLinkList- isStop: public Boolean+ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkList)1、談天室服務(wù)器端設(shè)計(jì):ServerListen- server: ServerSocket- userLinkList :UserLinkList- isStop: public Boolean+ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkLi

11、st)談天室服務(wù)端主要包括7個(gè)文件,它們的功能如下:(1)ChatServer.java:包含名為ChatServer的public類(lèi),其主要功能為定義服務(wù)器端的界面,添加大事偵聽(tīng)與大事處理。調(diào)用ServerListen類(lèi)來(lái)實(shí)現(xiàn)服務(wù)端用戶(hù)上線(xiàn)與下線(xiàn)的偵聽(tīng),調(diào)用ServerReceive類(lèi)來(lái)實(shí)現(xiàn)服務(wù)器端的消息的收發(fā)。(2)ServerListen.java:該類(lèi)實(shí)現(xiàn)服務(wù)端用戶(hù)上線(xiàn)與下線(xiàn)的偵聽(tīng)。該類(lèi)對(duì)用戶(hù)上線(xiàn)下線(xiàn)的偵聽(tīng)是通過(guò)調(diào)用用戶(hù)鏈表類(lèi)(UserLinkList)來(lái)實(shí)現(xiàn)的,當(dāng)用戶(hù)上線(xiàn)與下線(xiàn)狀況發(fā)生變化時(shí),該類(lèi)會(huì)對(duì)主類(lèi)的界面進(jìn)行相應(yīng)的修改。(3)ServerReceive.java:該類(lèi)是實(shí)現(xiàn)服務(wù)

12、器端的消息的收發(fā)的類(lèi)。該類(lèi)分別定義了向某用戶(hù)及全部人發(fā)送消息的方法,發(fā)送的消息會(huì)顯示在主界面類(lèi)的界面上。(4)PortConf.java:該類(lèi)繼承自JDialog,是用戶(hù)對(duì)服務(wù)器端偵聽(tīng)端口進(jìn)行修改配置的類(lèi)。(5)Node.java:用戶(hù)鏈表的節(jié)點(diǎn)類(lèi),定義了鏈表中的用戶(hù)。該類(lèi)與前面所講的鏈表節(jié)點(diǎn)Node類(lèi)的功能相當(dāng)。(6)UserLinkList.java:用戶(hù)鏈表節(jié)點(diǎn)的具體實(shí)現(xiàn)類(lèi)。該類(lèi)通過(guò)構(gòu)造函數(shù)構(gòu)造用戶(hù)鏈表,定義了添加用戶(hù),刪除用戶(hù)、返回用戶(hù)數(shù)、依據(jù)用戶(hù)名查找用戶(hù)、依據(jù)索引查找用戶(hù)這5個(gè)方法。(7)Help.java:服務(wù)端程序的掛念類(lèi)。2、談天室客戶(hù)端設(shè)計(jì):ActionListenerCh

13、atClient-port:public static in-serverSocket:ServerSocket-messageShow:JTextArea-userLinkList:UserLinkList-showStatus:JTextField+ ChatClient():public+init():public void +Connect():public void+DisConnect():public void +SendMessage():public voidJFrameThreadClientReceive- socket: Socket-output:ObjectOutp

14、utStream-input:ObjectInputStream +ClientReceive(Socket,ObjectOutputStream,ObjectInputStream,JComboBox,JTextArea,JTextField )談天室客戶(hù)端主要包括5個(gè)文件,它們的功能如下:(1)ChatClient.java:包含名為ChatClient的public類(lèi),其主要功能為定義客戶(hù)端的界面,添加大事偵聽(tīng)與大事處理。該類(lèi)定義了Connect()與DisConnect()方法實(shí)現(xiàn)與服務(wù)器的連接與斷開(kāi)連接。當(dāng)?shù)卿浀街付ǖ姆?wù)器時(shí),調(diào)用ClientReceive類(lèi)實(shí)現(xiàn)消息收發(fā),同時(shí)該類(lèi)還

15、定義了SendMessage()方法來(lái)向其他用戶(hù)發(fā)送帶有表情的消息或者靜靜話(huà)。(2)ClientReceive.java:該類(lèi)是實(shí)現(xiàn)服務(wù)器端與客戶(hù)端消息收發(fā)的類(lèi)。(3)ConnectConf.java:該類(lèi)繼承自JDialog,是用戶(hù)對(duì)所要連接的服務(wù)器IP及偵聽(tīng)端口進(jìn)行修改配置的類(lèi)。(4)UserConf.java:該類(lèi)繼承自JDialog,是用戶(hù)對(duì)連接到服務(wù)器所顯示的用戶(hù)名進(jìn)行修改配置的類(lèi)。(5)Help.java:客戶(hù)端程序的掛念類(lèi)。五、測(cè)試數(shù)據(jù)及其結(jié)果分析1、首先運(yùn)行ChatServer工程文件,會(huì)消滅如下畫(huà)面2、選擇端口設(shè)置,可以設(shè)置您要偵聽(tīng)的端口號(hào),不設(shè)置將默認(rèn)端口號(hào)為8888;3、

16、選擇啟動(dòng)服務(wù),服務(wù)器開(kāi)頭在您剛才設(shè)置的端口中偵聽(tīng);4、運(yùn)行ChatClient工程文件,打開(kāi)如下畫(huà)面5、選擇用戶(hù)設(shè)置可以設(shè)置自己的登錄名6、選擇連接設(shè)置可以設(shè)置您的IP地址和端口號(hào)7、選擇登錄進(jìn)入談天室并可以開(kāi)頭跟全部人或者個(gè)別其他用戶(hù)談天,其中可以選擇心情等;8、在服務(wù)端也可以選擇給全部人或者個(gè)別用戶(hù)發(fā)送消息;留意:客戶(hù)端只有在服務(wù)端開(kāi)啟的狀況下才能正常談天。9、多人談天的服務(wù)器端與客戶(hù)端狀況代碼如下:package liaotian;/* * 用戶(hù)鏈表 */public class UserLinkList Node root;Node pointer;int count;/* * 構(gòu)造用

17、戶(hù)鏈表 */public UserLinkList()root = new Node();root.next = null;pointer = null;count = 0;/* * 添加用戶(hù) */public void addUser(Node n)pointer = root;while(pointer.next != null)pointer = pointer.next;pointer.next = n;n.next = null;count+;/* * 刪除用戶(hù) */public void delUser(Node n)pointer = root;while(pointer.nex

18、t != null)if(pointer.next = n)pointer.next = n.next;count -;break;pointer = pointer.next;/* * 返回用戶(hù)數(shù) */public int getCount()return count;/* * 依據(jù)用戶(hù)名查找用戶(hù) */public Node findUser(String username)if(count = 0) return null;pointer = root;while(pointer.next != null)pointer = pointer.next;if(pointer.username

19、.equalsIgnoreCase(username)return pointer;return null;/* * 依據(jù)索引查找用戶(hù) */public Node findUser(int index)if(count = 0) return null;if(index 0) return null;pointer = root;int i = 0;while(i index + 1)if(pointer.next != null)pointer = pointer.next;elsereturn null;i+;return pointer;package liaotian;import j

20、ava.awt.*;import java.awt.event.*;import java.io.*;import .*;import javax.swing.*;/* * 談天客戶(hù)端的主框架類(lèi) */public class ChatClient extends JFrame implements ActionListener/* * */private static final long serialVersionUID = 1L;String ip = 127.0.0.1;/連接到服務(wù)端的ip地址int port = 8888;/連接到服務(wù)端的端口號(hào)String userName = 狂狂

21、;/用戶(hù)名int type = 0;/0表示未連接,1表示已連接JComboBox combobox;/選擇發(fā)送消息的接受者JTextArea messageShow;/客戶(hù)端的信息顯示JScrollPane messageScrollPane;/信息顯示的滾動(dòng)條JLabel express,sendToLabel,messageLabel ;JTextField clientMessage;/客戶(hù)端消息的發(fā)送JCheckBox checkbox;/靜靜話(huà)JComboBox actionlist;/表情選擇JButton clientMessageButton;/發(fā)送消息JTextField

22、showStatus;/顯示用戶(hù)連接狀態(tài)Socket socket;ObjectOutputStream output;/網(wǎng)絡(luò)套接字輸出流ObjectInputStream input;/網(wǎng)絡(luò)套接字輸入流ClientReceive recvThread;/建立菜單欄JMenuBar jMenuBar = new JMenuBar();/建立菜單組JMenu operateMenu = new JMenu (操作(O);/建立菜單項(xiàng)JMenuItem loginItem = new JMenuItem (用戶(hù)登錄(I),new ImageIcon(face/98.gif);JMenuItem l

23、ogoffItem = new JMenuItem (用戶(hù)注銷(xiāo)(L),new ImageIcon(face/icon.gif);JMenuItem exitItem=new JMenuItem (退出(X),new ImageIcon(face/smile.gif);JMenu conMenu=new JMenu (設(shè)置(C);JMenuItem userItem=new JMenuItem (用戶(hù)設(shè)置(U),new ImageIcon(face/messenger_big.gif);JMenuItem connectItem=new JMenuItem (連接設(shè)置(C),new ImageI

24、con(face/Uabrand.gif);JMenu helpMenu=new JMenu (掛念(H);JMenuItem helpItem=new JMenuItem (掛念(H),new ImageIcon(face/HelpCenter.gif);/建立工具欄JToolBar toolBar = new JToolBar();/建立工具欄中的按鈕組件JButton loginButton;/用戶(hù)登錄JButton logoffButton;/用戶(hù)注銷(xiāo)JButton userButton;/用戶(hù)信息的設(shè)置JButton connectButton;/連接設(shè)置JButton exitBu

25、tton;/退出按鈕/框架的大小Dimension faceSize = new Dimension(400, 600);JPanel downPanel ;GridBagLayout girdBag;GridBagConstraints girdBagCon;public ChatClient()init();/初始化程序/添加框架的關(guān)閉大事處理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();/設(shè)置框架的大小this.setSize(faceSize);this.setVisible(true);setIconI

26、mage(getToolkit().getImage(face/love.gif);/設(shè)置運(yùn)行時(shí)窗口的位置Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setLocation( (int) (screenSize.width - faceSize.getWidth() / 2, (int) (screenSize.height - faceSize.getHeight() / 2);this.setResizable(false);this.setTitle(談天室客戶(hù)端); /設(shè)置標(biāo)題/為操作菜

27、單欄設(shè)置熱鍵VoperateMenu.setMnemonic(O);/為用戶(hù)登錄設(shè)置快捷鍵為ctrl+iloginItem.setMnemonic (I);loginItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_I,InputEvent.CTRL_MASK);/為用戶(hù)注銷(xiāo)快捷鍵為ctrl+llogoffItem.setMnemonic (L);logoffItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_L,InputEvent.CTRL_MASK);/為退出快捷

28、鍵為ctrl+xexitItem.setMnemonic (X);exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK);/為設(shè)置菜單欄設(shè)置熱鍵CconMenu.setMnemonic(C);/為用戶(hù)設(shè)置設(shè)置快捷鍵為ctrl+uuserItem.setMnemonic (U);userItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_U,InputEvent.CTRL_MASK);/為連接設(shè)置設(shè)置快捷鍵為ctrl+cc

29、onnectItem.setMnemonic (C);connectItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_C,InputEvent.CTRL_MASK);/為掛念菜單欄設(shè)置熱鍵HhelpMenu.setMnemonic(H);/為掛念設(shè)置快捷鍵為ctrl+phelpItem.setMnemonic (H);helpItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK);/* * 程序初始化函數(shù) */public v

30、oid init()Container contentPane = getContentPane();contentPane.setLayout(new BorderLayout();/添加菜單欄operateMenu.add (loginItem);operateMenu.add (logoffItem);operateMenu.addSeparator();operateMenu.add (exitItem);jMenuBar.add (operateMenu);conMenu.add (userItem);conMenu.addSeparator();conMenu.add (conne

31、ctItem);jMenuBar.add (conMenu);helpMenu.add (helpItem);jMenuBar.add (helpMenu);setJMenuBar (jMenuBar);/初始化按鈕loginButton = new JButton(登錄);logoffButton = new JButton(注銷(xiāo));userButton = new JButton(用戶(hù)設(shè)置 );connectButton = new JButton(連接設(shè)置 );exitButton = new JButton(退出 );/當(dāng)鼠標(biāo)放上顯示信息loginButton.setToolTipTe

32、xt(連接到指定的服務(wù)器);logoffButton.setToolTipText(與服務(wù)器斷開(kāi)連接);userButton.setToolTipText(設(shè)置用戶(hù)信息);connectButton.setToolTipText(設(shè)置所要連接到的服務(wù)器信息);/將按鈕添加到工具欄toolBar.add(userButton);toolBar.add(connectButton);toolBar.addSeparator();/添加分隔欄toolBar.add(loginButton);toolBar.add(logoffButton);toolBar.addSeparator();/添加分隔欄

33、toolBar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);checkbox = new JCheckBox(靜靜話(huà));checkbox.setSelected(false);actionlist = new JComboBox();actionlist.addItem(微笑地);actionlist.addItem(興奮地);actionlist.addItem(輕輕地);actionlist.addItem(生氣地);actionlist.setSelectedIndex(0);/初始時(shí)loginButton.se

34、tEnabled(true);logoffButton.setEnabled(false);/為菜單欄添加大事監(jiān)聽(tīng)loginItem.addActionListener(this);logoffItem.addActionListener(this);exitItem.addActionListener(this);userItem.addActionListener(this);connectItem.addActionListener(this);helpItem.addActionListener(this);/添加按鈕的大事偵聽(tīng)loginButton.addActionListener

35、(this);logoffButton.addActionListener(this);userButton.addActionListener(this);connectButton.addActionListener(this);exitButton.addActionListener(this);combobox = new JComboBox();combobox.insertItemAt(全部人,0);combobox.setSelectedIndex(0);messageShow = new JTextArea();messageShow.setEditable(false);/添

36、加滾動(dòng)條messageScrollPane = new JScrollPane(messageShow,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);messageScrollPane.setPreferredSize(new Dimension(400,400);messageScrollPane.revalidate();clientMessage = new JTextField(23);clientMessage.setEnabled(false);clientM

37、essageButton = new JButton();clientMessageButton.setText(發(fā)送);/添加系統(tǒng)消息的大事偵聽(tīng)clientMessage.addActionListener(this);clientMessageButton.addActionListener(this);sendToLabel = new JLabel(發(fā)送至:);express = new JLabel( 表情: );messageLabel = new JLabel(發(fā)送消息:);downPanel = new JPanel();girdBag = new GridBagLayout(

38、);downPanel.setLayout(girdBag);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 0;girdBagCon.gridwidth = 5;girdBagCon.gridheight = 2;girdBagCon.ipadx = 5;girdBagCon.ipady = 5;JLabel none = new JLabel( );girdBag.setConstraints(none,girdBagCon);downPanel.add(none);girdBagC

39、on = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 2;girdBagCon.insets = new Insets(1,0,0,0);/girdBagCon.ipadx = 5;/girdBagCon.ipady = 5;girdBag.setConstraints(sendToLabel,girdBagCon);downPanel.add(sendToLabel);girdBagCon = new GridBagConstraints();girdBagCon.gridx =1;girdBagCon.g

40、ridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_START;girdBag.setConstraints(combobox,girdBagCon);downPanel.add(combobox);girdBagCon = new GridBagConstraints();girdBagCon.gridx =2;girdBagCon.gridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_END;girdBag.setConstraints(express,girdBagCon);dow

41、nPanel.add(express);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 3;girdBagCon.gridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_START;/girdBagCon.insets = new Insets(1,0,0,0);/girdBagCon.ipadx = 5;/girdBagCon.ipady = 5;girdBag.setConstraints(actionlist,girdBagCon);downPanel.add(actio

42、nlist);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 4;girdBagCon.gridy = 2;girdBagCon.insets = new Insets(1,0,0,0);/girdBagCon.ipadx = 5;/girdBagCon.ipady = 5;girdBag.setConstraints(checkbox,girdBagCon);downPanel.add(checkbox);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;gi

43、rdBagCon.gridy = 3;girdBag.setConstraints(messageLabel,girdBagCon);downPanel.add(messageLabel);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 1;girdBagCon.gridy = 3;girdBagCon.gridwidth = 3;girdBagCon.gridheight = 1;girdBag.setConstraints(clientMessage,girdBagCon);downPanel.add(clientMessa

44、ge);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 4;girdBagCon.gridy = 3;girdBag.setConstraints(clientMessageButton,girdBagCon);downPanel.add(clientMessageButton);showStatus = new JTextField(35);showStatus.setEditable(false);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdB

45、agCon.gridy = 5;girdBagCon.gridwidth = 5;girdBag.setConstraints(showStatus,girdBagCon);downPanel.add(showStatus);contentPane.add(messageScrollPane,BorderLayout.CENTER);contentPane.add(downPanel,BorderLayout.SOUTH);/關(guān)閉程序時(shí)的操作this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEve

46、nt e)if(type = 1)DisConnect();System.exit(0););/* * 大事處理 */public void actionPerformed(ActionEvent e) Object obj = e.getSource();if (obj = userItem | obj = userButton) /用戶(hù)信息設(shè)置/調(diào)出用戶(hù)信息設(shè)置對(duì)話(huà)框UserConf userConf = new UserConf(this,userName);userConf.setVisible(true);userName = userConf.userInputName;else

47、if (obj = connectItem | obj = connectButton) /連接服務(wù)端設(shè)置/調(diào)出連接設(shè)置對(duì)話(huà)框ConnectConf conConf = new ConnectConf(this,ip,port);conConf.setVisible(true);ip = conConf.userInputIp;port = conConf.userInputPort;else if (obj = loginItem | obj = loginButton) /登錄Connect();else if (obj = logoffItem | obj = logoffButton)

48、 /注銷(xiāo)DisConnect();showStatus.setText();else if (obj = clientMessage | obj = clientMessageButton) /發(fā)送消息SendMessage();clientMessage.setText();else if (obj = exitButton | obj = exitItem) /退出int j=JOptionPane.showConfirmDialog(this,真的要退出嗎?,退出,JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if (j = J

49、OptionPane.YES_OPTION)if(type = 1)DisConnect();System.exit(0);else if (obj = helpItem) /菜單欄中的掛念/調(diào)出掛念對(duì)話(huà)框Help helpDialog = new Help(this);helpDialog.setVisible(true);public void Connect()trysocket = new Socket(ip,port);catch (Exception e)JOptionPane.showConfirmDialog(this,不能連接到指定的服務(wù)器。n請(qǐng)確認(rèn)連接設(shè)置是否正確。,提示,

50、JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);return;tryoutput = new ObjectOutputStream(socket.getOutputStream();output.flush();input = new ObjectInputStream(socket.getInputStream() );output.writeObject(userName);output.flush();recvThread = new ClientReceive(socket,output,input,combobox,messageShow,showStatus);recvThread.start();loginButton.setEnabled(false);loginItem.setEnabled(false);userButton.setEnabled(false);user

溫馨提示

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

評(píng)論

0/150

提交評(píng)論