JAVA大作业Word格式.docx
《JAVA大作业Word格式.docx》由会员分享,可在线阅读,更多相关《JAVA大作业Word格式.docx(20页珍藏版)》请在冰点文库上搜索。
![JAVA大作业Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/8e30e02a-1d5d-44f8-a955-d0638d31ec34/8e30e02a-1d5d-44f8-a955-d0638d31ec341.gif)
(二)客户端
三、核心代码说明
(一)ClientWindow的代码
packagews;
importjava.awt.*;
importjavax.swing.*;
importjava.io.*;
import.*;
publicclassClientWindowextendsThread
{
staticClientFramemyWindow=newClientFrame("
聊天室:
客户"
);
publicstaticvoidmain(Stringargs[])
{
myWindow.setBounds(50,100,400,300);
myWindow.setVisible(true);
Threadreceiver=newServerWindow();
receiver.setDaemon(true);
//后台程序
receiver.start();
//创建并启动接收线程
}
publicvoidrun()//接收信息线程
booleandone=true;
while(done)
//接收信息
//如不为空,则在输出文本区显示
//否则,done=false;
try
{
Stringstr=myWindow.in.readLine();
//接收服务器信息
if(str!
=null)
myWindow.showText("
服务器:
"
+str);
catch(IOExceptione)
System.out.println("
连接断开!
done=false;
}
(二)ClientFrame的代码
importjava.awt.event.*;
importjavax.swing.border.*;
publicclassClientFrameextendsJFrame//创建JFrame的子类
publicSocketsocket=null;
//连接时获取的socket放在这里
publicBufferedReaderin=null;
//从这里读入数据
publicPrintWriterout=null;
//从这里输出数据
publicbooleanconnectFlag=false;
//当建立连接时,该标志为true
privateContainercontent=getContentPane();
privateJTextAreatext=newJTextArea(30,100);
//生成输出文本组件
privateJTextAreakeyIn=newJTextArea(30,100);
//生成输入文本组件
publicstaticfinalintCONNECT=001;
//按钮标示号
publicstaticfinalintSEND=002;
publicstaticfinalintQUIT=003;
publicClientFrame(Stringtitle)//构造方法
super(title);
//调用JFrame的构造方法
setDefaultCloseOperation(EXIT_ON_CLOSE);
Boxroom=Box.createVerticalBox();
//创建聊天室
text.setEditable(false);
text.setLineWrap(true);
JScrollPanescrollText=newJScrollPane(text);
//加滚动条
scrollText.setAutoscrolls(true);
scrollText.setPreferredSize(newDimension(400,1000));
room.add(scrollText);
keyIn.setLineWrap(true);
JScrollPanescrollKey=newJScrollPane(keyIn);
scrollKey.setAutoscrolls(true);
room.add(scrollKey);
JPanelcontrol=newJPanel();
//创建控制面板
Dimensionsize=newDimension(80,20);
Borderborder=BorderFactory.createRaisedBevelBorder();
JButtonconnect=newJButton("
连接"
);
JButtonsend=newJButton("
发送"
JButtonquit=newJButton("
退出"
connect.setBorder(border);
send.setBorder(border);
quit.setBorder(border);
connect.setPreferredSize(size);
send.setPreferredSize(size);
quit.setPreferredSize(size);
connect.addActionListener(newControlAction(CONNECT));
send.addActionListener(newControlAction(SEND));
quit.addActionListener(newControlAction(QUIT));
control.add(connect);
control.add(send);
control.add(quit);
room.add(control);
content.add(room,BorderLayout.CENTER);
publicvoidshowText(Stringstr)//在输出文本区显示文本
text.append(str+"
\n"
classControlActionimplementsActionListener//按钮事件处理
intcontrolType=CONNECT;
publicControlAction(inttype)
controlType=type;
publicvoidactionPerformed(ActionEvente)
switch(controlType)
caseCONNECT:
//按了连接键
if(!
connectFlag)
try{
socket=newSocket("
192.168.1.85"
8189);
//与服务器建立连接
connectFlag=true;
in=
newBufferedReader(
newInputStreamReader(socket.getInputStream()));
//输入数据流//创建并启动接收线程
out=
newPrintWriter(socket.getOutputStream(),true);
//输出数据流
//booleandone=true;
catch(IOExceptionie)
break;
caseSEND:
//按了发送键
if(connectFlag)
StringkeyText=keyIn.getText();
//在输出文本区显示输入的文本
showText("
客户:
+keyText);
//发送键入的文本
keyIn.setText("
out.println(keyText);
//将输入文本发送给服务器
caseQUIT:
//按了退出键
connectFlag=false;
out.println("
QUIT"
out.close();
in.close();
System.exit
(1);
socket.close();
catch(IOExceptionioe)
(三)ServerWindow的代码
publicclassServerWindowextendsThread
publicstaticServerFramemyWindow=newServerFrame("
聊天室:
服务器"
publicstaticServerSocketserverSocket=null;
myWindow.setBounds(500,100,400,300);
等待连接...."
ServerSocketserverSocket=newServerSocket(8189);
//建立服务器socket,port=8189
Socketincoming=serverSocket.accept();
//等待客户建立连接
myWindow.connectFlag=true;
myWindow.in=
newInputStreamReader(incoming.getInputStream()));
//输入数据流
myWindow.out=
newPrintWriter(incoming.getOutputStream(),true);
//输出数据流*/
连接建立!
myWindow.out.println("
连接建立!
请发送信息,输入BYE结束\n"
//向客户发登录信息
catch(IOExceptione)
+e);
//接收服务器信息
(四)ServerFrame的代码
publicclassServerFrameextendsJFrame//创建JFrame的子类
publicServerFrame(Stringtitle)//构造方法
//connect.addActionListener(newControlAction(CONNECT));
//control.add(connect);
publicvoidshowText(Stringstr)
//按了发送按钮
//发送键入的文本
//按了退出按钮
QuitError!
!
四、涉及到的知识点的说明
窗体(Frame)――容器(Container)――(设置容器布局)――面板(Panel)――(设置面板布局)――控件、
1窗体
在Java程序中,我们如果想创建并运行一个窗体,就必须让我们编写的类继承自JFrame类,而使用JFrame类之前必须导入java.awt.*和java.swing.*如:
2窗体中的Container
如果我们要往空白的窗体中加入其它东西,我们首先需要一个Container(容器)为基础,就像在一个中空的架子上搭了一块木板,然后我们就可以在板子上放我们想放的东西。
我们可以在构造函数中加入
3面板
面板(Panel)是包含在窗口中盛放控件的中间级别的容器。
它将被Container对象包容。
我们用它来归纳各种各样的控件,就像我们平常放置小东西用的带有格子的抽屉。
4加载控件
控件类包括JTextField、JLabel、JButton等等。
声明您想加入窗体的控件,并调用面板对象的add()方法把控件放入面板。
5界面设计
使了BroderLayout时,放在CENTER部位的控件会尽可能的得到窗体的空间。
而其他位置的控件会尽可能地变小(长)。