📄 chatroom.java
字号:
taUserMessage.setFont(new Font(ziti, yangShi, daXiao));
taUserMessage.setForeground(hanziLabel.getForeground());
}
protected void freshColor() {
// TODO 自动生成方法存根
hanziLabel.setForeground(new Color(blueSlider.getValue(), redSlider
.getValue(), greenSlider.getValue()));
freshFont();
}
@SuppressWarnings("deprecation")
public void run() {
int intMessageCounter = 0;
int intUserTotal = 0;
boolean isFirstLogin = true; // 判断是否刚登陆
boolean isFound; // 判断是否找到用户
Vector user_exit = new Vector();
try {
// Socket toServer;
// toServer = new Socket(strServerIp, 1001);
for (;;) {
Socket toServer;
toServer = new Socket(strServerIp, 1001);
// 将信息发往服务器
messobj = new Message();
ObjectOutputStream streamtoserver = new ObjectOutputStream(
toServer.getOutputStream());
streamtoserver.writeObject((Message) messobj);
// 收来自服务器的信息
ObjectInputStream streamfromserver = new ObjectInputStream(
toServer.getInputStream());
messobj = (Message) streamfromserver.readObject();
// //////刷新聊天信息列表//////////
if (isFirstLogin) // 如果刚登陆
{
intMessageCounter = messobj.chat.size(); // 屏蔽该用户登陆前的聊天内容
isFirstLogin = false;
}
if (strLoginName.equals(messobj.ti)) {
// taUserMessage.append("ni bei ti");
exitChatRoom();
JOptionPane.showMessageDialog(null, strLoginName
+ "你被管理员剔除!");
}
if (!serverMessage.equals(messobj.serverMessage)) {
serverMessage = messobj.serverMessage;
taUserMessage.append("[系统消息]:" + serverMessage+"\n");
}
// taUserMessage.setText("");
for (int i = intMessageCounter; i < messobj.chat.size(); i++) {
Chat temp = (Chat) messobj.chat.elementAt(i);
// chenmin
String emote = temp.emote;
if (emote.equals("表情")) {
emote = "";
} else {
emote += "地";
}
String temp_message;
if (temp.chatUser.equals(strLoginName)) {
if (temp.chatToUser.equals(strLoginName)) {
temp_message = "系统提示您:请不要自言自语!" + "\n";
} else {
if (!temp.whisper) // 不是悄悄话
{
temp_message = "【你】对【" + temp.chatToUser + "】"
+ emote + "说:" + temp.chatMessage
+ "\n";
} else {
temp_message = "【你】悄悄对【" + temp.chatToUser
+ "】" + emote + "说:" + temp.chatMessage
+ "\n";
}
}
} else {
if (temp.chatToUser.equals(strLoginName)) {
if (!temp.whisper) // 不是悄悄话
{
temp_message = "【" + temp.chatUser + "】对【你】"
+ emote + "说:" + temp.chatMessage
+ "\n";
} else {
temp_message = "【" + temp.chatUser + "】悄悄对【你】"
+ emote + "说:" + temp.chatMessage
+ "\n";
}
} else {
if (!temp.chatUser.equals(temp.chatToUser)) // 对方没有自言自语
{
if (!temp.whisper) // 不是悄悄话
{
temp_message = "【" + temp.chatUser + "】对【"
+ temp.chatToUser + "】" + emote
+ "说:" + temp.chatMessage + "\n";
} else {
temp_message = "";
}
} else {
temp_message = "";
}
}
}
taUserMessage.append(temp_message);
intMessageCounter++;
}
// //////刷新在线用户//////////
lstUserList.clear();
for (int i = 0; i < messobj.userOnLine.size(); i++) {
String User = ((Customer) messobj.userOnLine.elementAt(i)).custName;
lstUserList.addItem(User);
}
Integer a = new Integer(messobj.userOnLine.size());
lblCount.setText(a.toString());
// 显示用户进入聊天室的信息
if (messobj.userOnLine.size() > intUserTotal) {
// chenmin
String tempstr = ((Customer) messobj.userOnLine
.elementAt(messobj.userOnLine.size() - 1)).custName;
// String tempstr = messobj.userOnLine.elementAt(
// messobj.userOnLine.size() - 1).toString();
if (!tempstr.equals(strLoginName)) {
taUserMessage.append("【" + tempstr + "】来了" + "\n");
}
}
// 显示用户离开聊天室的信息
// 显示用户离开聊天室的信息
if (messobj.userOnLine.size() < intUserTotal) {
for (int b = 0; b < user_exit.size(); b++) {
isFound = false;
for (int c = 0; c < messobj.userOnLine.size(); c++) {
String tempstr = ((Customer) user_exit.elementAt(b)).custName;
if (tempstr.equals(((Customer) messobj.userOnLine
.elementAt(c)).custName)) {
isFound = true;
break;
}
}
if (!isFound) // 没有发现该用户
{
String tempstr = ((Customer) user_exit.elementAt(b)).custName;
if (!tempstr.equals(strLoginName)) {
taUserMessage.append("【" + tempstr + "】走了"
+ "\n");
}
}
}
}
user_exit = messobj.userOnLine;
intUserTotal = messobj.userOnLine.size();
streamtoserver.close();
streamfromserver.close();
toServer.close();
Thread.sleep(3000);
}
} catch (Exception e) {
@SuppressWarnings("unused")
JOptionPane jop = new JOptionPane();
JOptionPane.showMessageDialog(null, "不能连接服务器!");
e.printStackTrace();
frmChat.dispose();
// System.out.println();
// System.out.println(e.getMessage());
}
} // run()结束
private void exitChatRoom() {
// TODO 自动生成方法存根
exit();
}
// /////////监听按钮响应//////////////
public void actionPerformed(ActionEvent ae) {
Object source = (Object) ae.getSource();
if (source.equals(btnTimer)) {
new Clock();
}
if (source.equals(btnCls)) {
clearMessage();
}
if (source.equals(btnExit)) {
exit();
}
if (source.equals(btnSend)) {
sendMessage();
}
if (source.equals(btnSave)) {
saveMessage();
}
if (source.equals(lstUserList)) // 双击列表框
{
changeUser();
}
} // actionPerformed()结束
// /////////监听窗口关闭响应//////////////
class Windowclose extends WindowAdapter {
public void windowClosing(WindowEvent e) {
exit();
}
}
// "清屏"按钮
public void clearMessage() {
taUserMessage.setText("");
}
// "退出"按钮
public void exit() {
Exit exit = new Exit();
exit.exitname = strLoginName;
// 发送退出信息
try {
Socket toServer = new Socket(strServerIp, 1001);
// 向服务器发送信息
ObjectOutputStream outObj = new ObjectOutputStream(toServer
.getOutputStream());
outObj.writeObject(exit);
outObj.close();
toServer.close();
frmChat.dispose();
// this.destroy();
} catch (Exception e) {
}
} // exit()结束
// "发送"按钮
public void sendMessage() {
Chat chatobj = new Chat();
chatobj.chatUser = strLoginName;
chatobj.chatMessage = txtMessage.getText();
chatobj.chatToUser = String.valueOf(cmbUser.getSelectedItem());
chatobj.whisper = chPrivateChat.isSelected() ? true : false;
chatobj.emote = emote.getSelectedItem().toString();
// 向服务器发送信息
try {
Socket toServer = new Socket(strServerIp, 1001);
ObjectOutputStream outObj = new ObjectOutputStream(toServer
.getOutputStream());
outObj.writeObject(chatobj);
txtMessage.setText(""); // 清空文本框
outObj.close();
toServer.close();
} catch (Exception e) {
}
} // sendMessage()结束
// "保存"按钮
public void saveMessage() {
try {
FileOutputStream fileoutput = new FileOutputStream(
this.strLoginName + "_message.txt", true);
String temp = taUserMessage.getText();
// System.out.println(temp);
fileoutput.write(temp.getBytes());
fileoutput.close();
JOptionPane.showMessageDialog(null, "聊天记录保存在" + this.strLoginName
+ "_message.txt");
} catch (Exception e) {
System.out.println(e);
}
}
// 将所选用户添加到cmbUser中
public void changeUser() {
boolean key = true;
String selected = lstUserList.getSelectedItem();
// JOptionPane.showMessageDialog(null, selected);
for (int i = 0; i < cmbUser.getItemCount(); i++) {
if (selected.equals(cmbUser.getItemAt(i))) {
key = false;
break;
}
}
if (key == true) {
cmbUser.insertItemAt(selected, 0);
}
String head = getUserHead(lstUserList.getSelectedItem());
// JOptionPane.showMessageDialog(null, head);
cmbUser.setSelectedItem(selected);
// chenmin
headLabel.setIcon(new ImageIcon("face//" + head + ".JPG"));
} // changeUser()结束
// chenmin
protected void freshHead() {
// TODO 自动生成方法存根
String head = getUserHead(cmbUser.getSelectedItem().toString());
// JOptionPane.showMessageDialog(null, head);
// cmbUser.setSelectedItem(selected);
// chenmin
headLabel.setIcon(new ImageIcon("face//" + head + ".JPG"));
}
// chenmin
private String getUserHead(String selectedItem) {
// TODO 自动生成方法存根
String head = "oo";
for (int i = 0; i < messobj.userOnLine.size(); i++) {
String User = ((Customer) messobj.userOnLine.elementAt(i)).custName;
head = ((Customer) messobj.userOnLine.elementAt(i)).custHead;
// System.out.println(User+":"+head);
if (User.equals(selectedItem)) {
break;
}
// lstUserList.addItem(User);
}
return head;
}
public static void main(String args[]) {
new ChatRoom("测试用户", "127.0.0.1");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -