黑马程序员技术交流社区

标题: 聊天系统,客户端Client(六) [打印本页]

作者: 王鑫宇    时间: 2011-8-4 18:18
标题: 聊天系统,客户端Client(六)
7.ClientChatGroup类[code=java]package util.doTask;

import java.awt.Color;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.Reader;
import java.io.Writer;
import java.net.Socket;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import util.ClientMainWindow;

public class ClientChatGroup extends ClientMainWindow {
        private JLabel ps;//温馨提示文字
        private static JLabel number;//在线人数文字
        private JScrollPane main;//主显示滚动面板
        private static JTextArea mainText;//主显示文本区
        private JLabel my;//我的信息文字
        private JScrollPane second;//次显示滚动面板
        private static JTextArea secondText;//次显示文本区
        private static JList memberList;//显示全部在线用户名称的控件
        private JLabel to;//对文字
        private JTextField talkTo;//显示聊天对象的文本框
        private JComboBox face;//聊天表情选择下拉列表
        private String faces[]={"正经地","悄悄地","开心地","难过地","严肃地"};//向下拉列表中添加的文字,用数组表示
        private JRadioButton publicTalk;//公聊单选框
        private JRadioButton privateTalk;//私聊单选框
        private ButtonGroup publicANDprivate;//确定单选按钮分组的辅助控件
        private JCheckBox detach;//确认是否实现分屏的检查框
        private JLabel psDetach;//分屏并不起保密作用,要保密请选择私聊!文字
        private JLabel say;//说文字
        private JTextArea saying;//输入聊天信息的文本框
        private JScrollPane saying_pane;
        private JButton send;//发送按钮
        private JLabel changeColor;//换肤文字
        private JComboBox toChangeColor;//换肤选择框
        private String color[]={"默认皮肤","绿色心情","粉红浪漫"};//设置下拉列表中的皮肤
        private JComboBox bugOff;//滚屏选择框
        private String bugoffORnot[]={"滚屏","停止滚屏"};//设置下拉列表中的是否滚屏
        private JButton exit;//推出系统按钮
        private Timer timer;
        private Date dateTime;
        private PrintStream print;
       
        private ClientMainWindow cmw;
       
       
        public ClientChatGroup(ClientMainWindow c){
                cmw = c;
                chatInit();
        }


        private void chatInit(){
                this.setBounds(100, 60, 800, 650);
                this.setTitle("UNIX 聊天 当前用户:"+mySecondName);
                this.setResizable(false);
                this.setVisible(true);
                this.setLayout(null);
                this.addWindowListener(new WindowAdapter(){                       
                        public void windowClosing(WindowEvent e) {
                                exit();                       
                        }
                });       
               
               
               
               
               
               
               
               
                ps=new JLabel("温馨提示:文明聊天是一种美德");
                ps.setBounds(30,20,300,20);
                this.add(ps);
               
                number=new JLabel();
                number.setBounds(550,20,150,20);
                this.add(number);
               
                mainText=new JTextArea();
                mainText.setFocusable(false);
                main=new JScrollPane(mainText);
                main.setBounds(30, 50, 480, 430);
                this.add(main);
               
                my=new JLabel("我的信息");
                my.setBounds(30, 305, 300, 20);
                this.add(my);
               
                secondText=new JTextArea();
                secondText.setFocusable(false);
                second=new JScrollPane(secondText);
                second.setBounds(30,330,480,150);
                second.setVisible(false);
                this.add(second);
               
                memberList=new JList();
                memberList.setBounds(550,50,210,430);
                memberList.addListSelectionListener(new ListSelectionListener(){
                        public void valueChanged(ListSelectionEvent arg0) {
                                if(privateTalk.isSelected())
                                        talkTo.setText((String)memberList.getSelectedValue());
                        }
                });
                this.add(memberList);       

                memberList.setModel(model);
                userCount=model.getSize();
                this.number.setText("当前在线人数:"+userCount);
               
               
                to=new JLabel("对:");
                to.setBounds(30, 490, 30, 20);
                this.add(to);
               
                talkTo=new JTextField("所有人");
                talkTo.setBounds(65,490,60,20);
                talkTo.setFocusable(false);
                this.add(talkTo);
               
                face=new JComboBox(faces);
                face.setBounds(130, 490, 90, 20);
                this.add(face);
               
                publicTalk=new JRadioButton("公聊");
                publicTalk.setSelected(true);
                publicTalk.setBounds(225, 490, 55, 20);
                publicTalk.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent arg0) {
                                talkTo.setText("所有人");
                               
                        }
                });
                this.add(publicTalk);
                privateTalk=new JRadioButton("私聊");
                privateTalk.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent e) {
                                memberList.setSelectedIndex(0);
                        }
                });
                privateTalk.setBounds(280, 490, 55, 20);
                this.add(privateTalk);
                publicANDprivate=new ButtonGroup();
                publicANDprivate.add(publicTalk);
                publicANDprivate.add(privateTalk);
               
                detach=new JCheckBox("分屏显示");
                detach.setBounds(335, 490, 100, 20);
                detach.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent e) {
                                if(detach.isSelected()){
                                        main.setSize(480,250);
                                        main.validate();
                                        second.setVisible(true);
                                        my.setVisible(true);
                                        psDetach.setVisible(true);
                                }
                                else if(!detach.isSelected()){
                                        main.setSize(480,430);
                                        main.validate();
                                        second.setVisible(false);
                                        my.setVisible(false);
                                        psDetach.setVisible(false);
                                }
                        }
                }
                );
                this.add(detach);
               
                psDetach=new JLabel("分屏并不起保密作用,要保密请选择私聊!");
                psDetach.setForeground(Color.red);
                psDetach.setBounds(435, 490, 250, 20);
                psDetach.setVisible(false);
                this.add(psDetach);
               
                say=new JLabel("说:");
                say.setBounds(30, 520, 30, 20);
                this.add(say);
               
                saying=new JTextArea(20,3);
                saying_pane = new JScrollPane(saying);
                saying_pane.setBounds(60, 520, 375, 60);
                this.add(saying_pane);
               
                send=new JButton("发送");
                send.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent arg0) {
                                String temp = saying.getText();
                                if(temp.trim().equals("")){return;}
                                if(talkTo.getText().equals(userName)){return;}
                                if(talkTo.getText().equals("")){return;}
                                else if(talkTo.getText().equals("所有人")){
                                        try {
                                                publicTalk.setSelected(true);
                                                dos.writeUTF("[公聊]  <"+userName+">  "+face.getSelectedItem().toString()+" 对<"+talkTo.getText()+">"+"说: "+temp+"\n");                                               
                                                secondText.append("[公聊]  我  "+face.getSelectedItem().toString()+" 对<"+talkTo.getText()+">"+"说: "+temp+"\n");
                                        } catch (IOException e) {
                                                e.printStackTrace();
                                        }
                                }
                                else if(!talkTo.getText().equals("所有人")){
                                        try{
                                                dos.writeUTF("[私聊]  <"+userName+"> "+face.getSelectedItem().toString()+" 对 <"+allUserName.get(memberList.getSelectedIndex())+"> "+"说: "+temp+"\n");
                                                mainText.append("[私聊]  我  "+face.getSelectedItem().toString()+" 对 <"+talkTo.getText()+"> "+ "说:"+temp+"\n");
                                                secondText.append("[私聊]  我  "+face.getSelectedItem().toString()+" 对 <"+talkTo.getText()+"> "+ "说:"+temp+"\n");
                                                //print.print("[私聊]  我  "+face.getSelectedItem().toString()+" 对 <"+talkTo.getText()+"> "+ "说:"+temp+"\n");
                                        }catch(Exception e){
                                                e.printStackTrace();
                                        }                                       
                                }
                                saying.setText("");
                        }
                });
                send.setBounds(445, 530, 60, 20);
                this.add(send);
               
                changeColor=new JLabel("换肤");
                changeColor.setBounds(30, 590, 30, 20);
                this.add(changeColor);
               
                toChangeColor=new JComboBox(color);
                toChangeColor.setBounds(60, 590, 100, 20);
                toChangeColor.addItemListener(new ItemListener(){
                        public void itemStateChanged(ItemEvent e) {
                                if(toChangeColor.getSelectedIndex()==0){
                                        getContentPane().setBackground(new Color(234,234,234));
                                        publicTalk.setBackground(new Color(234,234,234));
                                        privateTalk.setBackground(new Color(234,234,234));
                                        detach.setBackground(new Color(234,234,234));
                                }else if(toChangeColor.getSelectedIndex()==1){
                                        getContentPane().setBackground(Color.green);
                                        publicTalk.setBackground(Color.green);
                                        privateTalk.setBackground(Color.green);
                                        detach.setBackground(Color.green);
                                }else if(toChangeColor.getSelectedIndex()==2){
                                        getContentPane().setBackground(Color.pink);
                                        publicTalk.setBackground(Color.pink);
                                        privateTalk.setBackground(Color.pink);
                                        detach.setBackground(Color.pink);
                                }
                        }                       
                });
                this.add(toChangeColor);
               
                bugOff=new JComboBox(bugoffORnot);
                bugOff.setBounds(170, 590, 80, 20);
                this.add(bugOff);
               
                exit=new JButton("关闭");
                exit.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent arg0) {
                                int num = (JOptionPane.showConfirmDialog(csmi,"确定退出?","提示信息",0,1));
                                if(num==0)
                                        exit();
                                return;
                        }
                });
                exit.setBounds(445, 560, 60, 20);
                this.add(exit);
               
                this.validate();
                }
        public void exit(){
                timer.stop();
                this.dispose();
                ccg = null;
        }
        public static void add(String msg){
                if(msg.charAt(0)=='0'||msg.charAt(0)=='1'){
                        mainText.append(msg.substring(1));
                        memberList.setModel(model);
                        memberList.validate();
                        number.setText("当前在线人数:"+userCount);
                }
                if(msg.charAt(0)=='2'){
                        mainText.append(msg.substring(1));
                }
                if(msg.charAt(0)=='3'){
                        mainText.append(msg.substring(1,msg.lastIndexOf("<")+1)+" 你 "+msg.substring(msg.lastIndexOf(">")));
                        secondText.append(msg.substring(1,msg.lastIndexOf("<")+1)+" 你 "+msg.substring(msg.lastIndexOf(">")));
                }
               
        }

}[/code]




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2