📄 chatclient.java
字号:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatClient extends Thread implements ActionListener//ListSelectionListener
{
private JFrame FClient;
private JPanel PClient;
//private JPanel PUser;
private JPanel PChat;
private JPanel PWin;
private JPanel PChat1;
private JPanel PChat2;
private JTextArea TPub_win,TMy_win;
private JScrollPane sp2,sp3;
private JList LUser;
private JTextField T2,TChater;
private JLabel L1,L2,L3,LChater;
private JButton B1,B2;
//private JComboBox CFace;
//String chatname;
//ChatMessage msg=new ChatMessage();
String messageType=new String();
String ChatName=new String();
String ToChatName=new String();
String ChatMsg=new String();
String ChatFace=new String();
ObjectOutputStream ToServer;
ObjectInputStream FromServer;
static Vector vector=new Vector(1,1);
Socket toServer;
String server="127.0.0.1";
public ChatClient()
{
try
{
toServer=new Socket(server,1001);
ToServer=new ObjectOutputStream(toServer.getOutputStream());
FromServer=new ObjectInputStream(toServer.getInputStream());
}
catch(Exception e)
{
JOptionPane.showMessageDialog(FClient," 服务器没有打开 ","服务器连接错误",JOptionPane.ERROR_MESSAGE);
System.exit(0);
System.out.println("Error: "+e);
}
//******************************
//界面开始
//******************************
FClient=new JFrame();
PClient=new JPanel();
// PUser=new JPanel();
PChat=new JPanel();
PWin=new JPanel();
PChat1=new JPanel();
PChat2=new JPanel();
TPub_win=new JTextArea();
TPub_win.setEditable(false);
//TMy_win=new JTextArea();
//TMy_win.setEditable(false);
//sp1=new JScrollPane();
sp2=new JScrollPane(TPub_win);
//sp3=new JScrollPane(TMy_win);
LUser=new JList();
LUser.setFixedCellWidth(150);
//T1=new JTextField("a");
T2=new JTextField(30);
L1=new JLabel("我对");
L2=new JLabel("说:");
//L3=new JLabel();
B1=new JButton("发送");
B2=new JButton("退出");
//String Expression[]={" ","微笑着","友好的","愤怒的","无奈的","傻笑着","悲伤的","高兴的","不耐烦的","兴高彩烈的","神秘兮兮的","伤心欲绝的","破口大骂的","得意洋洋的"};
TChater=new JTextField("所有人");
TChater.setEditable(false);
LChater=new JLabel();
//CUser=new JComboBox();
//CFace=new JComboBox(Expression);
FClient.getContentPane().add(PClient);
//PUser.setLayout(new BorderLayout());
//sp1=new JScrollPane(LUser);
//PUser.add("Center",sp1);
PWin.setLayout(new BorderLayout());
JSplitPane jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,sp2,sp3);
jsp.setDividerLocation(300);
PWin.add(jsp);
//PChat.setLayout(new BorderLayout());
PChat1.add(LChater);
//PChat1.add(L3);
PChat1.add(L1);
PChat1.add(TChater);
//PChat1.add(CFace);
PChat1.add(L2);
PChat1.add(T2);
PChat1.add(B1);
PChat1.add(B2);
B1.addActionListener(this);
B2.addActionListener(this);
T2.addKeyListener(new VKENTER());
//LUser.addListSelectionListener(this);
PChat.add(PChat1);
FClient.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
try
{
if(LChater.getText().length()!=0)
{
ChatMessage msg=new ChatMessage("LoginOut",LChater.getText(),null,null,null);
SentToServer(msg);
System.out.println("Close window");
System.exit(0);
}
}
catch(Exception ex)
{
System.out.println("Error: "+ex);
}
}
});
PClient.setLayout(new BorderLayout());
//PClient.add("West",PUser);
PClient.add("Center",PWin);
PClient.add("South",PChat);
Toolkit tk=Toolkit.getDefaultToolkit();
Dimension d=tk.getScreenSize();
int screenwidth=d.width;
int screenheight=d.height;
FClient.setLocation(screenwidth/8,screenheight/8);
FClient.setTitle("聊天室客户端");
FClient.setSize(600,500);
FClient.setVisible(true);
FClient.setDefaultCloseOperation(3);
//******************************
//界面结束
//******************************
//vector.addElement("所有人");
this.start();
}
public void actionPerformed(ActionEvent e)
{
Object source=e.getSource();
if(source==B1)//发送聊天信息
{
try
{
if(T2.getText().length()==0)
{
JOptionPane.showMessageDialog(FClient," 不 能 发 空 消 息 !","内容为空",JOptionPane.NO_OPTION);
}
else
{
SentToServer(Msg());
}
}
catch(Exception ex)
{
System.out.println("Error: "+ex);
}
}
else if(source==B2)//退出聊天
{
try
{
ChatMessage msg=new ChatMessage("LoginOut",LChater.getText(),null,null,null);
SentToServer(msg);
System.exit(0);
}
catch(Exception ex)
{
System.out.println("Error: "+ex);
}
}
}
public void run()
{
try
{
while(true)
{
ChatMessage msg=(ChatMessage)FromServer.readObject();//读取流中的内容
// System.out.println("messageType"+" "+msg.messageType);
// System.out.println("ChatName"+" "+msg.ChatName);
// System.out.println("ToChatName"+" "+msg.ToChatName);
// System.out.println("vector"+" "+msg.vector);
// System.out.println("-------------------------------------");
if(msg.messageType.equals("Login"))
{
addLUser(msg);
}
else if(msg.messageType.equals("toall"))
{
if(msg.ToChatName.equals("所有人"))
{
TPub_win.append(msg.ChatMsg+"\n");
}
else
{
if(msg.ToChatName.equals(LChater.getText())||msg.ChatName.equals(LChater.getText()))
{
TMy_win.append(msg.ChatMsg+"\n");
}
}
}
else if(msg.messageType.equals("LoginOut"))
{
addLUser(msg);
TPub_win.append(msg.ChatName+" 离开了聊天室"+"\n");
}
else if(msg.messageType.equals("Closed"))
{
TPub_win.append(" 服务器已经关闭 "+"\n");
toServer.close();
}
/*
else if(msg.messageType.equals("Error"))
{
if(!TChater.getText().equals(msg.ChatName))
{
JOptionPane.showMessageDialog(FClient," 用户名重复 ","关于",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}*/
}
}
catch(Exception e)
{}
}
class VKENTER extends KeyAdapter
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
{
SentToServer(Msg());
}
}
}
//发送给服务器
public void SentToServer(ChatMessage cm)
{
try
{
ChatMessage toServer=cm;
if(toServer.messageType.equals("Login"))
{
TPub_win.append("欢迎"+cm.ChatName+"进入聊天室"+"\n");
ToServer.writeObject(toServer);
LChater.setText(toServer.ChatName);
}
else if(toServer.messageType.equals("toall"))
{
// if(toServer.ChatName.equals(toServer.ToChatName))
// {
// TMy_win.append("不能对自己私聊"+"\n");
// }
// else
// {
ToServer.writeObject(toServer);
// }
}
else if(toServer.messageType.equals("LoginOut"))
{
ToServer.writeObject(toServer);
}
}
catch(Exception e)
{}
}
//向列表添加用户,在状态栏显示在线人数
void addLUser(ChatMessage cm)
{
if(cm.messageType.equals("Login"))
{
vector=cm.vector;
LUser.removeAll();
LUser.setListData(vector);
if(!LChater.getText().equals(cm.ChatName))
{
vector.addElement(cm.ChatName);
LUser.removeAll();
LUser.setListData(vector);
int i=vector.size();
TPub_win.append("欢迎"+cm.ChatName+"进入聊天室"+"\n");
//L3.setText("现在共有"+(i-1)+"人");
}
// else
// {
// int i=vector.size();
// L3.setText("现在共有"+(i-1)+"人");
// }
}
else if(cm.messageType.equals("LoginOut"))
{
// vector=cm.vector;
vector.remove(cm.ChatName);
LUser.removeAll();
LUser.setListData(vector);
int i=vector.size();
TPub_win.append("欢迎"+cm.ChatName+"进入聊天室"+"\n");
//L3.setText("现在共有"+(i-1)+"人");
}
}
// 获取页面的内容
public ChatMessage Msg()
{
ChatName=LChater.getText();//说话人
ToChatName=TChater.getText();//和谁说
//ChatFace=(String)CFace.getSelectedItem();
ChatMsg=ChatName+"对"+ToChatName+ChatFace+"说:"+T2.getText();//聊天内容
ChatMessage msg=new ChatMessage("toall",ChatName,ToChatName,ChatMsg,null);
T2.setText("");
return msg;
}
// public void valueChanged(ListSelectionEvent evt)
// {
// TChater.setText((String)LUser.getSelectedValue());
// }
public static void main(String[]arg)
{
new ChatClient();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -