📄 client.java
字号:
bSave.setForeground(Color.blue);
bAgain.setForeground(Color.blue);
bCls.setForeground(Color.blue);
lCount.setFont(fontstr);
cUser.setFont(fontstr);
taUser_Message.setFont(new Font("宋体",Font.PLAIN,13));
lUser_List.setForeground(Color.orange);
lUser_Message.setForeground(Color.orange);
lSend_Message.setForeground(Color.black);
lChat_User.setForeground(Color.black);
lSend_Message.setForeground(Color.orange);
lUser_total.setForeground(Color.black);
lCount.setForeground(Color.black);
cUser.setForeground(Color.black);
liUser_List.setBackground(Color.white);
taUser_Message.setBackground(Color.white);
pChat.add(bCls);
pChat.add(bExit);
pChat.add(bAgain);
pChat.add(bSend);
pChat.add(bSave);
pChat.add(lUser_List);
pChat.add(lUser_Message);
pChat.add(lSend_Message);
pChat.add(lChat_User);
pChat.add(lUser_total);
pChat.add(lCount);
pChat.add(liUser_List);
pChat.add(taUser_Message);
pChat.add(tMessage);
pChat.add(cUser);
pChat.add(l);
fChat.addWindowListener(new Windowclose()); //设置监听事件
bCls.addActionListener(this);
bExit.addActionListener(this);
bSend.addActionListener(this);
bSave.addActionListener(this);
liUser_List.addActionListener(this);
tMessage.addActionListener(this);
bAgain.addActionListener(this);
Thread thread = new Thread(this); //启动聊天页面信息刷新线程
thread.start();
fChat.setSize(700,700); //设置面版大小
fChat.setVisible(true); //设置为可见
fChat.setResizable(false); // 设置最大化不可开启
scrnsize=toolkit.getScreenSize(); //将窗口定位在屏幕中央
fChat.setLocation(scrnsize.width/2-fChat.getWidth()/2,
scrnsize.height/2-fChat.getHeight()/2);
} //界面结束
public void run()
{
int message_counter=0; //初始化消息数
int user_total=0;
boolean first_enter=true; //判断是否刚刚登录
boolean user_find; //判断是否找到用户
Vector user_exit=new Vector(); //设置退出
try
{
for(;;)
{
Socket toServer1;
toServer1=new Socket(ipserver,2008);
Message messobj=new Message(); //将信息发往服务器
ObjectOutputStream streamtoserver=new ObjectOutputStream
(toServer1.getOutputStream());
streamtoserver.writeObject((Message)messobj);
ObjectInputStream streamfromserver=new //收来自服务器的信息
ObjectInputStream(toServer1.getInputStream());
messobj=(Message)streamfromserver.readObject();
if (first_enter) //刷新聊天信息列表
{
message_counter=messobj.chat.size(); //如果刚登陆
first_enter=false; //屏蔽该用户登陆前的聊天内容
}
for (int i=message_counter;i<messobj.chat.size();i++)
{
Chat temp=(Chat)messobj.chat.elementAt(i); //使用动态数组计量消息
String temp_message;
if (temp.chatUser.equals(login_name)) //判断
{
if(temp.chatToUser.equals(login_name))
{
temp_message="系统提示你:请不要自言自语"+"\n\n";
}
else
{
if (!temp.whisper) //消息对象发送对象处理
{
temp_message="你对"+temp.chatToUser+"说:"+temp.chatMessage+"\n\n";
}
else
{
temp_message="你对"+temp.chatToUser+"说:"+temp.chatMessage+"\n\n";
}
}
}
else
{
if(temp.chatToUser.equals(login_name)) //已登录用户验证
{
if (!temp.whisper)
{
temp_message=temp.chatUser+"对你说:"+temp.chatMessage+"\n\n"; // 好友发来消息显示
}
else
{
temp_message=temp.chatUser+"对你说:"+temp.chatMessage+"\n\n";
}
}
else
{
if (!temp.chatUser.equals(temp.chatToUser))
{
if (!temp.whisper)
{
temp_message=temp.chatUser+"对"+temp.chatToUser+"说:"+temp.chatMessage+"\n\n";
}
else
{
temp_message="";
}
}
else
{
temp_message="";
}
}
}
taUser_Message.append(temp_message); //在面版中添加显示消息
message_counter++;
}
liUser_List.clear(); //刷新在线用户
for (int i=0;i<messobj.userOnLine.size();i++)
{
String User=(String)messobj.userOnLine.elementAt(i);
liUser_List.addItem(User);
}
Integer a=new Integer(messobj.userOnLine.size());
lCount.setText(a.toString());
if(messobj.userOnLine.size()>user_total) //显示用户进入聊天室的信息
{
String tempstr=messobj.userOnLine.elementAt
(messobj.userOnLine.size()-1).toString();
if(!tempstr.equals(login_name))
{
taUser_Message.append(tempstr+"来了"+"\n\n");
}
}
if(messobj.userOnLine.size()<user_total) //显示用户离开聊天室的信息
{
for(int b=0;b<user_exit.size();b++)
{
user_find=false;
for(int c=0;c<messobj.userOnLine.size();c++)
{
if(user_exit.elementAt(b).equals(messobj.userOnLine.elementAt(c))) //动态数组计量好友退出
{
user_find=true;
break;
}
}
if(!user_find) //没有发现该用户
{
if(!user_exit.elementAt(b).equals(login_name))
{
taUser_Message.append(user_exit.elementAt(b)+"走了"+"\n\n");
}
}
}
}
user_exit=messobj.userOnLine; //关闭对象流
user_total=messobj.userOnLine.size();
streamtoserver.close();
streamfromserver.close();
toServer1.close();
thread.sleep(1000); //等待
}
}
catch (Exception e)
{
JOptionPane jop = new JOptionPane();
jop.showMessageDialog(null,"不能连接服务器!");
System.out.println(e);
}
}
public void actionPerformed(ActionEvent e) //监听按钮响应
{
Object source=(Object)e.getSource();
if(source.equals(bCls))
{
messageClear(); //清空
tMessage.requestFocus(); //光标指向文本处
}
if(source.equals(bExit)) //退出
{
exit();
}
if(source.equals(bSend)) //发送消息
{
sendMessage();
tMessage.requestFocus();
}
if(source.equals(bSave)) //保存消息
{
saveMessage();
tMessage.requestFocus(); //光标指向文本处
}
if(source.equals(liUser_List)) //双击列表框
{
changname(); //改变好友
tMessage.requestFocus(); //光标指向文本处
}
if(source.equals(tMessage))
{
sendMessage(); //发送消息
tMessage.requestFocus(); //光标指向文本处
}
if(source.equals(bAgain))
{
new LoginPanel(serverip);
}
} //监听窗口关闭响应
class Windowclose extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
exit();
}
}
public void messageClear() //"清屏"按钮
{
taUser_Message.setText("");
}
public void exit() //"退出"按钮
{
Exit1 exit=new Exit1();
exit.exitname=login_name;
try //发送退出信息
{
Socket toServer=new Socket(ipserver,2008);
ObjectOutputStream outObj=new ObjectOutputStream //向服务器发送信息
(toServer.getOutputStream());
outObj.writeObject(exit);
outObj.close(); //关闭流
toServer.close();
fChat.dispose();
}
catch(Exception e)
{
}
}
public void sendMessage() //"发送"按钮
{
Chat chatobj=new Chat();
chatobj.chatUser=login_name;
chatobj.chatMessage=tMessage.getText();
chatobj.chatToUser=String.valueOf(cUser.getSelectedItem());
chatobj.whisper=chPrivateChat.isSelected()?true:false;
try //向服务器发送信息
{
Socket toServer=new Socket(ipserver,2008); //创建套接字
ObjectOutputStream outObj=new ObjectOutputStream(toServer.getOutputStream());
outObj.writeObject(chatobj);
tMessage.setText(""); //清空文本框
outObj.close(); //关闭流
toServer.close();
}
catch(Exception e)
{
}
}
public void saveMessage() //"保存"按钮
{
try
{
FileOutputStream fileoutput=new FileOutputStream("message.txt",true); //建立文件输入输出流
String temp=taUser_Message.getText(); //
System.out.println(temp);
fileoutput.write(temp.getBytes()); //文件写为字节抛出
fileoutput.close(); ////输出关闭
}
catch(Exception e)
{
System.out.println(e);
}
}
public void changname() //将所选用户添加到cUser中
{
boolean key = true;
String selected = liUser_List.getSelectedItem();
for(int i = 0; i < cUser.getItemCount(); i++) // 添加用户计数
{
if(selected.equals(cUser.getItemAt(i)))
{
key = false;
break;
}
}
if(key == true)
{
cUser.insertItemAt(selected,0);
}
cUser.setSelectedItem(selected);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -