




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
目錄1 本文簡介 22 聊天室截圖與說明 22.1 用Java編譯: 22.2 效勞器登錄界面 22.3 效勞器窗口 22.4 客服端登錄界面 32.5 客服端窗口 33 效勞器端 63.1 MyServer()方法 63.2 Login()方法 103.3 Time()方法 134 客戶端 144.1 MyClient()方法 144.2 Login()方法 184.3 Time()方法 20本文簡介這是一個(gè)簡單的Java聊天室,僅提供應(yīng)一些剛學(xué)Java的學(xué)生做實(shí)驗(yàn),本文也是僅供參考.本文代碼都有注釋,希望讀者能讀懂代碼,本實(shí)驗(yàn)內(nèi)部還有一些錯(cuò)誤,比方只能一條一條的發(fā)信息,不能連發(fā),聊天室截圖與說明用Java編譯:本代碼有七個(gè)類,放在六個(gè)java文件中,類名在下方希望讀者自己觀看,效勞器登錄界面要先運(yùn)行效勞器端的程序用戶名:y密碼:1用戶名密碼可以自己設(shè)定點(diǎn)擊確定可以登錄,2秒后到效勞端界面效勞器窗口聊天室的IP為本機(jī)的網(wǎng)絡(luò)虛擬IP,在任何電腦上都能用,端口應(yīng)設(shè)置在1024以后,客服端登錄界面和效勞器端的登錄一樣客服端窗口當(dāng)?shù)卿浬虾罂头司惋@示已經(jīng)連接了,此時(shí)效勞器端的窗口如下由于本程序設(shè)計(jì)的不是很完整,具體的聊天要先從客服端開始:在客服端輸入一條聊天內(nèi)容后按確定,在效勞器端就可以收到信息,之后客戶端不能輸入了,要等待效勞器端來信息后才能繼續(xù)輸入信息.想要結(jié)束聊天,直接可以關(guān)閉窗口,也可以輸入’bye’后斷開聊天有興趣的朋友可以繼續(xù)完善本實(shí)驗(yàn)程序.效勞器端MyServer()方法//效勞器端代碼importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintWriter;import.ServerSocket;import.Socket;importjava.text.DateFormat;importjava.util.Date;importjavax.swing.*;publicclassMyServer{//窗體實(shí)現(xiàn)類 protectedJLabellab10;//全體變量,做傳遞的一個(gè)組件Strings="已經(jīng)成功連接";//初始字符串,在兩個(gè)聊天窗口鏈接成功時(shí)輸出,同時(shí)作為兩個(gè)窗口傳遞字符的一個(gè)變量//構(gòu)造方法 publicMyServer(){ try{//異常處理try JFrameframe=newJFrame("效勞器窗口");//設(shè)置窗體 frame.setLayout(null);//讓布局管理器為空,使用絕對(duì)定位 Fontfnt=newFont("Serief",Font.PLAIN,40);//字體設(shè)置 Fontfnt1=newFont("Serief",Font.PLAIN,20);//字體設(shè)置 //我的用戶名顯示 JLabellab1=newJLabel("效勞器名:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab1.setBounds(8,10,100,20);//設(shè)置組件位置及大小 frame.add(lab1);//添加組件 JTextFieldtext2=newJTextField(30);//單行文本輸入組件 text2.setBounds(150,10,200,20);//設(shè)置組件位置及大小 text2.setEnabled(false);//文本條不可編輯 text2.setText("笑笑聊天室");//輸入內(nèi)容 text2.setFont(fnt1);//設(shè)置字體 frame.add(text2);//添加組件 //效勞器IP顯示 JLabellab2=newJLabel("當(dāng)前效勞器IP:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab2.setBounds(8,45,100,20);//設(shè)置組件位置及大小 frame.add(lab2);//添加組件 JTextFieldtext3=newJTextField(30);//單行文本輸入組件 text3.setBounds(150,45,200,20);//設(shè)置組件位置及大小 text3.setEnabled(false);//文本不可編輯 text3.setText("");//輸入內(nèi)容 text3.setFont(fnt1);//設(shè)置字體 frame.add(text3);//添加組件 //效勞器端口顯示 JLabellab3=newJLabel("當(dāng)前效勞器端口:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab3.setBounds(8,80,100,20);//設(shè)置組件位置及大小 frame.add(lab3);//添加組件 JTextFieldtext4=newJTextField(30);//單行文本輸入組件 text4.setBounds(150,80,200,20);//設(shè)置組件位置及大小 text4.setEnabled(false);//文本不可編輯 text4.setText("8888");//輸入內(nèi)容 text4.setFont(fnt1);//設(shè)置字體 frame.add(text4);//添加組件 //聊天記錄顯示 JLabellab4=newJLabel("聊天記錄如下:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab4.setBounds(8,115,100,20);//設(shè)置組件位置及大小 frame.add(lab4);//添加組件 finalJTextAreatext1=newJTextArea();//多行文本輸入組件 text1.setEnabled(false);//文本不可編輯 text1.setLineWrap(true);//自動(dòng)換行 JScrollPanescr=newJScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示 scr.setBounds(8,150,450,350);//設(shè)置組件位置及大小 frame.add(scr);//添加組件 //聊天輸入窗口及確定 JLabellab5=newJLabel("請輸入聊天內(nèi)容:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab5.setBounds(8,500,100,20);//設(shè)置組件位置及大小 frame.add(lab5);//添加組件 finalJTextAreatext5=newJTextArea();//多行文本輸入組件 text5.setLineWrap(true);//自動(dòng)換行 JScrollPanescr2=newJScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示 scr2.setBounds(150,500,300,50);//設(shè)置組件位置及大小 frame.add(scr2);//添加組件 finalJButtonbut=newJButton("確定");//設(shè)置確定按鈕 but.setFont(fnt);//添加字體設(shè)置 but.setBounds(480,500,200,50);//設(shè)置組件位置及大小 but.addActionListener(newActionListener(){//采用內(nèi)部匿名類 publicvoidactionPerformed(ActionEvente){ if(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í)間顯示 JLabellab7=newJLabel("時(shí)間顯示:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab7.setBounds(450,20,100,20);//設(shè)置組件位置及大小 frame.add(lab7);//添加組件 DateFormatdf=DateFormat.getDateTimeInstance();//取得系統(tǒng)時(shí)間 Stringdf2=df.format(newDate()); //將時(shí)間轉(zhuǎn)換成字符串 JLabellab8=newJLabel(df2,JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab8.setBounds(520,20,130,20);//設(shè)置組件位置及大小 frame.add(lab8);//添加組件 lab10=lab8;//傳遞時(shí)間顯示,以便能在聊天記錄上顯示記錄時(shí)間 newTime(lab8);//使時(shí)間動(dòng)態(tài)顯示 //用戶列表顯示 JLabellab6=newJLabel("用戶列表:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab6.setBounds(500,40,100,20);//設(shè)置組件位置及大小 frame.add(lab6);//添加組件 JTextAreatext6=newJTextArea();//標(biāo)簽實(shí)例化,文本左對(duì)齊 text6.setEnabled(false);//文本不可編輯 text6.setLineWrap(true);//自動(dòng)換行 JScrollPanescr3=newJScrollPane(text6,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);//關(guān)閉窗口時(shí)關(guān)閉程序 frame.setLocation(100,50);//在電腦桌面上出現(xiàn)的位置 frame.setVisible(true);//顯示窗口 //連個(gè)窗口連接 //建立ServerSocket并等待連接請求 ServerSocketserver=newServerSocket(8889); Socketsocket=server.accept(); //連接建立,通過Socket獲取連接上的輸入/輸出流 BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream())); finalPrintWriterout=newPrintWriter(socket.getOutputStream());//先讀取Client發(fā)送的數(shù)據(jù),然后從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)發(fā)送給Client當(dāng)接收到bye時(shí)關(guān)閉連接 Strings1="",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=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(Exceptione){ }} //main函數(shù) publicstaticvoidmain(Stringargs[]){ newLogin(); //登錄實(shí)現(xiàn) }}Login()方法importjava.awt.event.WindowAdapter;importjava.awt.event.ActionListener;importjava.awt.event.WindowEvent;importjava.awt.event.ActionEvent;importjava.awt.Color;importjava.awt.Font;importjavax.swing.JFrame;importjavax.swing.JButton;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.JPasswordField;//用戶名和密碼設(shè)置classLoginCheck{//設(shè)置登錄密碼 privateStringname;//用戶名 privateStringpassword;//密碼 //構(gòu)造方法 publicLoginCheck(Stringname,Stringpassword){ =name;//傳遞用戶名 this.password=password;//傳遞密碼 } //驗(yàn)證用戶名和密碼 publicbooleanvalidate(){//驗(yàn)證方法 if("y".equals(name)&&"1".equals(password)){//判斷用戶名和密碼是否正確 returntrue;//返回true }else{ returnfalse;//返回false } }};//登錄窗口classLogin{//登錄類名 booleanf=false;//按登錄時(shí)設(shè)置的一個(gè)標(biāo)志 privateJFrameframe=newJFrame("WelcomeToMLDN");//設(shè)置窗體 privateJButtonsubmit=newJButton("登陸");//設(shè)置登錄按鈕 privateJButtonreset=newJButton("重置");//設(shè)置重置按鈕 privateJLabelnameLab=newJLabel("效勞器:");//標(biāo)簽實(shí)例化 privateJLabelpassLab=newJLabel("密碼:");//標(biāo)簽實(shí)例化 privateJLabelinfoLab=newJLabel("效勞器登陸系統(tǒng)");//標(biāo)簽實(shí)例化 privateJTextFieldnameText=newJTextField(10);//單行文本輸入條 privateJPasswordFieldpassText=newJPasswordField();//單行密碼文本輸入條 publicLogin(){//登錄窗口構(gòu)造方法 Fontfnt=newFont("Serief",Font.ITALIC+Font.BOLD,12);//設(shè)置字體 infoLab.setFont(fnt); //設(shè)置標(biāo)簽的顯示文字 submit.addActionListener(newActionListener(){//采用內(nèi)部匿名類 publicvoidactionPerformed(ActionEvente){ if(e.getSource()==submit){//判斷觸發(fā)器源是否是提交按鈕 Stringtname=nameText.getText();//得到輸入的用戶名 Stringtpass=newString(passText.getPassword());//得到輸入的密碼,此時(shí)通過getPassageword()方法返回的是字符數(shù)組 LoginChecklog=newLoginCheck(tname,tpass);//實(shí)例化LoginCheck對(duì)象,傳入輸入的用戶名和密碼 if(log.validate()){//對(duì)用戶名和密碼進(jìn)行驗(yàn)證 try{//線程異常處理try Thread.sleep(2000);//2秒后翻開聊天窗口 f=true;//登錄成功后的表示項(xiàng)為true frame.dispose();//關(guān)閉本窗口 }catch(Exceptionee){//異常獲取 } }else{ infoLab.setText("登陸失敗,錯(cuò)誤的用戶名或密碼!");//登錄失敗 } } } }); reset.addActionListener(newActionListener(){//采用內(nèi)部匿名類 publicvoidactionPerformed(ActionEvente){ if(e.getSource()==reset){//判斷觸發(fā)器源是否是提交按鈕 nameText.setText("");//設(shè)置文本框中的內(nèi)容 passText.setText("");//設(shè)置文本框中的內(nèi)容 infoLab.setText("效勞器登陸系統(tǒng)");//恢復(fù)標(biāo)簽顯示 } } }); frame.addWindowListener(newWindowAdapter(){//參加窗口監(jiān)聽 publicvoidwindowClosing(WindowEvente){ } }); //參加事件 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è)置按鈕的位置及大小 reset.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.green);//設(shè)置窗體的背景顏色 frame.setLocation(300,200);//設(shè)置窗體在電腦桌面上的位置 frame.setVisible(true);//顯示窗口 while(f==false){//當(dāng)?shù)卿浭r(shí),一直循環(huán)運(yùn)行, } newMyServer();//顯示窗體頁面 }}Time()方法importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.text.SimpleDateFormat;importjava.util.Date;importjavax.swing.JLabel;importjavax.swing.Timer;//時(shí)間類publicclassTime{ publicTime(JLabeltime){//構(gòu)造方法 this.setTimer(time);//設(shè)置時(shí)間 } publicvoidsetTimer(JLabeltime){//設(shè)置時(shí)間方法finalJLabelvarTime=time;//傳遞組件TimertimeAction=newTimer(1000,newActionListener(){//時(shí)間監(jiān)聽publicvoidactionPerformed(ActionEvente){longtimemillis=System.currentTimeMillis();//得到系統(tǒng)時(shí)間SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");//轉(zhuǎn)換日期顯示格式varTime.setText(df.format(newDate(timemillis)));//輸出得到的時(shí)間}});timeAction.start();//開啟線程}}客戶端MyClient()方法importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintWriter;import.Socket;importjava.text.DateFormat;importjava.util.Date;importjavax.swing.*;publicclassMyClient{ protectedJLabellab10;//全體變量,做傳遞的一個(gè)組件 Strings="連接成功";//初始字符串,在兩個(gè)聊天窗口鏈接成功時(shí)輸出,同時(shí)作為兩個(gè)窗口傳遞字符的一個(gè)變量 //構(gòu)造方法 publicMyClient(){ JFrameframe=newJFrame("用戶端窗口");//設(shè)置窗體 frame.setLayout(null);//讓布局管理器為空,使用絕對(duì)定位 Fontfnt=newFont("Serief",Font.PLAIN,40);//字體設(shè)置 Fontfnt1=newFont("Serief",Font.PLAIN,20);//字體設(shè)置 //我的用戶名顯示 JLabellab1=newJLabel("效勞器名:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab1.setBounds(8,10,100,20);//設(shè)置組件位置及大小 frame.add(lab1);//添加組件 JTextFieldtext2=newJTextField(30);//單行文本輸入組件 text2.setBounds(150,10,200,20);//設(shè)置組件位置及大小 text2.setEnabled(false);//文本條不可編輯 text2.setText("可可聊天室");//輸入內(nèi)容 text2.setFont(fnt1);//設(shè)置字體 frame.add(text2);//添加組件 //效勞器IP顯示 JLabellab2=newJLabel("當(dāng)前效勞器IP:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab2.setBounds(8,45,100,20);//設(shè)置組件位置及大小 frame.add(lab2);//添加組件 JTextFieldtext3=newJTextField(30);//單行文本輸入組件 text3.setBounds(150,45,200,20);//設(shè)置組件位置及大小 text3.setEnabled(false);//文本不可編輯 text3.setText("");//輸入內(nèi)容 text3.setFont(fnt1);//設(shè)置字體 frame.add(text3);//添加組件 //效勞器端口顯示 JLabellab3=newJLabel("當(dāng)前效勞器端口:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab3.setBounds(8,80,100,20);//設(shè)置組件位置及大小 frame.add(lab3);//添加組件 JTextFieldtext4=newJTextField(30);//單行文本輸入組件 text4.setBounds(150,80,200,20);//設(shè)置組件位置及大小 text4.setEnabled(false);//文本不可編輯 text4.setText("8888");//輸入內(nèi)容 text4.setFont(fnt1);//設(shè)置字體 frame.add(text4);//添加組件 //聊天記錄顯示 JLabellab4=newJLabel("聊天記錄如下:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab4.setBounds(8,115,100,20);//設(shè)置組件位置及大小 frame.add(lab4);//添加組件 finalJTextAreatext1=newJTextArea();//多行文本輸入組件 text1.setEnabled(false);//文本不可編輯 text1.setLineWrap(true);//自動(dòng)換行 JScrollPanescr=newJScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示 scr.setBounds(8,150,450,350);//設(shè)置組件位置及大小 frame.add(scr);//添加組件 //聊天輸入窗口及確定 JLabellab5=newJLabel("請輸入聊天內(nèi)容:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab5.setBounds(8,500,100,20);//設(shè)置組件位置及大小 frame.add(lab5);//添加組件 finalJTextAreatext5=newJTextArea();//多行文本輸入組件 text5.setLineWrap(true);//自動(dòng)換行 JScrollPanescr2=newJScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//設(shè)置滾動(dòng)條,水平和垂直滾動(dòng)條始終顯示 scr2.setBounds(150,500,300,50);//設(shè)置組件位置及大小 frame.add(scr2);//添加組件 finalJButtonbut=newJButton("確定");//設(shè)置確定按鈕 but.setFont(fnt);//添加字體設(shè)置 but.setBounds(480,500,200,50);//設(shè)置組件位置及大小 but.addActionListener(newActionListener(){//采用內(nèi)部匿名類 publicvoidactionPerformed(ActionEvente){ if(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í)間顯示 JLabellab7=newJLabel("時(shí)間顯示:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab7.setBounds(450,20,100,20);//設(shè)置組件位置及大小 frame.add(lab7);//添加組件 DateFormatdf=DateFormat.getDateTimeInstance();//取得系統(tǒng)時(shí)間 Stringdf2=df.format(newDate()); //將時(shí)間轉(zhuǎn)換成字符串 JLabellab8=newJLabel(df2,JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab8.setBounds(520,20,130,20);//設(shè)置組件位置及大小 frame.add(lab8);//添加組件 lab10=lab8;//傳遞時(shí)間顯示,以便能在聊天記錄上顯示記錄時(shí)間 newTime(lab8);//使時(shí)間動(dòng)態(tài)顯示 //用戶列表顯示 JLabellab6=newJLabel("用戶列表:",JLabel.LEFT);//標(biāo)簽實(shí)例化,文本左對(duì)齊 lab6.setBounds(500,40,100,20);//設(shè)置組件位置及大小 frame.add(lab6);//添加組件 JTextAreatext6=newJTextArea();//標(biāo)簽實(shí)例化,文本左對(duì)齊 text6.setEnabled(false);//文本不可編輯 text6.setLineWrap(true);//自動(dòng)換行 JScrollPanescr3=newJScrollPane(text6,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);//關(guān)閉窗口時(shí)關(guān)閉程序 frame.setLocation(10,10);//在電腦桌面上出現(xiàn)的位置 frame.setVisible(true);//顯示窗口 try{//try異常處理 Socketsocket=newSocket("",8889);//發(fā)出連接請求 //建立連接,通過Socket獲得連接上的輸入/輸出流 PrintWriterout=newPrintWriter(socket.getOutputStream()); BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream())); //從標(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é)束Strings3;//得到其他窗口傳來的字符串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("")){//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(Exceptione){ } } //main函數(shù) publicstaticvoidmain(Stringargs[]){ newLogin();//登錄實(shí)現(xiàn) }}Login()方法importjava.awt.event.WindowAdapter;importjava.awt.event.ActionListener;importjava.awt.event.WindowEvent;importjava.awt.event.ActionEvent;importjava.awt.Color;importjava.awt.Font;importjavax.swing.JFrame;importjavax.swing.JButton;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.JPasswordField;//用戶名和密碼設(shè)置classLoginCheck{//設(shè)置登錄密碼 privateStringname;//用戶名 privateStringpassword;//密碼 //構(gòu)造方法 publicLoginCheck(Stringname,Stringpassword){ =name;//傳遞用戶名 this.password=password;//傳遞密碼 } //驗(yàn)證用戶名和密碼 publicbooleanvalidate(){//驗(yàn)證方法 if("y".equals(name)&&"1".equals(password)){//判斷用戶名和密碼是否正確 returntrue;//返回true }else{ returnfalse;//返回false } }};//登錄窗口classLogin{//登錄類名 booleanf=false;//按登錄時(shí)設(shè)置的一個(gè)標(biāo)志 privateJFrameframe=newJFrame("WelcomeToMLDN");//設(shè)置窗體 privateJButtonsubmit=newJButton("登陸");//設(shè)置登錄按鈕 privateJButtonreset=newJButton("重置");//設(shè)置重置按鈕 privateJLabelnameLab=newJLabel("用戶名:");//標(biāo)簽實(shí)例化 privateJLabelpassLab=newJLabel("密碼:");//標(biāo)簽實(shí)例化 privateJLabelinfoLab=newJLabel("用戶登陸系統(tǒng)");//標(biāo)簽實(shí)例化 privateJTextFieldnameText=newJTextField(10);//單行文本輸入條 privateJPasswordFieldpassText=newJPasswordField();//單行密碼文本輸入條 publicLogin(){//登錄窗口構(gòu)造方法 Fontfnt=newFont("Serief",Font.ITALIC+Font.BOLD,12);//設(shè)置字體 infoLab.setFont(fnt); //設(shè)置標(biāo)簽的顯示文字 submit.addActionListener(newActionListener(){//采用內(nèi)部匿名類 publicvoidactionPerformed(ActionEvente){ if(e.getSource()==submit){//判斷觸發(fā)器源是否是提交按鈕 Stringtname=nameText.getText();//得到輸入的用戶名 Stringtpass=newString(passText.getPassword());//得到輸入的密碼,此時(shí)通過getPassageword()方法返回的是字符數(shù)組 LoginChecklog=newLoginCheck(tname,tpass);//實(shí)例化LoginCheck對(duì)象,傳入輸入的用戶名和密碼 if(log.validate()){//對(duì)用戶名和密碼進(jìn)行驗(yàn)證 try{ Thread.sleep(2000);//2秒后翻開聊天窗口 f=true;//登錄成功后的表示項(xiàng)為true frame.dispose();//關(guān)閉本窗口 }catch(Exceptionee){//異常獲取 } }else{ infoLab.setText("登陸失敗,錯(cuò)誤的用戶名或密碼!");//登錄失敗 } } } }); reset.addActionListener(newActionListener(){//采用內(nèi)部匿名類 publicvoi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 征地合同協(xié)議書
- 汽車檢測與維修作業(yè)指導(dǎo)書
- 小區(qū)物業(yè)場地租賃合同
- 臨時(shí)活動(dòng)場地租賃合同
- 中國民用航空運(yùn)輸合同書5篇
- 廣西國匯投資擔(dān)保有限公司借款擔(dān)保合同8篇
- 公路貨物運(yùn)輸合同協(xié)議
- 農(nóng)業(yè)機(jī)械化裝備應(yīng)用作業(yè)指導(dǎo)書
- 公民之間借款合同書8篇
- 2025年??诮?jīng)營性道路客貨運(yùn)輸駕駛員從業(yè)資格考試
- 平安產(chǎn)險(xiǎn)產(chǎn)品定價(jià)模型優(yōu)化研究
- GB/T 12279.2-2024心血管植入器械人工心臟瓣膜第2部分:外科植入式人工心臟瓣膜
- JTG-3830-2018公路工程建設(shè)項(xiàng)目概算預(yù)算編制辦法
- 設(shè)備維護(hù)服務(wù)方案(2篇)
- 醫(yī)院檢驗(yàn)科實(shí)驗(yàn)室生物安全程序文件SOP
- 生物質(zhì)顆粒廠建設(shè)項(xiàng)目可行性研究報(bào)告
- 春新教科版四年級(jí)科學(xué)下冊《電路》單元解讀
- 《電力信息系統(tǒng)信息安全檢查規(guī)范》
- 2023年考研數(shù)學(xué)一真題
- 2020年8月自考00371公安決策學(xué)試題及答案含解析
- H公司招聘問題與對(duì)策研究
評(píng)論
0/150
提交評(píng)論