📄 qqclient.java
字号:
package chat.client;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.SocketException;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.swing.*;import chat.client.ChatWindow;import chat.trans.*;public class QQClient extends WindowAdapter implements ActionListener{ /** * @param args */ MainWindow mw; Map<String,ChatWindow> cws = new HashMap<String,ChatWindow>(); Socket s; String owner;//当前在线用户 PrintWriter out; BufferedReader in; public QQClient() throws Exception{ //初始化Socket s = new Socket(Protocol.SERVER_IP, Protocol.SERVER_PORT); out = new PrintWriter( s.getOutputStream()); InputStreamReader ir = new InputStreamReader( s.getInputStream()); in = new BufferedReader(ir); mw = new MainWindow(); addlistener(); } public static void main(String[] args){ try{ new QQClient().run(); }catch (Exception e) { e.printStackTrace(); } } public void addlistener(){ mw.rp.ok.addActionListener(this); mw.mp.login.addActionListener(this); mw.mp.register.addActionListener(this); mw.lp.ok.addActionListener(this); mw.op.qunliao.addActionListener(this); mw.op.siliao.addActionListener(this); mw.addWindowListener(this); } private void process(String msg){ System.out.println("process:" + msg); char type = msg.charAt(0); switch(type){ case Protocol.ONLINE_USER_MSG: mw.setTitle("QQ聊天室--" + owner); mw.show("op"); String[] ss = msg.substring(1).split(","); for(int i=0; i<ss.length; i++){ if(ss[i].equals(owner)){ mw.op.users.addItem("本人"); }else{ mw.op.users.addItem(ss[i]); } } break; case Protocol.REGISTER_RESULT: JOptionPane.showMessageDialog( mw.getParent(),msg.substring(1),"系统提示",JOptionPane.OK_OPTION); mw.show("rp"); break; case Protocol.ADD_USER: mw.op.users.addItem(msg.substring(1)); break; case Protocol.DEL_USER: mw.op.users.removeItem(msg.substring(1)); break; case Protocol.LOGIN_RESULT: JOptionPane.showMessageDialog( mw.getParent(),msg.substring(1), "系统提示",JOptionPane.OK_OPTION); mw.show("lp"); break; case Protocol.CHAT_MSG: @SuppressWarnings("unused") String s = msg.substring(1); String[] s2 = s.split(Protocol.SPLIT_CHAR+""); System.out.println(s + "----" + owner); //if(s2[0].equals(owner)){ // Iterator it = cws.values().iterator(); // while(it.hasNext()){ // ChatWindow cw = (ChatWindow) it.next(); // cw.ta.append("我说:"); // cw.ta.append(s2[2] + "\n"); // } // }else{ if(s2[1].equals("all")){ if(cws.containsKey("all")){ System.out.println(cws.size()); cws.get("all").ta.append(s2[0]+"说:"); cws.get("all").ta.append(s2[2]+"\n"); } }else{ if(!cws.containsKey(s2[0])) createChatWindow(s2[0]); cws.get(s2[0]).ta.append(s2[0] +"说:"); cws.get(s2[0]).ta.append(s2[2]+"\n"); } break; } } public void run() throws Exception{ while(true){ String msg = null; try{ msg = in.readLine(); }catch(SocketException e){ System.out.println("用户下线"); System.exit(0); } process(msg); } } public void windowClosing(WindowEvent e){ try{ s.close(); System.exit(0); }catch(IOException e1){ e1.printStackTrace(); } } public void actionPerformed(ActionEvent e){ if(mw.rp.ok == e.getSource()){ StringBuffer meg = new StringBuffer(); meg.append(Protocol.USER_REGISTER_MSG); meg.append(mw.rp.loginName.getText()); meg.append(Protocol.SPLIT_CHAR); meg.append(mw.rp.passwd.getPassword()); meg.append(Protocol.SPLIT_CHAR); meg.append(mw.rp.realName.getText()); meg.append(Protocol.SPLIT_CHAR); meg.append(mw.rp.sex.getSelectedItem()); out.println(meg); out.flush(); owner = mw.rp.loginName.getText(); }else if(mw.mp.login == e.getSource()){ mw.show("lp"); }else if(mw.mp.register == e.getSource()){ mw.show("rp"); }else if(mw.lp.ok == e.getSource()){ StringBuffer s = new StringBuffer(); s.append(Protocol.USER_LOGIN_MSG); s.append(mw.lp.loginName.getText()); s.append(Protocol.SPLIT_CHAR); s.append(mw.lp.passwd.getPassword()); out.println(s); out.flush(); owner = mw.lp.loginName.getText(); }else if(mw.op.qunliao == e.getSource()){ createChatWindow("all"); }else if(mw.op.siliao == e.getSource()){ String name = mw.op.users.getSelectedItem().toString(); if(name.equals("本人")){ JOptionPane.showMessageDialog( mw.getParent(),"请选择其他在线用户!", "系统提示",JOptionPane.OK_OPTION); }else{ createChatWindow(name); } }else{ Iterator it = cws.keySet().iterator(); while(it.hasNext()){ String key = (String)it.next(); ChatWindow cw = (ChatWindow)cws.get(key); if(e.getSource() == cw.tf){ StringBuffer sb = new StringBuffer(); sb.append(Protocol.CHAT_MSG); sb.append(owner); sb.append(Protocol.SPLIT_CHAR); sb.append(key); sb.append(Protocol.SPLIT_CHAR); sb.append(cw.tf.getText()); out.println(sb); out.flush(); cw.ta.append("我说:" + cw.tf.getText() + "\n"); cw.tf.setText(""); break; } } } } public void createChatWindow(String name){ ChatWindow cw = null; if(name.equals("all")){ cws.put(name,new ChatWindow("群聊")); }else{ cws.put(name, new ChatWindow("与" + name + "私聊")); } cws.put(name,cw); cw.tf.addActionListener(this); System.out.println("已创建聊天窗口," + "共有"+cws.size()+"个"); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -