版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、java聊天室Java聊天室希M乍人:楊永生制作時(shí)間:2012.9.26目錄1 本文簡介22 聊天室截圖與說明 22.1 用 Java 編譯:22.2 服務(wù)器登錄界面22.3 服務(wù)器窗口 22.4 客服端登錄界面32.5 客服端窗口 33 服務(wù)器端63.1 MyServer()方法63.2 Logi n()方法103.3 Time()方法134 客戶端144.1 MyClie nt()方法144.2 Logi n()方法18Time()方法20共21頁第1頁java聊天室1本文簡介這是一個(gè)簡單的Java聊天室,僅提供給一些剛學(xué) Java的學(xué)生做實(shí)驗(yàn),本文也是僅供參考 本文代碼都有注釋,希望讀者
2、能讀懂代碼,本實(shí)驗(yàn)內(nèi)部還有一些錯(cuò)誤 ,比如只能一條一條 的發(fā)信息,不能連發(fā),希望能解決本問題的朋友能給我發(fā)信息 ,我的QQ號(hào)就是百度號(hào)!2聊天室截圖與說明2.1用Java編譯:本代碼有七個(gè)類,放在六個(gè)java文件中,類名在下方希望讀者自己觀看2.2服務(wù)器登錄界面要先運(yùn)行服務(wù)器端的程序用戶名:y密碼:1用戶名密碼可以自己設(shè)定點(diǎn)擊確定可以登錄,2秒后到服務(wù)端界面2.3服務(wù)器窗口共21頁第2頁java聊天室共21頁第3頁java聊天室聊天室的IP為本機(jī)的網(wǎng)絡(luò)虛擬IP,在任何電腦上都能用,端口應(yīng)設(shè)置在1024以后,2.4客服端登錄界面和服務(wù)器端的登錄一樣2.5客服端窗口共21頁第#頁java聊天室當(dāng)?shù)?/p>
3、錄上后客服端就顯示已經(jīng)連接了 ,此時(shí)服務(wù)器端的窗口如下由于本程序設(shè)計(jì)的不是很完整,具體的聊天要先從客服端開始:在客服端輸入一條聊天內(nèi)容后按確定,在服務(wù)器端就可以收到信息,之后客戶端不能輸 入了,要等待服務(wù)器端來信息后才能繼續(xù)輸入信息想要結(jié)束聊天,直接可以關(guān)閉窗口 ,也可以輸入ye 后斷開聊天共21頁第5頁java聊天室有興趣的朋友可以繼續(xù)完善本實(shí)驗(yàn)程序3服務(wù)器端3.1 MyServer()方法/服務(wù)器端代碼import java.awt.*;import java.awt.eve nt.Acti on Eve nt;import java.awt.eve nt.Actio nListe ner
4、;import java.io.BufferedReader;import java.i o.ln putStreamReader;import java.io.Pri ntWriter;import java .n et.ServerSocket;import java .n et.Socket;import java.text.DateFormat;import java.util.Date;import javax.swi ng.*;public class MyServer窗體實(shí)現(xiàn)類protected JLabel lab10;/全體變量,做傳遞的一個(gè)組件String s=已經(jīng)成功連接
5、;/初始字符串,在兩個(gè)聊天窗口鏈接成功時(shí)輸出 同時(shí)作為兩個(gè)窗口傳遞字符的一個(gè)變量共21頁第6頁java聊天室/構(gòu)造方法public MyServer()try/異常處理tryJFrame frame=new JFrame服務(wù)器窗口 );/設(shè)置窗體frame.setLayout (n ull);/讓布局管理器為空,使用絕對(duì)定位Font fnt=new Font(Serief,Font.PLAIN,40); 字體設(shè)置 Font fnt1= new Font(Serief,Font.PLAIN,20); 字體設(shè)置我的用戶名顯示JLabel lab仁new JLabel(服務(wù)器名:,JLabel.LE
6、FT);/標(biāo)簽實(shí)例化,文本左對(duì)齊lab1.setBou nds(8, 10, 100, 20); 設(shè)置組件位置及大小 frame.add(lab1);/ 添加組件JTextField text2=new JTextField(30); /單行文本輸入組件 text2.setBou nds(150, 10, 200, 20);設(shè)置組件位置及大小 text2.setE nabled(false);/文本條不可編輯 text2.setText(笑笑聊天室);/輸入內(nèi)容 text2.setFo nt(fnt1);設(shè)置字體 frame.add(text2);/添 加組件/服務(wù)器IP顯示JLabel la
7、b2=new JLabel(當(dāng)前服務(wù)器 IP:,JLabel.LEFT); 標(biāo)簽實(shí)例化, 文本左對(duì)齊lab2.setBou nds(8, 45, 100, 20);設(shè)置組件位置及大小 frame.add(lab2);/添 加組件JTextField text3=new JTextField(30);/單行文本輸入組件 text3.setBou nds(150, 45, 200, 20);設(shè)置組件位置及大小 text3.setE nabled(false); / 文本不可編輯 text3.setText(127.0.0.1);/輸入內(nèi)容 text3.setFo nt(fnt1);設(shè)置字體 fra
8、me.add(text3); /添加組件/服務(wù)器端口顯示JLabel lab3=new JLabel(當(dāng)前服務(wù)器端口 :,JLabel.LEFT); 標(biāo)簽實(shí)例化, 文本左對(duì)齊lab3.setBou nds(8, 80, 100, 20);設(shè):置組件位置及大小frame.add(lab3);/添 加組件JTextField text4=new JTextField(30);/單行文本輸入組件 text4.setBou nds(150, 80, 200, 20);設(shè)置組件位置及大小 text4.setE nabled(false);/文 本不可編輯 text4.setText(8888);/輸入內(nèi)
9、容 text4.setFo nt(fnt1);設(shè)置字體 frame.add(text4);/添 加組件/聊天記錄顯示JLabel lab4=new JLabel(聊天記錄如下:,JLabel.LEFT);/標(biāo)簽實(shí)例化,文本左對(duì)齊lab4.setBou nds(8, 115, 100, 20);設(shè)置組件位置及大小 frame.add(lab4);/添加組件fin al JTextArea text 仁n ew JTextArea();/侈行文本輸入組件text1.setE nabled(false);/文本不可編輯text1.setL in eWrap(true);/ 自動(dòng)換行JScrollPa
10、 nescr=newJScrollPa ne(text1,JScrollPa ne.VERTICAL_SCROLLBAR_ALWAYS,JScrollPa ne.H ORIZONTAL_SCROLLBAR_ALWAYS);/設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示scr.setBou nds(8, 150, 450, 350);設(shè)置組件位置及大小 frame.add(scr);/添 加組件/聊天輸入窗口及確定JLabel lab5=new JLabel(請(qǐng)輸入聊天內(nèi)容:,JLabel.LEFT); 標(biāo)簽實(shí)例化, 文本左對(duì)齊lab5.setBou nds(8, 500, 100, 20);設(shè)置組件位
11、置及大小frame.add(lab5);/添 加組件fin al JTextArea text5=new JTextArea();/多 行文本輸入組件text5.setL in eWrap(true);/ 自動(dòng)換行JScrollPa nescr2=newJScrollPa ne(text5,JScrollPa ne.VERTICAL_SCROLLBAR_ALWAYS,JScrollPa ne.H ORIZONTAL_SCROLLBAR_ALWAYS);/設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯 示scr2.setBou nds(150, 500, 300, 50);設(shè)置組件位置及大小 frame.a
12、dd(scr2);/添 加組件final JButton but=new JButto n(確定);/ 設(shè)置確定按鈕but.setFo nt(fnt);/添加字體設(shè)置but.setBou nds(480, 500, 200, 50);設(shè)置組件位置及大小 but.addActio nListe ner(n ew Actio nListe ner() / 采用內(nèi)部匿名類 public void action Performed(Acti on Eve nt e) if(e.getSource()=but) /判斷觸發(fā)器源是否是提交按鈕 text1.appe nd(笑笑:+lab10.getText
13、()+n );/ 在聊天記錄上 添加文本text1.appe nd(text5.getText()+n);/ 將輸入的聊天內(nèi)容輸出在聊天記錄上s=text5.getText();/ 得到聊天內(nèi)容text5.setText();/ 將聊天窗口內(nèi)容設(shè)置為空);frame.add(but);/添 加組件/當(dāng)前時(shí)間顯示JLabel lab7=new JLabel(時(shí)間顯示:,JLabel.LEFT);/標(biāo)簽實(shí)例化,文本左 對(duì)齊lab7.setBou nds(450, 20, 100, 20);設(shè)置組件位置及大小frame.add(lab7);/添 加組件DateFormat df=DateFormat
14、.getDateTimel nsta nce();取得系統(tǒng)時(shí)間Stri ng df2= df.format( new Date();/ 將時(shí)間轉(zhuǎn)換成字符串JLabel Iab8=new JLabel(df2,JLabel.LEFT);/標(biāo)簽實(shí)例化,文本左對(duì)齊 lab8.setBou nds(520, 20, 130, 20);設(shè)置組件位置及大小 frame.add(lab8);/添 加組件lab10=lab8;/傳遞時(shí)間顯示,以便能在聊天記錄上顯示記錄時(shí)間new Time(lab8); 使時(shí)間動(dòng)態(tài)顯示用戶列表顯示JLabel lab6=new JLabel(用戶列表:,JLabel.LEFT)
15、;/標(biāo)簽實(shí)例化,文本左 對(duì)齊lab6.setBou nds(500, 40, 100, 20);設(shè)置組件位置及大小frame.add(lab6);/添 加組件JTextArea text6=new JTextArea();/標(biāo)簽實(shí)例化,文本左對(duì)齊text6.setE nabled(false);/文本不可編輯text6.setL in eWrap(true);/ 自動(dòng)換行JScrollPa nescr3=newJScrollPa ne(text6,JScrollPa ne.VERTICAL_SCROLLBAR_ALWAYS,JScrollPa ne.H ORIZONTAL_SCROLLBAR_
16、ALWAYS);設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯 示scr3.setBou nds(460, 70, 220, 420);設(shè)置組件位置及大小 frame.add(scr3);/添 加組件/窗口的屬性frame.setSize(700,600);窗 口大小frame.getCo nte ntPa ne().setBackgrou nd(Color.pi nk);窗 口的背景顏色 frame.setDefaultCloseOperatio n(JFrame.EXIT_ON_CLOSE);/關(guān)閉窗口時(shí) 關(guān)閉程序一 一frame.setLocatio n(100,50);/在電腦桌面上出現(xiàn)的位置 f
17、rame.setVisible(true);/濕示窗口連個(gè)窗口連接/建立Server Socket并等待連接請(qǐng)求ServerSocket server =new ServerSocket(8889);Socket socket=server.accept();連接建立,通過Socket獲取連接上的輸入/輸出流BufferedReaderin=newBufferedReader( newIn putStreamReader(socket.getl nputStream();final Prin tWriter out =n ew Prin tWriter(socket.getOutputStre
18、am();先讀取Client發(fā)送的數(shù)據(jù),然后從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)發(fā)送給Client當(dāng)接收到bye時(shí)關(guān)閉連接String s1=,s2=;標(biāo)志字符串,作為傳遞字符串使用while(!(s 仁i n.readL in e().equals(bye)得到其他窗口傳遞的字符串,并判斷是否結(jié)束text6.setText(可可在線);/當(dāng)連接成功是在用戶列表中輸出用戶名字if(!s1.equals()/如果傳遞的字符串不為空textl.appe nd可可:+lab10.getText()+n);/ 在聊天記錄上添加文本textl. appe nd(s1+n);/將輸入的聊天內(nèi)容輸出在聊天記錄上s2=s;/將
19、在聊天窗口中得到的字符串傳遞給輸出字符串 for(;s2.equals()|s2.equals( null);s2=s)當(dāng)傳遞的字符串為空時(shí) 等待用戶輸入聊天內(nèi)容s=; 將在聊天窗口中得至曲勺字符串設(shè)為空if(!s2.equals()&!s2.equals(null) s2 不為空時(shí)做 out.pri ntln( s2);/向其他窗口輸出字符串out.flush();輸出聊天內(nèi)容/關(guān)閉連接in .close(); out.close(); socket.close(); server.close(); catch(Excepti on e) /main函數(shù)public static void
20、main( Stri ng args) new Logi n();/ 登錄實(shí)現(xiàn)3.2 Login()方法 import java.awt.event.WindowAdapter; import java.awt.eve nt.Acti on Liste ner ; import java.awt.eve nt.Wi ndowEve nt ; import java.awt.eve nt.Acti on Eve nt ; import java.awt.Color ;import java.awt.F ont ;import javax.sw in g.JFrame ; import javax
21、.swi ng.J Butt on ;共21頁第11頁java聊天室import javax.sw in g.JLabel ;import javax.sw in g.JTextField ; import javax.sw in g.JPasswordField ;用戶名和密碼設(shè)置class Logi nCheck設(shè)置登錄密碼 private Stri ng n ame ;/用戶名 private Stri ng password ;/密碼構(gòu)造方法public Logi nCheck(Stri ng n ame,Stri ng passwordthis. name =name ;/傳遞用戶名
22、this.password = password ;傳遞密碼 驗(yàn)證用戶名和密碼public boolean validate()/ 驗(yàn)證方法if(y.equals( name )&1.equals(password) / 判斷用戶名和密碼是否 正確return true ;返回 trueelsereturn false ;/返回 false;/登錄窗口class Logi n登錄類名boolean f=false;/按登錄時(shí)設(shè)置的一個(gè)標(biāo)志private JFrame frame = new JFrame(Welcome To MLDN) ; /設(shè)置窗體private JButton submi
23、t = new JButto n(登陸);/ 設(shè)置登錄按鈕private JButton reset = new JButto n(重置);/ 設(shè)置重置按鈕private JLabel nameLab = new JLabel(服務(wù)器:);/標(biāo)簽實(shí)例化private JLabel passLab = new JLabel(密碼:);/ 標(biāo)簽實(shí)例化private JLabel infoLab = new JLabel(服務(wù)器登陸系統(tǒng));/標(biāo)簽實(shí)例化private JTextField nameText = new JTextField(10) ;/單行文本輸入條private JPassword
24、FieldpassText = new JPasswordField();單行密碼文本輸入 條public Login()/登錄窗口構(gòu)造方法Font fnt = new Font(Serief,Font.lTALIC + Font.BOLD,12) ;/ 設(shè)置字體 infoLab.setFont(fnt) ; /設(shè)置標(biāo)簽的顯示文字submit.addActio nListe ner(n ew Actio nListe ner() / 采用內(nèi)部匿名類 public void acti on Performed(Act ion Eve nt e) if(e.getSource()=submit)判
25、斷觸發(fā)器源是否是提交按鈕Stri ng tn ame = nameText.getText() ; /得 到輸入的用戶名 String tpass = new String(passText.getPassword() ;/得至U輸入 的密碼,此時(shí)通過getPassageword方法返回的是字符數(shù)組Log in Check log = new Log in Check(t name,tpass) ;/ 實(shí)例化 Logi nCheck對(duì)象,傳入輸入的用戶名和密碼if(log.validate()/對(duì)用戶名和密碼進(jìn)行驗(yàn)證共21頁第11頁try線程異常處理tryThread.sleep(2000);
26、 2 秒后打開聊天窗口f=true;登錄成功后的表示項(xiàng)為trueframe.dispose(); / 關(guān)閉本窗口catch(Exception ee) 異常獲取elseinfoLab.setText(登陸失敗,錯(cuò)誤的用戶名或密碼!) ;/登錄失敗); 一reset.addActio nListe ner(new Actio nListe ner() / 采用內(nèi)部匿名類 public void action Performed(Acti on Eve nt e) if(e.getSource()=reset) 判斷觸發(fā)器源是否是提交按鈕 n ameText.setText() ;/設(shè)置文本框中的
27、內(nèi)容 passText.setText() ;/設(shè)置文本框中的內(nèi)容 infoLab.setText(”服務(wù)器登陸系統(tǒng));/恢復(fù)標(biāo)簽顯示 );frame.addWi ndowListe ner( new Win dowAdapter() 加入窗口監(jiān)聽public void wi ndowClosi ng(Wi ndowEve nt e) ; /加入事件frame.setLayout(null) ;/使用絕對(duì)定位n ameLab.setBou nds(5,5,60,20);設(shè)置標(biāo)簽的位置及大小 passLab.setBou nds(5,30,60,20)設(shè)置標(biāo)簽的位置及大小 in foLab.se
28、tBou nds(5,65,220,30) ;/設(shè)置標(biāo)簽的位置及大小 n ameText.setBou nds(65,5,100,20)設(shè)置文本域的位置及大小 passText.setBou nds(65,30,100,20)設(shè)置密碼域的位置及大小 submit.setBou nds(165,5,60,20);設(shè)置按鈕的位置及大小 reset.setBou nds(165,30,60,20)設(shè)置按鈕的位置及大小 frame.add( nameLab) ;/向窗體加入標(biāo)簽 frame.add(passLab) ;/向 窗體加入標(biāo)簽 frame.add(i nfoLab);向窗體加入標(biāo)簽 fram
29、e.add( nameText) ;/向 窗體加入文本框 frame.add(passText);向窗體加入密碼框 frame.add(submit);向窗體加入按鈕 frame.add(reset) ;/向 窗體加入按鈕 frame.setSize(280,130) ;/設(shè)置窗體大小 frame.getCo nten tPa ne().setBackgro un d(Color.gree n) 設(shè)置窗體的背景顏 色frame.setLocatio n(300,200) ;/設(shè)置窗體在電腦桌面上的位置 frame.setVisible(true);顯示窗口 while(f=false) /當(dāng)?shù)?/p>
30、錄失敗時(shí),一直循環(huán)運(yùn)行,共21頁第12頁java聊天室new MyServer();顯示窗體頁面3.3 Time()方法 import java.awt.eve nt.Acti on Eve nt;import java.awt.eve nt.Actio nListe ner;import java.text.SimpleDateFormat;import java.util.Date;import javax.sw in g.JLabel;import javax.swi ng.Timer;/時(shí)間類public class Time public Time(JLabel time) / 構(gòu)造
31、方法 this.setTimer(time); 設(shè)置時(shí)間public void setTimer(JLabel time)/ 設(shè)置時(shí)間方法final JLabel varTime = time;傳遞組件Timer timeActio n = new Timer(1000, new Actio nListe ner() / 時(shí)間監(jiān)聽public void actio nPerformed(Actio nEve nt e) long timemillis = System.curre ntTimeMillis();得至 U系統(tǒng)時(shí)間SimpleDateFormat df = new SimpleDa
32、teFormat(yyyy-MM-dd HH:mm:ss); 轉(zhuǎn)換日期顯示格式varTime.setText(df.format(new Date(timemillis);輸出得到的時(shí)間);timeActio n.start();/ 開啟線程4客戶端4.1 MyClient()方法 import java.awt.*;import java.awt.eve nt.Acti on Eve nt;import java.awt.eve nt.Actio nListe ner;import java.io.BufferedReader;import java.i o.ln putStreamRead
33、er;import java.io.Pri ntWriter;import java .n et.Socket;import java.text.DateFormat;import java.util.Date;import javax.swi ng.*;public class MyClie ntprotected JLabel lab10;/全體變量,做傳遞的一個(gè)組件String s=連接成功;/初始字符串,在兩個(gè)聊天窗口鏈接成功時(shí)輸出,同時(shí)作為 兩個(gè)窗口傳遞字符的一個(gè)變量構(gòu)造方法public MyClie nt()JFrame frame=new JFrame(用戶端窗口 );設(shè)置窗體f
34、rame.setLayout (n ull);/讓布局管理器為空,使用絕對(duì)定位Font fnt=new Font(Serief,Font.PLAIN,40); 字體設(shè)置 Font fnt1= new Font(Serief,Font.PLAIN,20);/ 字體設(shè)置我的用戶名顯示JLabel lab1= new JLabel(服務(wù)器名:,JLabel.LEFT);/標(biāo)簽實(shí)例化,文本左對(duì)齊lab1.setBou nds(8, 10, 100, 20); 設(shè)置組件位置及大小 frame.add(lab1);/ 添加組件JTextField text2=new JTextField(30); /單行
35、文本輸入組件 text2.setBou nds(150, 10, 200, 20);設(shè)置組件位置及大小 text2.setE nabled(false);/文本條不可編輯 text2.setText(可可聊天室);/輸入內(nèi)容 text2.setFo nt(fnt1);設(shè)置字體 frame.add(text2);/添 加組件/服務(wù)器IP顯示JLabel lab2=new JLabel(當(dāng)前服務(wù)器 IP:,JLabel.LEFT); 標(biāo)簽實(shí)例化, 文本左對(duì)齊lab2.setBou nds(8, 45, 100, 20);設(shè)置組件位置及大小frame.add(lab2);/添 加組件共21頁第15頁
36、java聊天室JTextField text3=new JTextField(30);/單行文本輸入組件 text3.setBou nds(150, 45, 200, 20);/設(shè)置組件位置及大小 text3.setE nabled(false); / 文本不可編輯 text3.setText(127.0.0.1);/輸入內(nèi)容 text3.setFo nt(fnt1);設(shè)置字體 frame.add(text3); /添加組件/服務(wù)器端口顯示JLabel lab3=new JLabel(當(dāng)前服務(wù)器端口 :,JLabel.LEFT); 標(biāo)簽實(shí)例化, 文本左對(duì)齊lab3.setBou nds(8,
37、80, 100, 20);設(shè)置組件位置及大小frame.add(lab3);/添 加組件JTextField text4=new JTextField(30);/單行文本輸入組件 text4.setBou nds(150, 80, 200, 20);/設(shè)置組件位置及大小 text4.setE nabled(false);/文 本不可編輯 text4.setText(8888);/輸入內(nèi)容 text4.setFo nt(fnt1);設(shè)置字體frame.add(text4);/添 加組件/聊天記錄顯示JLabel lab4=new JLabel(聊天記錄如下:,JLabel.LEFT); /標(biāo)簽實(shí)
38、例化, 文本左對(duì)齊lab4.setBou nds(8, 115, 100, 20);/設(shè)置組件位置及大小 frame.add(lab4);/添 加組件fin al JTextArea text 仁n ew JTextArea();/侈行文本輸入組件 text1.setE nabled(false);/文本不可編輯 text1.setL in eWrap(true);/ 自動(dòng)換行JScrollPa nescr=newJScrollPa ne(text1,JScrollPa ne.VERTICAL_SCROLLBAR_ALWAYS,JScrollPa ne.H ORIZONTAL_SCROLLBA
39、R_ALWAYS); /設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終 顯示scr.setBou nds(8, 150, 450, 350);設(shè)置組件位置及大小 frame.add(scr);/添加組件/聊天輸入窗口及確定JLabel lab5=new JLabel(請(qǐng)輸入聊天內(nèi)容:,JLabel.LEFT); 標(biāo)簽實(shí)例化, 文本左對(duì)齊lab5.setBou nds(8, 500, 100, 20);設(shè)置組件位置及大小 frame.add(lab5);/添 加組件fin al JTextArea text5=new JTextArea();/多 行文本輸入組件 text5.setL in eWrap(tru
40、e);/ 自動(dòng)換行JScrollPa nescr2=newJScrollPa ne(text5,JScrollPa ne.VERTICAL_SCROLLBAR_ALWAYS,JScrollPa ne.H ORIZONTAL_SCROLLBAR_ALWAYS);/設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯 示scr2.setBou nds(150, 500, 300, 50);設(shè)置組件位置及大小 frame.add(scr2);/添加組件final JButton but=new JButto n(確定);/ 設(shè)置確定按鈕共21頁第15頁but.setFo nt(fnt);/添加字體設(shè)置but.setB
41、ou nds(480, 500, 200, 50);設(shè)置組件位置及大小 but.addActio nListe ner(n ew Actio nListe ner() / 采用內(nèi)部匿名類 public void action Performed(Acti on Eve nt e) if(e.getSource()=but) /判斷觸發(fā)器源是否是提交按鈕text1.appe nd( 可可:+lab10.getText()+n );/ 在聊天記錄上 添加文本text1.appe nd(text5.getText()+n);/將輸入的聊天內(nèi)容輸出在 聊天記錄上s=text5.getText();/得
42、到聊天內(nèi)容text5.setText();/將聊天窗口內(nèi)容設(shè)置為空);frame.add(but);/添 加組件/當(dāng)前時(shí)間顯示JLabel lab7=new JLabel(時(shí)間顯示:,JLabel.LEFT);/標(biāo)簽實(shí)例化,文本左 對(duì)齊lab7.setBou nds(450, 20, 100, 20);設(shè)置組件位置及大小 frame.add(lab7);/添 加組件DateFormat df=DateFormat.getDateTimel nsta nce();取得系統(tǒng)時(shí)間 Stri ng df2= df.format( new Date();/ 將時(shí)間轉(zhuǎn)換成字符串JLabel lab8=ne
43、w JLabel(df2,JLabel.LEFT);/標(biāo)簽實(shí)例化,文本左對(duì)齊 lab8.setBou nds(520, 20, 130, 20);設(shè)置組件位置及大小 frame.add(lab8);/添 加組件lab10=lab8; /傳遞時(shí)間顯示,以便能在聊天記錄上顯示記錄時(shí)間new Time(lab8); 使時(shí)間動(dòng)態(tài)顯示用戶列表顯示JLabel lab6=new JLabel(用戶列表:,JLabel.LEFT);/標(biāo)簽實(shí)例化,文本左 對(duì)齊lab6.setBou nds(500, 40, 100, 20);設(shè)置組件位置及大小 frame.add(lab6);/添 加組件JTextArea
44、text6=new JTextArea();/標(biāo)簽實(shí)例化,文本左對(duì)齊 text6.setE nabled(false);/文本不可編輯 text6.setL in eWrap(true);/ 自動(dòng)換行JScrollPa nescr3=newJScrollPa ne(text6,JScrollPa ne.VERTICAL_SCROLLBAR_ALWAYS,JScrollPa ne.H ORIZONTAL_SCROLLBAR_ALWAYS);設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯 示scr3.setBou nds(460, 70, 220, 420);設(shè)置組件位置及大小 frame.add(scr3)
45、;/添加組件/窗口的屬性frame.setSize(700,600);窗 口大小frame.getCo nte ntPa ne().setBackgrou nd(Color.pi nk);窗 口的背景顏色共21頁第16頁java聊天室frame.setDefaultCloseOperatio n(JFrame.EXIT_ON_CLOSE);/關(guān)閉窗口時(shí) 關(guān)閉程序一 一frame.setLocatio n(10,10);/在 電腦桌面上出現(xiàn)的位置 frame.setVisible(true);/顯示窗口try /try異常處理Socket socket=new Socket(127.0.0.1,
46、8889);發(fā)出連接請(qǐng)求建立連接,通過Socket獲得連接上的輸入/輸出流Prin tWriter out =n ew Prin tWriter(socket.getOutputStream();BufferedReader in = new BufferedReader( new In putStreamReader(socket.getl nputStream();從標(biāo)準(zhǔn)輸入中讀取一行,發(fā)送Server端,當(dāng)用戶輸入bye時(shí)結(jié)束連接do while(s.equals()|s.equals( null) 當(dāng)傳遞的字符串為空時(shí)等 待用戶輸入聊天內(nèi)容if(!s.equals()&!s.equal
47、s(null)/s 不為空時(shí)做out.pri ntl n( s);向其他窗口輸出字符串s=;/將在聊天窗口中得到的字符串設(shè)為空out.flush();/輸出聊天內(nèi)容 if(!s.equals(bye) /判斷聊天是否結(jié)束String s3; 得到其他窗口傳來的字符串while( (s3=in.readLine().equals(n)&s3.equals(null)&s3.equals() 判斷 s3 是否為空,為空時(shí)等待 text6.setText(笑笑在線);當(dāng)連接成功是在用戶列 表中輸出用戶名字if(!s3.equals(n)&! s3.equals( null)&!s3.equals()
48、/s3 不為空時(shí)做text1.appe nd(笑笑:+lab10.getText()+n );/ 在聊 天記錄上添加文本text1.appe nd(s3+n);/將輸入的聊天內(nèi)容輸出在聊天記錄上while(!s.equals(bye); 判斷是否結(jié)束/關(guān)閉連接out.close();in .close();socket.close();catch(Excepti on e)共21頁第17頁java聊天室/main函數(shù)public static void mai n(Stri ng args) new Logi n();/ 登錄實(shí)現(xiàn)4.2 Login()方法 import java.awt.ev
49、e nt.Wi ndowAdapter ;import java.awt.eve nt.Acti on Liste ner ;import java.awt.eve nt.Wi ndowEve nt ;import java.awt.eve nt.Acti on Eve nt ;import java.awt.Color ;import java.awt.F ont ;import javax.sw in g.JFrame ;import javax.swi ng.J Butt on ;import javax.sw in g.JLabel ;import javax.sw in g.JTex
50、tField ;import javax.sw in g.JPasswordField ;用戶名和密碼設(shè)置class Logi nCheck設(shè)置登錄密碼 private Stri ng n ame ;/用戶名 private Stri ng password ;/密碼構(gòu)造方法public Logi nCheck(Stri ng n ame,Stri ng password) this. name = n ame ;/傳遞用戶名 this.password = password ;傳遞密碼驗(yàn)證用戶名和密碼public boolean validate()/ 驗(yàn)證方法/判斷用戶名和密碼是否if(y
51、.equals( name )&1.equals(password) 正確return true ;返回 trueelsereturn false ;/返回 false;/登錄窗口class Logi n登錄類名boolean f=false;/按登錄時(shí)設(shè)置的一個(gè)標(biāo)志共21頁第18頁private JFrame frame = new JFrame(Welcome To MLDN) ; /設(shè)置窗體private JButton submit = new JButto n(登陸);/ 設(shè)置登錄按鈕private JButton reset = new JButto n(重置);/ 設(shè)置重置按鈕p
52、rivate JLabel nameLab = new JLabel(用戶名:);/標(biāo)簽實(shí)例化private JLabel passLab = new JLabel(密碼:);/ 標(biāo)簽實(shí)例化private JLabel infoLab = new JLabel(用戶登陸系統(tǒng));/標(biāo)簽實(shí)例化private JTextField nameText = new JTextField(10) ;/單行文本輸入條private JPasswordFieldpassText = new JPasswordField() ;/單行密碼文本輸入 條public Login()/登錄窗口構(gòu)造方法Font fnt
53、 = new Font(Serief,Font.lTALIC + Font.BOLD,12) ;/ 設(shè)置字體 infoLab.setFont(fnt) ; /設(shè)置標(biāo)簽的顯示文字submit.addActio nListe ner(n ew Actio nListe ner() / 采用內(nèi)部匿名類 public void acti on Performed(Act ion Eve nt e)if(e.getSource()=submit)判斷觸發(fā)器源是否是提交按鈕Stri ng tn ame = nameText.getText() ; /得 到輸入的用戶名 String tpass = new
54、 String(passText.getPassword() ;/得至U輸入 的密碼,此時(shí)通過getPassageword方法返回的是字符數(shù)組Log in Check log = new Log in Check(t name,tpass) ;/ 實(shí)例化 Logi nCheck對(duì)象,傳入輸入的用戶名和密碼if(log.validate()/對(duì)用戶名和密碼進(jìn)行驗(yàn)證tryThread.sleep(2000); /2 秒后打開聊天窗口 f=true;登錄成功后的表示項(xiàng)為trueframe.dispose(); / 關(guān)閉本窗口catch(Exception ee)/ 異常獲取elseinfoLab.setText(登陸失敗,錯(cuò)誤的用戶名或密碼!) ;/登錄失敗); 一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度航空航天技術(shù)轉(zhuǎn)移合同5篇
- 2025年度湖南事業(yè)單位勞動(dòng)合同續(xù)簽及待遇調(diào)整合同
- 2025幼兒園幼兒環(huán)保教育課程聘任教師合同
- 2025年度幼兒園健康與安全教育課程聘任教師合同
- 2025年度快餐外賣品牌區(qū)域代理權(quán)轉(zhuǎn)讓合同
- 二零二五年度美食城品牌推廣合作合同
- 2025年度餐廳租賃合同附帶節(jié)假日特色活動(dòng)策劃
- 二零二五年度老舊小區(qū)改造物業(yè)服務(wù)合同
- 二零二五年度車輛借用安全責(zé)任免除合同范本
- 二零二五年度度假公寓住房租賃合同范本
- 2025年工程合作協(xié)議書
- 2025年山東省東營市東營區(qū)融媒體中心招聘全媒體采編播專業(yè)技術(shù)人員10人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年宜賓人才限公司招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- KAT1-2023井下探放水技術(shù)規(guī)范
- 駕駛證學(xué)法減分(學(xué)法免分)題庫及答案200題完整版
- 2024年四川省瀘州市中考英語試題含解析
- 2025屆河南省九師聯(lián)盟商開大聯(lián)考高一數(shù)學(xué)第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 管溝挖槽土方計(jì)算公式
- 國網(wǎng)浙江省電力公司住宅工程配電設(shè)計(jì)技術(shù)規(guī)定
- 煙花爆竹零售應(yīng)急預(yù)案
- 新加坡SM1向性測試模擬試卷
評(píng)論
0/150
提交評(píng)論