版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java聊天室制作人:_楊永生_制作時(shí)間:2018.9.26目錄1本文簡(jiǎn)介22聊天室截圖與說明22.1用Java編譯:22.2服務(wù)器登錄界面22.3服務(wù)器窗口22.4客服端登錄界面32.5客服端窗口33服務(wù)器端63.1MyServer(方法63.2Login(方法103.3Time(方法134客戶端144.1MyClient(方法144.2Login(方法184.3Time(方法201 本文簡(jiǎn)介這是一個(gè)簡(jiǎn)單的Java聊天室,僅提供給一些剛學(xué)Java的學(xué)生做實(shí)驗(yàn),本文也是僅供參考.本文代碼都有注釋,希望讀者能讀懂代碼,本實(shí)驗(yàn)內(nèi)部還有一些錯(cuò)誤,比如只能一條一條的發(fā)信息,不能連發(fā),希望能解決本問題的
2、朋友能給我發(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ù)器窗口聊天室的IP為本機(jī)的網(wǎng)絡(luò)虛擬IP,在任何電腦上都能用,端口應(yīng)設(shè)置在1024以后,2.4 客服端登錄界面和服務(wù)器端的登錄一樣2.5 客服端窗口當(dāng)?shù)卿浬虾?客服端就顯示已經(jīng)連接了,此時(shí)服務(wù)器端的窗口如下因?yàn)楸境绦蛟O(shè)計(jì)的不是很完整,具體的聊天要先從客服端開始:在客服端輸入一條聊天內(nèi)容后按確定,在服務(wù)器端就可以收到信
3、息,之后客戶端不能輸入了,要等待服務(wù)器端來信息后才能繼續(xù)輸入信息.想要結(jié)束聊天,直接可以關(guān)閉窗口,也可以輸入bye后斷開聊天有興趣的朋友可以繼續(xù)完善本實(shí)驗(yàn)程序.3 服務(wù)器端3.1 MyServer(方法/服務(wù)器端代碼import java.awt.*。import java.awt.event.ActionEvent。import java.awt.event.ActionListener。import java.io.BufferedReader。import java.io.InputStreamReader。import java.io.PrintWriter。import java.n
4、et.ServerSocket。import .Socket。import java.text.DateFormat。import java.util.Date。import javax.swing.*。public class MyServer /窗體實(shí)現(xiàn)類protected JLabel lab10。 /全體變量,做傳遞的一個(gè)組件 String s=已經(jīng)成功連接。 /初始字符串,在兩個(gè)聊天窗口鏈接成功時(shí)輸出,同時(shí)作為兩個(gè)窗口傳遞字符的一個(gè)變量 /構(gòu)造方法 public MyServer(try/異常處理tryJFrame frame=new JFrame(服務(wù)器窗口。 /設(shè)
5、置窗體frame.setLayout(null。 /讓布局管理器為空 ,使用絕對(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.setBounds(8, 10, 100, 20。 /設(shè)置組件位置及大小frame.add(lab1。 /添加組件JTextField text2=new JTextField(30。 /單行文本輸入組件
6、text2.setBounds(150, 10, 200, 20。/設(shè)置組件位置及大小text2.setEnabled(false。/文本條不可編輯text2.setText(笑笑聊天室。/輸入內(nèi)容text2.setFont(fnt1。/設(shè)置字體frame.add(text2。/添加組件/服務(wù)器IP顯示JLabel lab2=new JLabel(當(dāng)前服務(wù)器IP:,JLabel.LEFT。 /標(biāo)簽實(shí)例化,文本左對(duì)齊lab2.setBounds(8, 45, 100, 20。/設(shè)置組件位置及大小frame.add(lab2。/添加組件JTextField text3=new JTextField
7、(30。/單行文本輸入組件text3.setBounds(150, 45, 200, 20。/設(shè)置組件位置及大小text3.setEnabled(false。 /文本不可編輯text3.setText(。/輸入內(nèi)容text3.setFont(fnt1。/設(shè)置字體frame.add(text3。 /添加組件/服務(wù)器端口顯示JLabel lab3=new JLabel(當(dāng)前服務(wù)器端口:,JLabel.LEFT。 /標(biāo)簽實(shí)例化,文本左對(duì)齊lab3.setBounds(8, 80, 100, 20。/設(shè)置組件位置及大小frame.add(lab3。/添加組件JTextField te
8、xt4=new JTextField(30。/單行文本輸入組件text4.setBounds(150, 80, 200, 20。/設(shè)置組件位置及大小text4.setEnabled(false。/文本不可編輯text4.setText(8888。/輸入內(nèi)容text4.setFont(fnt1。/設(shè)置字體frame.add(text4。/添加組件/聊天記錄顯示JLabel lab4=new JLabel(聊天記錄如下:,JLabel.LEFT。 /標(biāo)簽實(shí)例化,文本左對(duì)齊lab4.setBounds(8, 115, 100, 20。/設(shè)置組件位置及大小frame.add(lab4。/添加組件fin
9、al JTextArea text1=new JTextArea(。/多行文本輸入組件text1.setEnabled(false。/文本不可編輯text1.setLineWrap(true。/自動(dòng)換行 JScrollPane scr=new JScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS。 /設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示scr.setBounds(8, 150, 450, 350。/設(shè)置組件位置及大小frame.add(scr。/添加組件/聊
10、天輸入窗口及確定JLabel lab5=new JLabel(請(qǐng)輸入聊天內(nèi)容:,JLabel.LEFT。 /標(biāo)簽實(shí)例化,文本左對(duì)齊lab5.setBounds(8, 500, 100, 20。/設(shè)置組件位置及大小frame.add(lab5。/添加組件final JTextArea text5=new JTextArea(。/多行文本輸入組件text5.setLineWrap(true。/自動(dòng)換行JScrollPane scr2=new JScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_
11、SCROLLBAR_ALWAYS。/設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示scr2.setBounds(150, 500, 300, 50。/設(shè)置組件位置及大小frame.add(scr2。/添加組件 final JButton but=new JButton(確定。/設(shè)置確定按鈕but.setFont(fnt。/添加字體設(shè)置but.setBounds(480, 500, 200, 50。/設(shè)置組件位置及大小but.addActionListener(new ActionListener( /采用內(nèi)部匿名類public void actionPerformed(ActionEvent eif(e
12、.getSource(=but /判斷觸發(fā)器源是否是提交按鈕text1.append(笑笑: +lab10.getText(+n 。/在聊天記錄上添加文本text1.append(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.setBounds(450, 20, 100, 20。/設(shè)置組件位
13、置及大小frame.add(lab7。/添加組件DateFormat df=DateFormat.getDateTimeInstance(。/取得系統(tǒng)時(shí)間String df2= df.format(new Date(。/將時(shí)間轉(zhuǎn)換成字符串JLabel lab8=new JLabel(df2,JLabel.LEFT。/標(biāo)簽實(shí)例化,文本左對(duì)齊lab8.setBounds(520, 20, 130, 20。/設(shè)置組件位置及大小frame.add(lab8。/添加組件lab10=lab8。 /傳遞時(shí)間顯示,以便能在聊天記錄上顯示記錄時(shí)間new Time(lab8。 /使時(shí)間動(dòng)態(tài)顯示/用戶列表顯示JLa
14、bel lab6=new JLabel(用戶列表:,JLabel.LEFT。/標(biāo)簽實(shí)例化,文本左對(duì)齊lab6.setBounds(500, 40, 100, 20。/設(shè)置組件位置及大小frame.add(lab6。/添加組件JTextArea text6=new JTextArea(。/標(biāo)簽實(shí)例化,文本左對(duì)齊text6.setEnabled(false。/文本不可編輯text6.setLineWrap(true。/自動(dòng)換行JScrollPane scr3=new JScrollPane(text6,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPan
15、e.HORIZONTAL_SCROLLBAR_ALWAYS。/設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示scr3.setBounds(460, 70, 220, 420。/設(shè)置組件位置及大小frame.add(scr3。/添加組件/窗口的屬性frame.setSize(700,600。/窗口大小frame.getContentPane(.setBackground(Color.pink。/窗口的背景顏色frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE。/關(guān)閉窗口時(shí)關(guān)閉程序frame.setLocation(100,50。/在電腦桌面上出現(xiàn)的位置f
16、rame.setVisible(true。/顯示窗口/連個(gè)窗口連接/建立Server Socket并等待連接請(qǐng)求 ServerSocket server =new ServerSocket(8889。 Socket socket=server.accept(。 /連接建立,通過Socket獲取連接上的輸入/輸出流 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream(。 final PrintWriter out =new PrintWriter(socket.getOutputStre
17、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(!(s1=in.readLine(.equals(bye /得到其他窗口傳遞的字符串,并判斷是否結(jié)束 text6.setText(可可在線。 /當(dāng)連接成功是在用戶列表中 輸出用戶名字 if(!s1.equals( /如果傳遞的字符串不為空 text1.append(可可: +lab10.getText(+n 。/在聊天記錄上添加文本 text1.append(s1+n。 /將輸入的聊天內(nèi)容輸出在聊天記錄上 s2=
18、s。/將在聊天窗口中得到的字符串傳遞給輸出字符串 for(。s2.equals(|s2.equals(null。s2=s/當(dāng)傳遞的字符串為空時(shí)等待用戶輸入聊天內(nèi)容 s=。/將在聊天窗口中得到的字符串設(shè)為空 if(!s2.equals(&!s2.equals(null/ s2不為空時(shí)做 out.println(s2。/向其他窗口輸出字符串 out.flush(。/輸出聊天內(nèi)容 /關(guān)閉連接 in.close(。 out.close(。 socket.close(。 server.close(。 catch(Exception e /main函數(shù)public static void main(Str
19、ing argsnew Login(。/登錄實(shí)現(xiàn)3.2 Login(方法import java.awt.event.WindowAdapter 。import java.awt.event.ActionListener 。import java.awt.event.WindowEvent 。import java.awt.event.ActionEvent 。import java.awt.Color 。import java.awt.Font 。import javax.swing.JFrame 。import javax.swing.JButton 。import javax.swing.
20、JLabel 。import javax.swing.JTextField 。import javax.swing.JPasswordField 。/用戶名和密碼設(shè)置class LoginCheck/設(shè)置登錄密碼private String name 。/用戶名private String password 。/密碼/構(gòu)造方法public LoginCheck(String name,String = name 。/傳遞用戶名this.password = password 。/傳遞密碼/驗(yàn)證用戶名和密碼public boolean validate(/驗(yàn)證
21、方法if(y.equals(name&1.equals(password /判斷用戶名和密碼是否正確return true 。/返回trueelsereturn false 。/返回false。/登錄窗口class Login/登錄類名boolean f=false。/按登錄時(shí)設(shè)置的一個(gè)標(biāo)志private JFrame frame = new JFrame(Welcome To MLDN 。 /設(shè)置窗體private JButton submit = new JButton(登陸。/設(shè)置登錄按鈕private JButton reset = new JButton(重置。/設(shè)置重置按鈕priv
22、ate 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 JPasswordField passText = new JPasswordField( 。/單行密碼文本輸入條public Login(/登錄窗口構(gòu)造方法Font fnt = ne
23、w Font(Serief,Font.ITALIC + Font.BOLD,12 。/設(shè)置字體infoLab.setFont(fnt 。/ 設(shè)置標(biāo)簽的顯示文字submit.addActionListener(new ActionListener( /采用內(nèi)部匿名類public void actionPerformed(ActionEvent eif(e.getSource(=submit /判斷觸發(fā)器源是否是提交按鈕String tname = nameText.getText( 。 /得到輸入的用戶名String tpass = new String(passText.getPassword
24、( 。/得到輸入的密碼,此時(shí)通過getPassageword(方法返回的是字符數(shù)組LoginCheck log = new LoginCheck(tname,tpass 。/實(shí)例化LoginCheck對(duì)象,傳入輸入的用戶名和密碼if(log.validate(/對(duì)用戶名和密碼進(jìn)行驗(yàn)證try /線程異常處理tryThread.sleep(2000。 /2秒后打開聊天窗口 f=true。 /登錄成功后的表示項(xiàng)為trueframe.dispose(。 /關(guān)閉本窗口catch(Exception ee/異常獲取elseinfoLab.setText(登陸失敗,錯(cuò)誤的用戶名或密碼! 。/登錄失敗 。re
25、set.addActionListener(new ActionListener( /采用內(nèi)部匿名類public void actionPerformed(ActionEvent eif(e.getSource(=reset /判斷觸發(fā)器源是否是提交按鈕nameText.setText( 。/設(shè)置文本框中的內(nèi)容passText.setText( 。/設(shè)置文本框中的內(nèi)容infoLab.setText(服務(wù)器登陸系統(tǒng) 。/恢復(fù)標(biāo)簽顯示 。frame.addWindowListener(new WindowAdapter(/加入窗口監(jiān)聽public void windowClosing(Window
26、Event e 。/ 加入事件frame.setLayout(null 。/使用絕對(duì)定位nameLab.setBounds(5,5,60,20 。/設(shè)置標(biāo)簽的位置及大小passLab.setBounds(5,30,60,20 。/設(shè)置標(biāo)簽的位置及大小infoLab.setBounds(5,65,220,30 。/設(shè)置標(biāo)簽的位置及大小nameText.setBounds(65,5,100,20 。/設(shè)置文本域的位置及大小passText.setBounds(65,30,100,20 。/設(shè)置密碼域的位置及大小submit.setBounds(165,5,60,20 。/設(shè)置按鈕的位置及大小res
27、et.setBounds(165,30,60,20 。/設(shè)置按鈕的位置及大小frame.add(nameLab 。/向窗體加入標(biāo)簽frame.add(passLab 。/向窗體加入標(biāo)簽frame.add(infoLab 。/向窗體加入標(biāo)簽frame.add(nameText 。/向窗體加入文本框frame.add(passText 。/向窗體加入密碼框frame.add(submit 。/向窗體加入按鈕frame.add(reset 。/向窗體加入按鈕frame.setSize(280,130 。/設(shè)置窗體大小frame.getContentPane(.setBackground(Color.
28、green 。/設(shè)置窗體的背景顏色frame.setLocation(300,200 。/設(shè)置窗體在電腦桌面上的位置frame.setVisible(true 。/顯示窗口while(f=false /當(dāng)?shù)卿浭r(shí),一直循環(huán)運(yùn)行,new MyServer(。/顯示窗體頁面3.3 Time(方法import java.awt.event.ActionEvent。import java.awt.event.ActionListener。import java.text.SimpleDateFormat。import java.util.Date。import javax.swing.JLabel。
29、import javax.swing.Timer。/時(shí)間類public class Time public Time(JLabel time /構(gòu)造方法this.setTimer(time。 /設(shè)置時(shí)間public void setTimer(JLabel time /設(shè)置時(shí)間方法 final JLabel varTime = time。 /傳遞組件 Timer timeAction = new Timer(1000, new ActionListener( /時(shí)間監(jiān)聽 public void actionPerformed(ActionEvent e long timemillis = Sy
30、stem.currentTimeMillis(。 /得到系統(tǒng)時(shí)間 SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss。 /轉(zhuǎn)換日期顯示格式 varTime.setText(df.format(new Date(timemillis。 /輸出得到的時(shí)間 。 timeAction.start(。 /開啟線程 4 客戶端4.1 MyClient(方法import java.awt.*。import java.awt.event.ActionEvent。import java.awt.event.ActionListener。i
31、mport java.io.BufferedReader。import java.io.InputStreamReader。import java.io.PrintWriter。import .Socket。import java.text.DateFormat。import java.util.Date。import javax.swing.*。public class MyClientprotected JLabel lab10。/全體變量,做傳遞的一個(gè)組件 String s=連接成功。/初始字符串,在兩個(gè)聊天窗口鏈接成功時(shí)輸出,同時(shí)作為兩個(gè)窗口傳遞字符的一個(gè)變量/構(gòu)造方法
32、 public MyClient(JFrame frame=new JFrame(用戶端窗口。 /設(shè)置窗體frame.setLayout(null。 /讓布局管理器為空 ,使用絕對(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.setBounds(8, 10, 100, 20。 /設(shè)置組件位置及大小frame.add(lab1。
33、/添加組件JTextField text2=new JTextField(30。 /單行文本輸入組件text2.setBounds(150, 10, 200, 20。/設(shè)置組件位置及大小text2.setEnabled(false。/文本條不可編輯text2.setText(可可聊天室。/輸入內(nèi)容text2.setFont(fnt1。/設(shè)置字體frame.add(text2。/添加組件/服務(wù)器IP顯示JLabel lab2=new JLabel(當(dāng)前服務(wù)器IP:,JLabel.LEFT。 /標(biāo)簽實(shí)例化,文本左對(duì)齊lab2.setBounds(8, 45, 100, 20。/設(shè)置組件位置及大小f
34、rame.add(lab2。/添加組件JTextField text3=new JTextField(30。/單行文本輸入組件text3.setBounds(150, 45, 200, 20。/設(shè)置組件位置及大小text3.setEnabled(false。 /文本不可編輯text3.setText(。/輸入內(nèi)容text3.setFont(fnt1。/設(shè)置字體frame.add(text3。 /添加組件/服務(wù)器端口顯示JLabel lab3=new JLabel(當(dāng)前服務(wù)器端口:,JLabel.LEFT。 /標(biāo)簽實(shí)例化,文本左對(duì)齊lab3.setBounds(8, 80, 1
35、00, 20。/設(shè)置組件位置及大小frame.add(lab3。/添加組件JTextField text4=new JTextField(30。/單行文本輸入組件text4.setBounds(150, 80, 200, 20。/設(shè)置組件位置及大小text4.setEnabled(false。/文本不可編輯text4.setText(8888。/輸入內(nèi)容text4.setFont(fnt1。/設(shè)置字體frame.add(text4。/添加組件/聊天記錄顯示JLabel lab4=new JLabel(聊天記錄如下:,JLabel.LEFT。 /標(biāo)簽實(shí)例化,文本左對(duì)齊lab4.setBounds
36、(8, 115, 100, 20。/設(shè)置組件位置及大小frame.add(lab4。/添加組件final JTextArea text1=new JTextArea(。/多行文本輸入組件text1.setEnabled(false。/文本不可編輯text1.setLineWrap(true。/自動(dòng)換行JScrollPane scr=new JScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS。 /設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示scr.setBounds
37、(8, 150, 450, 350。/設(shè)置組件位置及大小frame.add(scr。/添加組件/聊天輸入窗口及確定JLabel lab5=new JLabel(請(qǐng)輸入聊天內(nèi)容:,JLabel.LEFT。 /標(biāo)簽實(shí)例化,文本左對(duì)齊lab5.setBounds(8, 500, 100, 20。/設(shè)置組件位置及大小frame.add(lab5。/添加組件final JTextArea text5=new JTextArea(。/多行文本輸入組件text5.setLineWrap(true。/自動(dòng)換行JScrollPane scr2=new JScrollPane(text5,JScrollPane.
38、VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS。/設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示scr2.setBounds(150, 500, 300, 50。/設(shè)置組件位置及大小frame.add(scr2。/添加組件 final JButton but=new JButton(確定。/設(shè)置確定按鈕but.setFont(fnt。/添加字體設(shè)置but.setBounds(480, 500, 200, 50。/設(shè)置組件位置及大小but.addActionListener(new ActionListener( /采用內(nèi)
39、部匿名類public void actionPerformed(ActionEvent eif(e.getSource(=but /判斷觸發(fā)器源是否是提交按鈕text1.append(可可: +lab10.getText(+n 。/在聊天記錄上添加文本text1.append(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)
40、簽實(shí)例化,文本左對(duì)齊lab7.setBounds(450, 20, 100, 20。/設(shè)置組件位置及大小frame.add(lab7。/添加組件DateFormat df=DateFormat.getDateTimeInstance(。/取得系統(tǒng)時(shí)間String df2= df.format(new Date(。/將時(shí)間轉(zhuǎn)換成字符串JLabel lab8=new JLabel(df2,JLabel.LEFT。/標(biāo)簽實(shí)例化,文本左對(duì)齊lab8.setBounds(520, 20, 130, 20。/設(shè)置組件位置及大小frame.add(lab8。/添加組件lab10=lab8。 /傳遞時(shí)間顯示,
41、以便能在聊天記錄上顯示記錄時(shí)間new Time(lab8。 /使時(shí)間動(dòng)態(tài)顯示/用戶列表顯示JLabel lab6=new JLabel(用戶列表:,JLabel.LEFT。/標(biāo)簽實(shí)例化,文本左對(duì)齊lab6.setBounds(500, 40, 100, 20。/設(shè)置組件位置及大小frame.add(lab6。/添加組件JTextArea text6=new JTextArea(。/標(biāo)簽實(shí)例化,文本左對(duì)齊text6.setEnabled(false。/文本不可編輯text6.setLineWrap(true。/自動(dòng)換行JScrollPane scr3=new JScrollPane(text6,
42、JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS。/設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示scr3.setBounds(460, 70, 220, 420。/設(shè)置組件位置及大小frame.add(scr3。/添加組件/窗口的屬性frame.setSize(700,600。/窗口大小frame.getContentPane(.setBackground(Color.pink。/窗口的背景顏色frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE。
43、/關(guān)閉窗口時(shí)關(guān)閉程序frame.setLocation(10,10。/在電腦桌面上出現(xiàn)的位置frame.setVisible(true。/顯示窗口try /try異常處理 Socket socket=new Socket(,8889。 /發(fā)出連接請(qǐng)求 /建立連接,通過Socket獲得連接上的輸入/輸出流 PrintWriter out =new PrintWriter(socket.getOutputStream(。 BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStr
44、eam(。 /從標(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.equals(null/s不為空時(shí)做 out.println(s。 /向其他窗口輸出字符串 s=。 /將在聊天窗口中得到的字符串設(shè)為空 out.flush(。/輸出聊天內(nèi)容 if(!s.equals(bye /判斷聊天是否結(jié)束 String s3。 /得到其他窗口傳來的字符串 while( (s3=in.readLine(.equals(n&s3.equals(null&
45、s3.equals(/判斷s3是否為空 ,為空時(shí)等待 text6.setText(笑笑在線。 /當(dāng)連接成功是在用戶列表中 輸出用戶名字 if(!s3.equals(n&!s3.equals(null&!s3.equals(/s3不為空時(shí)做 text1.append(笑笑: +lab10.getText(+n 。/在聊天記錄上添加文本 text1.append(s3+n。 /將輸入的聊天內(nèi)容輸出在聊天記錄上 while(!s.equals(bye。/判斷是否結(jié)束 /關(guān)閉連接 out.close(。 in.close(。 socket.close(。 catch(Exception e /main
46、函數(shù)public static void main(String argsnew Login(。/登錄實(shí)現(xiàn)4.2 Login(方法import java.awt.event.WindowAdapter 。import java.awt.event.ActionListener 。import java.awt.event.WindowEvent 。import java.awt.event.ActionEvent 。import java.awt.Color 。import java.awt.Font 。import javax.swing.JFrame 。import javax.swing.JButton 。import javax.swing.JLabel 。import javax.swing.JTextField 。import javax.swing.JPasswordFie
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 成品油海上運(yùn)輸服務(wù)協(xié)議2024年
- 2023-2024學(xué)年之江教育評(píng)價(jià)高三下階段測(cè)試(五)數(shù)學(xué)試題
- 2024年企業(yè)勞務(wù)服務(wù)協(xié)議模板
- 2024辦公電腦集中采購(gòu)協(xié)議模板
- 2024年反擔(dān)保協(xié)議條款示例
- 2024年家居裝飾協(xié)議格式
- 2024年批量錨具采購(gòu)商務(wù)協(xié)議條款
- 文書模板-旅游服務(wù)轉(zhuǎn)讓合同
- 2024年電商管理代運(yùn)營(yíng)協(xié)議模板
- 2024年公司反擔(dān)保條款詳細(xì)協(xié)議
- NB_T 10339-2019《水電工程壩址工程地質(zhì)勘察規(guī)程》_(高清最新)
- 繁體校對(duì)《太上老君說常清靜經(jīng)》
- 關(guān)于統(tǒng)一規(guī)范人民防空標(biāo)識(shí)使用管理的通知(1)
- 電纜振蕩波局部放電試驗(yàn)報(bào)告
- 西門子RWD68說明書
- 針對(duì)建筑工程施工數(shù)字化管理分析
- 多品種共線生產(chǎn)質(zhì)量風(fēng)險(xiǎn)評(píng)價(jià)
- 【MBA教學(xué)案例】從“蝦國(guó)”到“國(guó)蝦”:國(guó)聯(lián)水產(chǎn)的戰(zhàn)略轉(zhuǎn)型
- Unit-1--College-Life
- 醫(yī)院車輛加油卡管理制度
- 平面四桿機(jī)構(gòu)急回特性說課課件
評(píng)論
0/150
提交評(píng)論