📄 client.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.io.*;
import java.net.*;
public class Client extends JFrame{
private JComboBox combobox;//组合框
private JTextArea textarea;//区编辑框,用于显示各种信息
private JScrollPane js;//区编辑框中的滚动条
private JTextField textfield,textfield1,textfield2;//行编辑框,用于输入昵称,主机IP,聊天信息
private JCheckBox checkbox;//复选框
private JComboBox actionlist;//表情列表
private JButton jb;//登录和离线按钮
private Border border;//按钮背景
Socket socket;//套接字
ObjectOutputStream output;//输出流
ObjectInputStream input;//输入流
ClientReceiveThread recvthread;//客户端接收线程类对象
public Client()//构造方法
{
super("用户");//标题
Border bevelBorder=BorderFactory.createBevelBorder(BevelBorder.RAISED,Color.white,Color.white,Color.white,Color.white);
Border emptyBorder=BorderFactory.createEmptyBorder(1,1,1,1);
border=BorderFactory.createCompoundBorder(bevelBorder,emptyBorder);//定义按钮背景
jb=new JButton();//创建按钮
jb.setText("登录");//在按钮上显示登录
jb.setForeground(Color.red);//按钮字显示为红色
combobox=new JComboBox();//创建组合框
combobox.addItem("全部");//在组合框里面添加"全部"
combobox.setSelectedIndex(0);
textarea=new JTextArea(20,20);//创建区编辑框
textarea.setEditable(false);//设置为可读
js=new JScrollPane();//创建滚动条
js.getViewport().add(textarea);//在滚动条中添加区编辑框
textfield=new JTextField("输入你的昵称!~",20);//在行编辑框中显示各种提示信息
textfield1=new JTextField("输入主机的IP地址!~",20);
textfield2=new JTextField("输入聊天信息!~",20);
checkbox=new JCheckBox("悄悄话");//创建复选按钮
checkbox.setSelected(false);
actionlist=new JComboBox();//创建组合框
actionlist.addItem("平常的");//在组合框中添加各种表情
actionlist.addItem("高兴的");
actionlist.addItem("气愤的");
actionlist.addItem("发狂的");
actionlist.setSelectedIndex(0);
jb.setBorder(border);//添加按钮样式
jb.setBounds(10,10,50,30);//设置各种组件的位置
textarea.setBounds(30,55,450,250);
textfield2.setBounds(30,360,450,35);
textfield2.setEnabled(false);//设置为可读
js.setBounds(30,55,450,250);
combobox.setBounds(30,320,90,30);
actionlist.setBounds(150,320,90,30);
checkbox.setBounds(270,320,90,30);
textfield.setBounds(100,10,120,20);
textfield1.setBounds(230,10,120,20);
setLayout(null);//布局管理器为空
getContentPane().add(jb);//添加各种组件到容器中
getContentPane().add(js);
getContentPane().add(textfield2);
getContentPane().add(combobox);
getContentPane().add(actionlist);
getContentPane().add(checkbox);
getContentPane().add(textfield);
getContentPane().add(textfield1);
jb.addActionListener(new ActionListener()//添加按钮监听器
{
public void actionPerformed(ActionEvent e)
{
Login();//登录的方法
}
});
textfield2.addActionListener(new ActionListener()//添加行编辑框监听器
{
public void actionPerformed(ActionEvent e)
{
SendMessage();//发送消息的方法
}
});
addWindowListener(new WindowAdapter()//添加容器的监听器
{
public void windowClosing(WindowEvent e)
{
Logout();//离线的方法
System.exit(0);
}
});
setSize(550,460);//设置容器的大小
show();//设置容器为可见
}
public void Login()//登录方法
{
if(jb.getText()=="登录"){//当点击按钮时,判断按钮上字,就使用不同的方法
jb.setText("离线");
textfield2.setEnabled(true);//设置各种状态
textfield1.setEnabled(false);
textfield.setEnabled(false);
jb.setForeground(Color.blue);//设置颜色为蓝色
try
{
String n=textfield1.getText();//输入主机IP的方法,并与主机连接,定义输入输出流
socket=new Socket(n,8000);
output=new ObjectOutputStream(socket.getOutputStream());
output.flush();
input=new ObjectInputStream(socket.getInputStream());
output.writeObject(textfield.getText());
output.flush();
recvthread=new ClientReceiveThread(socket,output,input,combobox,textarea);//服务器接收信息线程
recvthread.start();
textfield1.setEnabled(false);
textfield.setEnabled(false);
}catch(Exception e)
{;
}
}else{//当按钮上的字是离线时
jb.setText("登录");
textfield1.setEnabled(true);//设置各种状态
textfield.setEnabled(true);
textfield2.setEnabled(false);
jb.setForeground(Color.red);
if(socket.isClosed())//判断套接字是否关闭
{
return;
}
try
{
output.writeObject("用户下线");
output.flush();
input.close();
output.close();
socket.close();
}catch(Exception e)
{;
}
}
}
public void Logout()//离线的方法
{
textfield.setText("输入你的昵称!~");
if(socket.isClosed())
{
return;
}
try
{
output.writeObject("用户下线");
output.flush();
input.close();
output.close();
socket.close();
}catch(Exception e)
{;
}
}
public void SendMessage()//传消息的方法
{
String tosomebody=combobox.getSelectedItem().toString();//得到发送消息的对象
String status="";//得到发送信息状态
if(checkbox.isSelected())//判断是否选择了复选按钮
{
status="悄悄话";
}
String action=actionlist.getSelectedItem().toString();//得到表情
String message=textfield2.getText();//得到聊天信息
if(socket.isClosed())//判断套接字是否关闭
{
return;
}
try
{
output.writeObject("聊天信息");//处理各类信息
output.flush();
output.writeObject(tosomebody);
output.flush();
output.writeObject(status);
output.flush();
output.writeObject(action);
output.flush();
output.writeObject(message);
output.flush();
}catch(Exception e)
{;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -