/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.

刚写的java版QQ,实现C/S聊天室功能,与在线好友聊天,添加删除好友。选择UDP数据报而不是socket,不区分client和sever,直接通信。
 */
package myqq;

import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
import java.util.ArrayList;

/**
 *
 * @author honor school libing
 *
 */
public class MyQQ {

/**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

DrawQFrame frame = new DrawQFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

}
}

//面板类
class DrawQFrame extends JFrame {
//框架类

public DrawQFrame() {
        this.setLocation(100, 100);
        this.setTitle("360QQ");
        this.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        this.setLayout(new BorderLayout());

DrawQPanel panel = new DrawQPanel();
        this.add(panel, BorderLayout.NORTH);
        Border etched = BorderFactory.createEtchedBorder();
        Border title = BorderFactory.createTitledBorder(etched, "360QQ");//加入边框

panel.setBorder(title);

Border lineborder = BorderFactory.createLineBorder(Color.yellow);
        panel.setBorder(lineborder);

// Border matteBorder = BorderFactory.createMatteBorder(30, 30, 30, 30, Color.BLUE);
        // panel.setBorder(matteBorder);

}
    public static final int DEFAULT_WIDTH = 200;
    public static final int DEFAULT_HEIGHT = 400;
}

//面板类
class DrawQPanel extends JPanel {

public DrawQPanel() {
        this.setSize(100, 300);
        // this.setLayout(new CardLayout(10,1));
        this.setLayout(new BorderLayout());
        JButton button = new JButton("与神秘陌生人聊天");
        this.add(button, new BorderLayout().CENTER);
        button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {
                System.out.println("你好");
                DrawFrame frame = new DrawFrame();
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                frame.setVisible(true);
            }
        });
        setLayout(new GridLayout(15, 1));
        JTextField textField = new JTextField();
        textField.setText("好友昵称或Q号");
        JButton searchButton = new JButton("搜索好友");
        this.add(textField);
        this.add(searchButton);

searchButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
            }
        });

friendList.add(bestFriend);
        friendList.add(bestFriend2);
        // buttonList.add(new JButton(friendList.get(0).name + "(" + friendList.get(0).nickname + ")" + friendList.get(0).autograph));
        //  buttonList.add(new JButton(friendList.get(1).name + "(" + friendList.get(1).nickname + ")" + friendList.get(1).autograph));
        setLayout(new GridLayout(15, 1));

for (int i = 0; i < friendList.size(); i++) {
            buttonList.add(new JButton(friendList.get(i).name + "(" + friendList.get(i).nickname + ")" + friendList.get(i).autograph));
            this.add(buttonList.get(i));
            final String tempName = friendList.get(i).name;
            final String tempNickname = friendList.get(i).nickname;
            final String tempAutograph = friendList.get(i).autograph;
            buttonList.get(i).addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
                    DrawFrame talkFrame = new DrawFrame();

talkFrame.setTitle(tempName + "(" + tempNickname + ")" + tempAutograph);
                    talkFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    talkFrame.setVisible(true);

}
            });
        }
        JButton addFriendButton = new JButton("添加好友");
        this.add(addFriendButton);
        addFriendButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
                addFriendFrame addFriendFrame1 = new addFriendFrame();
                addFriendFrame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                addFriendPanel panel = new addFriendPanel();
                addFriendFrame1.add(panel);

final JTextField friendName = new JTextField(10);
                final JTextField friendNickname = new JTextField(10);
                final JTextField friendAutograph = new JTextField(10);
                JLabel nameLabel = new JLabel("好友姓名");
                JLabel nicknameLabel = new JLabel("好友昵称");
                JLabel autographLabel = new JLabel("好友签名");
                JButton button1 = new JButton("保存");
                button1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
                        friendList.remove(friendList.size() - 1);
                        friendList.remove(friendList.size() - 1);
                        buttonList.clear();
                        DrawQPanel.friendList.add(new MyFriend(friendName.getText(), friendNickname.getText(), friendAutograph.getText()));

DrawQFrame frame = new DrawQFrame();
                        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                        frame.setVisible(true);
                    }
                });
                panel.add(friendName);
                panel.add(nameLabel);
                panel.add(friendNickname);
                panel.add(nicknameLabel);
                panel.add(friendAutograph);
                panel.add(autographLabel);

panel.add(button1);
                addFriendFrame1.setSize(200, 180);
                addFriendFrame1.setLocation(500, 400);
                addFriendFrame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                addFriendFrame1.setVisible(true);
            }
        });

}

public class MyFriend {

private MyFriend(String string, String string0, String string1) {
            this.name = string;
            this.nickname = string0;
            this.autograph = string1;
        }

public void MyFriend(String name, String nickname, String autograph) {
            this.name = name;
            this.nickname = nickname;
            this.autograph = autograph;
        }
        private String name;
        private String nickname;
        private String autograph;
    }

public class addFriendFrame extends JFrame {

public void addFriendFrame() {
            JFrame addFriendFrame = new JFrame("添加好友");
            addFriendFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            JPanel panel = new JPanel();
            addFriendFrame.add(panel);
            JButton button1 = new JButton("保存");
            panel.add(button1);
            addFriendFrame.setSize(200, 180);

}
    }

class addFriendPanel extends JPanel {

public addFriendPanel() {
            JPanel addFriendPanel = new JPanel();

}
    }

public ArrayList getFriendList() {
        return this.friendList;
    }

public ArrayList getbuttonList() {
        return this.buttonList;
    }
    private static ArrayList<MyFriend> friendList = new ArrayList<MyFriend>(10);
    MyFriend bestFriend = new MyFriend("李兵", "火", "Never Give up!");
    MyFriend bestFriend2 = new MyFriend("实验学院", "honor school", "Never Give up!");
    private static ArrayList<JButton> buttonList = new ArrayList<JButton>(10);
}

class DrawFrame extends JFrame {

public DrawFrame() {

setLocation(100, 100);
        setTitle("360QQ");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
//添加菜单项……
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);
        JMenu menu = new JMenu("菜单");
        menuBar.add(menu);
        JMenuItem sset = new JMenuItem("设置");
        JMenuItem eexit = new JMenuItem("退出");
        menu.add(sset);
        menu.addSeparator();
        menu.add(eexit);

JMenu video = new JMenu("视频");
        menuBar.add(video);
        JMenuItem startVideo = new JMenuItem("发起视频通话", new ImageIcon("computer.ico"));
        JMenuItem mutiVideo = new JMenuItem("多人视频聊天");
        JMenuItem setVideo = new JMenuItem("视频设置");
        JMenuItem testVideo = new JMenuItem("视频测试向导");
        video.add(startVideo);
        video.addSeparator();
        video.add(mutiVideo);
        video.addSeparator();
        video.add(setVideo);
        video.addSeparator();
        video.add(testVideo);

startVideo.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
                JFrame littleFrame = new JFrame();
                JOptionPane.showMessageDialog(littleFrame, "正在连接,请稍后……");
                littleFrame.dispose();
            }
        });
        class MyListener implements ActionListener {

public void actionPerformed(ActionEvent e) {
                JFrame littleFrame = new JFrame();
                JOptionPane.showMessageDialog(littleFrame, "正在连接,请稍后……");
                littleFrame.dispose();
            }
        }
        mutiVideo.addActionListener(new MyListener());
        setVideo.addActionListener(new MyListener());
        testVideo.addActionListener(new MyListener());

JMenu voice = new JMenu("语音");
        menuBar.add(voice);
        JMenuItem startVoice = new JMenuItem("发起语音通话");
        JMenuItem mutiVoice = new JMenuItem("多人语音通话");
        JMenuItem setVoice = new JMenuItem("语音设置");
        JMenuItem testVoice = new JMenuItem("语音测试向导");
        voice.add(startVoice);
        voice.addSeparator();
        voice.add(mutiVoice);
        voice.addSeparator();
        voice.add(setVoice);
        voice.addSeparator();
        voice.add(testVoice);
        startVoice.addActionListener(new MyListener());
        mutiVoice.addActionListener(new MyListener());
        setVoice.addActionListener(new MyListener());
        testVoice.addActionListener(new MyListener());

JMenu file = new JMenu("文件");
        menuBar.add(file);
        JMenuItem sendFile = new JMenuItem("发送文件");
        JMenuItem sendMutiFile = new JMenuItem("发送文件夹");
        JMenuItem sendOfflineFile = new JMenuItem("发送离线文件");
        JMenuItem setFile = new JMenuItem("发送设置");
        file.add(sendFile);
        file.addSeparator();
        file.add(sendMutiFile);
        file.addSeparator();
        file.add(sendOfflineFile);
        file.addSeparator();
        file.add(setFile);
        sendFile.addActionListener(new MyListener());
        sendMutiFile.addActionListener(new MyListener());
        sendOfflineFile.addActionListener(new MyListener());
        setFile.addActionListener(new MyListener());

JMenu SMS = new JMenu("短信");
        menuBar.add(SMS);
        JMenuItem sendSMS = new JMenuItem("给该好友发短信");
        JMenuItem sendMutiSMS = new JMenuItem("群发短信");
        JMenuItem sendOfflineSMS = new JMenuItem("发送离线短信");
        JMenuItem setSMS = new JMenuItem("短信设置");
        SMS.add(sendSMS);
        SMS.addSeparator();
        SMS.add(sendMutiSMS);
        SMS.addSeparator();
        SMS.add(sendOfflineSMS);
        SMS.addSeparator();
        SMS.add(setSMS);
        sendSMS.addActionListener(new MyListener());
        sendMutiSMS.addActionListener(new MyListener());
        sendOfflineSMS.addActionListener(new MyListener());
        setSMS.addActionListener(new MyListener());

JMenu sue = new JMenu("举报");
        menuBar.add(sue);
        JMenuItem sueFriend = new JMenuItem("举报该好友");
        JMenuItem deleteFriend = new JMenuItem("删除该好友");
        JMenuItem blackListFriend = new JMenuItem("将该好友移至黑名单");
        sue.add(sueFriend);
        sue.addSeparator();
        sue.add(deleteFriend);
        sue.addSeparator();
        sue.add(blackListFriend);
        sueFriend.addActionListener(new MyListener());
        deleteFriend.addActionListener(new MyListener());
        blackListFriend.addActionListener(new MyListener());

JMenu game = new JMenu("休闲娱乐");
        menuBar.add(game);
        JMenuItem QQLive = new JMenuItem("QQLive网络电视");
        JMenuItem cellphoneQQ = new JMenuItem("手机聊QQ");
        JMenuItem WebGame = new JMenuItem("网络游戏");
        JMenuItem cleverGame = new JMenuItem("益智游戏");
        JMenuItem adorn = new JMenuItem("装扮");
        game.add(QQLive);
        game.addSeparator();
        game.add(cellphoneQQ);
        game.addSeparator();
        game.add(WebGame);
        game.addSeparator();
        game.add(cleverGame);
        game.addSeparator();
        game.add(adorn);
        QQLive.addActionListener(new MyListener());
        cellphoneQQ.addActionListener(new MyListener());
        WebGame.addActionListener(new MyListener());
        cleverGame.addActionListener(new MyListener());
        adorn.addActionListener(new MyListener());

final DrawPanel pan = new DrawPanel();
        //添加设置对话框
        sset.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {
                final JFrame jf = new JFrame("设置");
                jf.setSize(300, 150);
                jf.setLocation(200, 200);
                jf.setResizable(false);
                jf.setVisible(true);
                JPanel jp = new JPanel();
                final JTextField jt1 = new JTextField(20);
                final JTextField jt2 = new JTextField(20);
                final JTextField jt3 = new JTextField(20);
                jp.add(new JLabel("聊天端口:"));
                jf.add(jp);
                jp.add(jt1);
                jp.add(new JLabel("目标地址:"));
                jp.add(jt2);
                jp.add(new JLabel("文件端口:"));
                jp.add(jt3);
                JButton jb1 = new JButton("确定");
                JButton jb2 = new JButton("取消");
                jp.add(jb1);
                jp.add(jb2);
                //设置“设置”按钮
                jb1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {
                        try {
                            int cat1 = Integer.parseInt(jt1.getText());
                            pan.setCat1(cat1);//设置对话端口号
                            int cat2 = Integer.parseInt(jt3.getText());
                            pan.setCat2(cat2);//设置文件传输端口号
                            String s = jt2.getText();
                            pan.setIP(s);//设置IP地址
                            pan.ls();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        jf.dispose();//关闭对话框
                    }
                });
                jb2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {
                        jf.dispose();
                    }
                });
            }
        });
        eexit.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {
                System.exit(0);
            }
        });

add(pan);
        pack();
    }
    public static final int DEFAULT_WIDTH = 400;
    public static final int DEFAULT_HEIGHT = 400;
}

class DrawPanel extends JPanel {

DatagramSocket ds;
    DatagramPacket dp;
    DatagramSocket ds1;
    DatagramPacket dp1;
    Thread thread;
    Thread thread1;
    TextArea textArea1 = new TextArea(10, 50);
    TextArea textArea2 = new TextArea(10, 50);
    JTextField textField = new JTextField(50);
    static int cat1, cat2;
    static String IP;

public void setCat1(int cat) {
        cat1 = cat;
    }

public void setCat2(int cat) {
        cat2 = cat;
    }

public void setIP(String ip) {
        IP = ip;
    }
    //重置端口号

public void ls() {
        try {
            ds = new DatagramSocket(cat1);
            ds1 = new DatagramSocket(cat2);
        } catch (Exception e) {
            e.printStackTrace();
        }
        thread = new Thread(new Runnable() {

public void run() {
                byte buf[] = new byte[1024];//聊天每次发送文字不能超过1024b
                DatagramPacket dp = new DatagramPacket(buf, buf.length);

while (true) {
                    try {
                        ds.receive(dp);
                        textArea1.setText(textArea1.getText() + new String(buf, 0, dp.getLength()) + "/r/n");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        thread.start();
    }

public DrawPanel() {

setLayout(new BorderLayout());
        JTabbedPane card = new JTabbedPane();

textArea1.setEditable(false);
        card.add("聊天", textArea1);
        add(card, BorderLayout.NORTH);

JPanel center = new JPanel();
        center.setLayout(new FlowLayout());
        center.add(new JLabel("昵称:"));

center.add(textField);
        add(center, BorderLayout.CENTER);

JPanel south = new JPanel();
        south.setLayout(new BorderLayout());

south.add(textArea2, BorderLayout.NORTH);

JPanel south2 = new JPanel();
        south2.setLayout(new FlowLayout());
        JButton sent = new JButton("传送文件");
        JButton receive = new JButton("接收文件");
        //receive.setEnabled(false);
        JButton sentMessage = new JButton("发送");
        south2.add(sent);
        south2.add(receive);

south2.add(sentMessage);
        add(south, BorderLayout.SOUTH);
        south.add(south2, BorderLayout.SOUTH);
        //发送信息的按钮的监听器:
        sentMessage.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {
                textArea1.append(textField.getText() + ":" + textArea2.getText() + "/n");
                String s;
                try {
                    s = textField.getText() + ":" + textArea2.getText();
                    byte[] buf = s.getBytes();
                    dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(IP), cat1);
                    ds.send(dp);
                    textArea2.setText("");
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
        //发送文件的按钮的监听器
        sent.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {
                JFrame f = new JFrame("打开");
                f.setSize(400, 300);
                JFileChooser chooser = new JFileChooser();
                f.add(chooser);
                int returnVal = chooser.showOpenDialog(f);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    textArea1.append("正在传送文件:" + chooser.getCurrentDirectory() + "//"
                            + chooser.getSelectedFile().getName() + "/n");
                    try {
                        byte[] b = new byte[10248];
                        FileInputStream fis = new FileInputStream(chooser.getSelectedFile());
                        DataInputStream dos = new DataInputStream(fis);
                        dos.read(b);
                        dp1 = new DatagramPacket(b, b.length, InetAddress.getByName(IP), cat2);
                        ds1.send(dp1);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        //接收文件的按钮的监听器:
        receive.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {
                JFrame f1 = new JFrame("保存");
                f1.setSize(400, 300);
                byte buf[] = new byte[10248];
                DatagramPacket dp1 = new DatagramPacket(buf, buf.length);
                JFileChooser ch = new JFileChooser();
                f1.add(ch);
                int a = ch.showSaveDialog(f1);
                if (a == JFileChooser.APPROVE_OPTION) {
                    String fileName = ch.getSelectedFile().getPath();
                    try {
                        ds1.receive(dp1);
                        FileOutputStream fos = new FileOutputStream(fileName);
                        fos.write(buf);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
}

java版QQ 欢迎点评相关推荐

  1. Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据流程分析【转】

    Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据&流程分析 QQ空间说说抓取难度比较大,花了一个星期才研究清楚! 代码请移步到GitHub GitHub地址:http ...

  2. 纯java版QQ源码下载

    纯java版QQ源码下载http://url.cn/7Mjy4P 郑重声明:(可先到华为网盘去看<java至尊QQ演示视频>) 因网盘不稳定,下载不了的话,请点击这里回贴留邮箱. 本人每天 ...

  3. java版QQ项目 源代码共享

    最近总有人联系我要java 版QQ源代码,当然你想学习,我不会拒绝给你,请拿到源代码的朋友,认真阅读一下,同时我想对要源代码的朋友提出几点要求,希望大家认真看一下: 1.我写的这个QQ虽然不是很完善, ...

  4. Java版QQ聊天工具

    代码太长,只是展示一下效果图,源代码可以在csdn下载 搜索"Java版腾讯QQ" 下面一张是对窗体透明度的设置

  5. [开源]java版QQ机器人集成小黄鸡功能

    项目采用开源程序IQQ.内置webQQ协议.并且使用十分方便.直接调用即可.      项目采用webService接口调用可以不用重新登录QQ即可实现项目的修改.测试期间 多次登录QQ导致QQ被检测 ...

  6. Java版qq聊天工具+Sql数据库+论文(功能全面)可做期末大作业(可毕设)

    文章目录 前言 一.登录界面 二.注册界面 三.修改密码 四.忘记密码 五.查找好友 六.群聊 七.使用方法及下载地址 前言 Java版仿QQ聊天工具(MyQQ)+Sql数据库,里面的功能有注册.登录 ...

  7. 自己动手写一个java版QQ

    基于java实现的仿qq即时通讯工具   数据库使用sql server 项目源码http://git.oschina.net/qrne0607/javaqq   1. 包分类 ht_功能函数包 se ...

  8. java 仿qq庅_iQQ-开源Java版qq客户端

            用过Linux的都知道,QQForLinux处于长期不更新状态,而且存在很多小bug,并且很多QQ该有的功能都没有.于是乎,许多人开始使用第三方QQ插件,比如libqq-pidgin, ...

  9. java 版qq美女找茬助手

    原理:截图+图片比较,调用第三方库实现全局热键 首先是截图部分 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();BufferedIm ...

最新文章

  1. pandas 删掉空行
  2. C 一个数组删除一项 并且移位
  3. iOS实现传递不定长的多个参数
  4. PCL:全程详解 VS2010+PCL配置
  5. 华为S系列交换机全面阻击“WannaCry”
  6. postgresql 相关杂记
  7. 期末总结20135320赵瀚青LINUX内核分析与设计期末总结
  8. 计算机怎么开启tftp服务器,Win7系统如何开启TFTP服务器?
  9. zuc算法代码详解_ZUC算法原理及实现过程
  10. 谷歌浏览器实现按下按键的脚本_谷歌浏览器快捷键设置方法详解
  11. 开源OA:O2OA平台手机APP指纹认证的配置
  12. 分享一个特别好用的站长在线工具箱
  13. 【Proteus仿真】TLC5615输出1024点正弦波(振幅可调)
  14. mysql 用户名 长度_一个 MySQL 用户名长度的坑
  15. Xtend == 与 ===
  16. 基于asp.net+vbscript+wsc编写网站
  17. 大数据与人工智能实验室【2022-05-08】
  18. Jenkin权限控制——基于角色授权策略
  19. OpenCV从上到下的顺序查找轮廓
  20. 来自一位双非本科大二学生的?自我救赎:堕落——蜕变

热门文章

  1. 分享一个查看css版本兼容性的网站: https://caniuse.com/
  2. 反射及在运用过程中出现的IllegalAccessException异常
  3. 行业垂直类网站的电子商务
  4. 基于apollo实现配置灰度发布
  5. MYsql膳食健康系统_360Health
  6. 区块链P2P网络协议演进过程
  7. 中国电热水器行业发展现状及趋势分析,头部厂商市场份额进一步上升「图」
  8. 解决办法:git错误 error: failed to push some refs to ‘https://github.com/...
  9. 《神经网络与深度学习》nndl读书笔记
  10. 线性表的顺寻存储结构