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

📄 chatgui.java

📁 是个swing 写的好的通信程序,里面有数据库和原码,运行就可以了,希望好好的
💻 JAVA
字号:
package smoker.client;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import smoker.tools.*;

public class ChatGUI extends JFrame implements ActionListener, ItemListener {
	public static final long serialVersionUID = 0;
	private JTextArea displayMsgeArea;
	private JTextArea inputArea;
	private JPanel logPanel;
	private JTextArea chatLogArea;
	private JCheckBox chkDisplayMsgContent;
	private JButton btnSend;
	private JButton btnExportMsg;
	private Container container;
	private TitledBorder titleBorder;
	private IClientCenter iClientCenter;
	private JScrollPane logAreaSp;
	private JScrollBar logBar;
	private User currentUser;
	private User chatUser;

	public ChatGUI(IClientCenter iClientCenter, User currentUser, User chatUser) {
		this.iClientCenter = iClientCenter;
		this.currentUser = currentUser;
		this.chatUser = chatUser;
		this.setTitle("与 " + chatUser.getNickName() + " 聊天中...");
		this.setSize(500, 490);
		this.setResizable(false);
		GUIManager.CenterWindow(this);
		this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		init();
		setJComponent();
	}

	protected void processWindowEvent(WindowEvent evt) {
		if (evt.getID() == WindowEvent.WINDOW_CLOSING) {
			displayMsgeArea.setText("");
			inputArea.setText("");
			this.setVisible(false);
		}
	}

	private void init() {
		container = this.getContentPane();
		container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
		displayMsgeArea = new JTextArea(10, 5);
		displayMsgeArea.setEditable(false);
		displayMsgeArea.setLineWrap(true);
		inputArea = new JTextArea(5, 5);
		inputArea.setLineWrap(true);
		chatLogArea = new JTextArea(5, 5);
		chatLogArea.setEditable(false);
		chatLogArea.setLineWrap(true);
		logAreaSp = new JScrollPane(displayMsgeArea);
		logBar = logAreaSp.getVerticalScrollBar();
		chkDisplayMsgContent = new JCheckBox("显示聊天记录");
		chkDisplayMsgContent.addItemListener(this);
		btnSend = GUIManager.createJButton("发送", null, this, "btnSend");
		btnSend.setActionCommand("btnSend");
		btnSend.setMnemonic('S');
		this.getRootPane().setDefaultButton(btnSend);
		btnExportMsg = GUIManager.createJButton("导出聊天记录", null, this, "btnExportMsg");

		inputArea.addKeyListener(new KeyAdapter() { // 添加事件按键事件监听,按 Ctrl + Enter 键发送消息
			public void keyPressed(KeyEvent ek) {
				if (ek.getKeyChar() != KeyEvent.VK_COMPOSE) {
					return;
				}
				if (ek.getKeyChar() == KeyEvent.VK_ENTER) {
					if (inputArea.getText().length() == 0) {
						displayMsgeArea.append("系统提示: 请不要发送空消息!" + "\n\n");
						return;
					}
					String dateTime = MyCalendar.getInstance().myDateTime('(', ')');
					displayMsgeArea.append(currentUser.getNickName() + dateTime + " :\n" + inputArea.getText()+ "\n\n");
					chatLogArea.append(currentUser.getNickName() + dateTime + " :\n" + inputArea.getText() + "\n\n");
					iClientCenter.sendMessage(chatUser.getUserID(), inputArea.getText(), dateTime);
					inputArea.setText("");
				}
			}
		});
	}

	private void setJComponent() {
		titleBorder = BorderFactory.createTitledBorder("聊天内容");
		JPanel displayMsgPanel = new JPanel();
		displayMsgPanel.setLayout(new BorderLayout());
		displayMsgPanel.setBorder(titleBorder);
		displayMsgPanel.add(logAreaSp, BorderLayout.CENTER);

		titleBorder = BorderFactory.createTitledBorder("输入消息");
		JPanel inputPanel = new JPanel();
		inputPanel.setLayout(new BorderLayout());
		inputPanel.setBorder(titleBorder);
		inputPanel.add(new JScrollPane(inputArea), BorderLayout.CENTER);

		JPanel btnPanel = new JPanel();
		btnPanel.setBackground(btnSend.getBackground());
		btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.X_AXIS));
		btnPanel.add(Box.createHorizontalStrut(100));
		btnPanel.add(chkDisplayMsgContent);
		btnPanel.add(Box.createHorizontalStrut(20));
		btnPanel.add(btnExportMsg);
		btnPanel.add(Box.createHorizontalStrut(20));
		btnPanel.add(btnSend);

		titleBorder = BorderFactory.createTitledBorder("聊天记录");
		logPanel = new JPanel();
		logPanel.setBorder(titleBorder);
		logPanel.setLayout(new BorderLayout());
		logPanel.add(new JScrollPane(chatLogArea));

		container.add(displayMsgPanel);
		container.add(inputPanel);
		container.add(btnPanel);
	}

	public void actionPerformed(ActionEvent e) {
		String command = e.getActionCommand();
		if (command.equals("btnSend")) {
			if (inputArea.getText().length() == 0) {
				displayMsgeArea.append("系统提示: 请不要发送空消息!" + "\n\n");
				return;
			}
			String dateTime = MyCalendar.getInstance().myDateTime('(', ')');
			displayMsgeArea.append(currentUser.getNickName() + dateTime+ " :\n" + inputArea.getText() + "\n\n");
			chatLogArea.append(currentUser.getNickName() + dateTime + " :\n"+ inputArea.getText() + "\n\n");
			logBar.setValue(logBar.getMaximum());
			iClientCenter.sendMessage(chatUser.getUserID(),inputArea.getText(), dateTime);
			inputArea.setText("");
		} else if (command == "btnExportMsg") {
			if (chatLogArea.getText().equals("")) {
				JOptionPane.showMessageDialog(null, "记录为空,不能保存", "失败!",JOptionPane.ERROR_MESSAGE);
			} else {
				JFileChooser jFileChooser = new JFileChooser();
				int option = jFileChooser.showSaveDialog(this);
				if (option == JFileChooser.CANCEL_OPTION) {
					return;
				}
				File file = jFileChooser.getSelectedFile();
				try {
					BufferedWriter buf = new BufferedWriter(new FileWriter(file));
					buf.write(chatLogArea.getText());
					buf.close();
				} catch (IOException exception) {
					JOptionPane.showMessageDialog(null, exception.toString(), "记录保存失败!", JOptionPane.ERROR_MESSAGE);
				}
			}

		}
	}

	/**
	 * 将收到的消息显示到 消息内容 中。
	 * 
	 * @param chatInfo
	 */
	public void onChatReceived(ChatInfo chatInfo) {
		StringBuffer sb = new StringBuffer();
		sb.append(chatUser.getNickName() + chatInfo.getDateTime() + " :\n");
		sb.append(chatInfo.getMessage() + "\n\n");
		chatLogArea.append(sb.toString());
		displayMsgeArea.append(sb.toString());
		logBar.setValue(logBar.getMaximum());
	}

	public void itemStateChanged(ItemEvent e) {
		if (chkDisplayMsgContent.isSelected() == true) {
			this.setSize(500, 658);
			container.add(logPanel);
			this.validate();
		} else {
			this.setSize(500, 490);
			container.remove(logPanel);
			this.validate();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -