⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatroom.java

📁 与大家分享
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		
		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 + -