📄 chatroom.java
字号:
userChat1.add(queryInformation);
userChat1.add(queryAllLog);
userChat1.add(queryPslLog);
userChat1.add(changePassword);
userChat1.add(secretChat);
userChat1.add(secretChatToUser);
userChat1.add(secretChatToUserOfName);
userChat1.add(secret);
Icon logo1 = new ImageIcon("image\\a.jpg");
lblLogo = new JLabel(logo1);
lblLogo.setBounds(0, 0, 540, 500);
friendOfUser = new JLabel("我的好友列表");
friendOfUser.setForeground(Color.YELLOW);
friendOfUser.setFont(new Font("宋体", 0, 12));
lstFriend = new JList();
lstFriend.setFont(new Font("宋体", 0, 12));
lstFriend.setVisibleRowCount(17);
lstFriend.setFixedCellWidth(180);
lstFriend.setFixedCellHeight(18);
// lstUser.setListData(listVector);
spUser = new JScrollPane();
spUser.setBackground(Color.decode("#d6f4f2"));
spUser.setFont(new Font("宋体", 0, 12));
// spUser.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
spUser.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
spUser.getViewport().setView(lstFriend);
friend = new JList();
friend.setListData(new String[] { "" });
//list.setModel(null);
//.setListData(null);
spUser.setViewportView(friend);
userChat1.setBounds(45,60, 200, 370);
friendOfUser.setBounds(335, 40, 100, 30);
spUser.setBounds(300, 60, 200, 370);
userChat.add(userChat1);
userChat.add(friendOfUser);
userChat.add(spUser);
userChat.add(lblLogo);
//----------主标签页面--------------
tpServer = new JTabbedPane(JTabbedPane.TOP);
tpServer.setBackground(Color.decode("#d6f4f2"));
tpServer.setFont(new Font("宋体", 0, 12));
tpServer.add("公共聊天室", pnlChat);
tpServer.add("私人信息管理", userChat);
this.getContentPane().add(tpServer);
setVisible(true);
frmChat.setSize(600, 500);
frmChat.setVisible(true);
frmChat.setResizable(false);
frmChat.getContentPane().add(tpServer);
// 将窗口定位在屏幕中央
scrnsize = toolkit.getScreenSize();
frmChat.setLocation(scrnsize.width / 2 - frmChat.getWidth() / 2,
scrnsize.height / 2 - frmChat.getHeight() / 2);
// 启动聊天页面信息刷新线程
Thread thread = new Thread(this);
thread.start();
} // 构造方法结束
protected void freshFont() {
String ziti = zitiComboBox.getSelectedItem().toString();
int yangShi = 0;
String yangShiString = yangShiComboBox.getSelectedItem().toString();
if (yangShiString.equals("常规")) {
yangShi = Font.PLAIN;
} else if (yangShiString.equals("粗体")) {
yangShi = Font.BOLD;
} else if (yangShiString.equals("斜体")) {
yangShi = Font.ITALIC;
} else if (yangShiString.equals("粗斜")) {
yangShi = Font.BOLD | Font.ITALIC;
}
int daXiao = Integer.parseInt(daXiaoComboBox.getSelectedItem()
.toString());
taUserMessage.setFont(new Font(ziti, yangShi, daXiao));
taUserMessage.setForeground(hanziLabel.getForeground());
}
protected void freshColor() {
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, 30002);
// 将信息发往服务器
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;
}
// taUserMessage.setText("");
if (!serverMessage.equals(messobj.serverMessage)) {
serverMessage = messobj.serverMessage;
taUserMessage.append("[系统消息]:" + serverMessage+"\n");
}
for (int i = intMessageCounter; i < messobj.chat.size(); i++) {
Chat temp = (Chat) messobj.chat.elementAt(i);
// chenmin
String temp_message = "";
temp_message = "【" + temp.getChatUserName() + "】:"+"\n" + " "+temp.getChatMessage()+"\n";
taUserMessage.append(temp_message);
intMessageCounter++;
}
// //////刷新在线用户//////////
lstUserList.clear();
for (int i = 0; i < messobj.userOnLine.size(); i++) {
String user = ((User) messobj.userOnLine.elementAt(i)).getUserName();
lstUserList.addItem(user);
}
Integer a = new Integer(messobj.userOnLine.size());
lblCount.setText(a.toString());
// 显示用户进入聊天室的信息
if (messobj.userOnLine.size() > intUserTotal) {
// chenmin
String tempstr = ((User) messobj.userOnLine
.elementAt(messobj.userOnLine.size() - 1)).getUserName();
// 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 = ((User) user_exit.elementAt(b)).getUserName();
if (tempstr.equals(((User) messobj.userOnLine
.elementAt(c)).getUserName())) {
isFound = true;
break;
}
}
if (!isFound) // 没有发现该用户
{
String tempstr = ((User) user_exit.elementAt(b)).getUserName();
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();
}
} // 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(changePassword)){
new ChangePassword(strLoginName);
}
if (source.equals(queryInformation)){
new QueryInf(strLoginName);
}
if (source.equals(queryAllLog)) // 双击列表框
{
//new Query1(strLoginName);//补充一个函数
}
if (source.equals(queryAllLog)) // 双击列表框
{
//new Query2(strLoginName);//补充一个函数
}
}
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, 30002);
// 向服务器发送信息
ObjectOutputStream outObj = new ObjectOutputStream(toServer
.getOutputStream());
outObj.writeObject(exit);
outObj.close();
frmChat.dispose();
toServer.close();
// this.destroy();
} catch (Exception e) {
}
} // exit()结束
// "发送"按钮
public void sendMessage() {
Chat chatobj = new Chat();
chatobj.setChatUserName(strLoginName);
chatobj.setChatMessage(txtMessage.getText());
System.out.println(chatobj.getChatMessage());
// 向服务器发送信息
try {
Socket toServer = new Socket("localhost", 30002);
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);
}
}
public static void main(String args[]) {
new ChatRoom("测试用户", "127.0.0.1");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -