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

📄 chatinterface.java

📁 这是一个使用Java编写的像QQ一样的即时通讯软件
💻 JAVA
字号:
package client;

import java.awt.Component;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Timer;
import java.util.Vector;

import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.swtdesigner.SwingResourceManager;

/**
 * 和好友聊天的界面
 * 
 * @author user
 * 
 */
public class ChatInterface extends JFrame {

    static int selectedIndex = -1;

    public JList list;

    public DefaultListModel listModel;

    /**
         * Create the frame
         */
    public ChatInterface(final DataOutputStream sendToServer) {

	super();

	setResizable(false);

	getContentPane().setLayout(
		new FormLayout("default:grow(1.0)",
			"fill:255dlu, fill:8dlu:grow(1.0)"));

	setBounds(100, 100, 167, 490);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	final JScrollPane scrollPane = new JScrollPane();
	getContentPane().add(
		scrollPane,
		new CellConstraints(1, 1, 1, 2, CellConstraints.FILL,
			CellConstraints.FILL));

	list = new JList();
	list.setFixedCellHeight(20);
	list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	list.setFont(new Font("宋体", Font.PLAIN, 12));
	list.setAutoscrolls(false);
	list.setCellRenderer(new MyCellRenderer());
	setListValue();

	scrollPane.setViewportView(list);

	addWindowListener(new WindowAdapter() {

	    public void windowClosed(final WindowEvent e) {
		try {

		    sendToServer.writeUTF("Exit@" + Client.number);

		} catch (IOException e1) {

		    e1.printStackTrace();
		}
	    }
	});

	list.addMouseListener(new MouseAdapter() {

	    public void mouseClicked(MouseEvent e) {

		if (e.getButton() == 1) {
		    if (e.getClickCount() == 2) {

			String selectedValue = (String) (list
				.getSelectedValue());

			if (!(new Integer(selectedValue.substring(0,
				selectedValue.indexOf("@"))))
				.equals(Client.number)) {

			    Integer messengerNumber = new Integer(selectedValue
				    .substring(0, selectedValue.indexOf("@")));
			    String messengerName = selectedValue.substring(
				    selectedValue.indexOf("@") + 1,
				    selectedValue.lastIndexOf("@"));

			    Timer timer = Client.timerHashtable
				    .get(messengerNumber);

			    if (timer != null) {

				Client.timerHashtable.get(messengerNumber)
					.cancel();
				Client.timerHashtable.remove(messengerNumber);

				int index = -2;
				index = listModel.indexOf(messengerNumber
					+ "@"
					+ messengerName
					+ "@"
					+ Client.friendIcon
						.get(messengerNumber));

				if (index == -1) {

				    index = listModel.indexOf(messengerNumber
					    + "@" + messengerName + "@"
					    + "bai.gif");

				}

				listModel.setElementAt(messengerNumber
					+ "@"
					+ messengerName
					+ "@"
					+ Client.friendIcon
						.get(messengerNumber), index);

				TalkInterface talkInterface = Client.talkInterfaces
					.get(messengerNumber);

				if (talkInterface == null) {

				    String title = Client.goodFriends
					    .get(Client.number)
					    + " 和 " + messengerName + " 聊天";
				    talkInterface = new TalkInterface(
					    sendToServer);
				    talkInterface.setTitle(title);
				    talkInterface.talkingNumber = messengerNumber;
				    talkInterface.talkingFriends
					    .add(messengerNumber);

				    Vector<String> leaveMessenge = Client.messengeOfFriends
					    .get(messengerNumber);

				    for (int i = 0; i < leaveMessenge.size(); i++) {

					talkInterface.textPane
						.setText(talkInterface.textPane
							.getText()
							+ messengerName
							+ leaveMessenge.get(i)
							+ "\n");

				    }

				    talkInterface.textPane
					    .setSelectionStart(talkInterface.textPane
						    .getText().length());

				    Client.messengeOfFriends
					    .remove(messengerNumber);
				    talkInterface.setVisible(true);

				    Client.talkInterfaces.put(messengerNumber,
					    talkInterface);

				    Vector<String> talking = new Vector<String>();
				    for (int i = 0; i < talkInterface.talkingFriends
					    .size(); i++) {

					talking
						.add(talkInterface.talkingFriends
							.get(i)
							+ "@"
							+ Client.goodFriends
								.get(talkInterface.talkingFriends
									.get(i)));
				    }
				    talkInterface.list.setListData(talking);

				}

			    } else {

				TalkInterface talkInterface = Client.talkInterfaces
					.get(messengerNumber);

				if (talkInterface == null) {

				    String title = Client.goodFriends
					    .get(Client.number)
					    + " 和 " + messengerName + " 聊天";
				    talkInterface = new TalkInterface(
					    sendToServer);
				    talkInterface.setTitle(title);
				    talkInterface.textPane
					    .setSelectionStart(talkInterface.textPane
						    .getText().length());
				    talkInterface.setVisible(true);
				    talkInterface.talkingNumber = messengerNumber;
				    talkInterface.talkingFriends
					    .add(messengerNumber);
				    Client.talkInterfaces.put(messengerNumber,
					    talkInterface);

				    Vector<String> talking = new Vector<String>();
				    for (int i = 0; i < talkInterface.talkingFriends
					    .size(); i++) {

					talking
						.add(talkInterface.talkingFriends
							.get(i)
							+ "@"
							+ Client.goodFriends
								.get(talkInterface.talkingFriends
									.get(i)));
				    }
				    talkInterface.list.setListData(talking);

				} else {

				    Client.talkInterfaces.get(messengerNumber)
					    .setAlwaysOnTop(true);

				}

			    }
			}

		    }
		}

	    }

	});

    }

    private void setListValue() {

	Object[] keyArray = Client.goodFriends.keySet().toArray();
	Vector<String> friends = new Vector<String>();

	listModel = new DefaultListModel();

	for (int i = keyArray.length - 1; i >= 0; i--) {

	    friends.add(keyArray[i] + "@"
		    + (String) (Client.goodFriends.get(keyArray[i])) + "@"
		    + Client.friendIcon.get(keyArray[i]));

	    listModel.addElement(keyArray[i] + "@"
		    + (String) (Client.goodFriends.get(keyArray[i])) + "@"
		    + Client.friendIcon.get(keyArray[i]));

	}

	list.setModel(listModel);

    }

    class MyCellRenderer extends JLabel implements ListCellRenderer {

	public Component getListCellRendererComponent(JList list, Object value,
		int index, // cell index
		boolean isSelected, // is the cell selected
		boolean cellHasFocus) // the list and the cell have the focus
	{
	    String s = value.toString();
	    setText(s.substring(s.indexOf("@") + 1, s.lastIndexOf("@")));
	    String icon = s.substring(s.lastIndexOf("@") + 1);

	    Icon imageIcon = SwingResourceManager.getIcon(ChatInterface.class,"/images/" + icon);

	    setIcon(imageIcon);

	    if (isSelected) {
		setBackground(list.getSelectionBackground());
		setForeground(list.getSelectionForeground());
		
	    } else {
		setBackground(list.getBackground());
		setForeground(list.getForeground());
	    }

	    setEnabled(list.isEnabled());
	    setFont(list.getFont());
	    setOpaque(true);

	    return this;
	}

    }

}

⌨️ 快捷键说明

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