首页 > 代码库 > 局域网聊天【带照片】

局域网聊天【带照片】

package com.kaige123;/** * 消息页面 * @author 凯哥 * */public class MessageFrame extends JFrame {    //把消息分成两部分    private JSpinner spinner = new JSpinner();    //发送文本框    public JTextArea textArea = new JTextArea();    //网络名称    private String uname="";    //消息呈现    public JEditorPane editorPane = new JEditorPane();    public JPanel panel_2 = new JPanel();    public JButton button_2 = new JButton();    public JButton button_3 = new JButton();     public JButton button = new JButton();    public JPanel panel_1 = new JPanel();    public JPanel panel = new JPanel();    public JSplitPane splitPane = new JSplitPane();    public JScrollPane scrollPane = new JScrollPane();    public FlowLayout flowLayout = new FlowLayout();    public JScrollPane scrollPane_1 = new JScrollPane();    public JLabel label = new JLabel();    public FlowLayout flowLayout_1 = new FlowLayout();    //程序入口    public static void main(String args[]) {                     MessageFrame frame = new MessageFrame();                    frame.setVisible(true);    }    public MessageFrame() {        super();        uname=javax.swing.JOptionPane.showInputDialog(this,"请输入你的昵称:");        new UDPServer(this).start();        setTitle("凯哥学堂-小案例-局域网聊天软件");        setBounds(100, 100, 468, 412);        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          splitPane.setDividerLocation(260);        splitPane.setDividerSize(1);        splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);        getContentPane().add(splitPane, BorderLayout.CENTER);           splitPane.setLeftComponent(scrollPane);         scrollPane.setViewportView(editorPane);         panel.setLayout(new BorderLayout());        splitPane.setRightComponent(panel);          flowLayout.setAlignment(FlowLayout.LEFT);        panel_1.setLayout(flowLayout);        panel.add(panel_1, BorderLayout.NORTH);         button.setText("图片");        panel_1.add(button);         label.setText("字体大小:");         spinner.setPreferredSize(new Dimension(40, 20));        spinner.setValue(12);        panel_1.add(spinner);         flowLayout_1.setAlignment(FlowLayout.RIGHT);        panel_2.setLayout(flowLayout_1);        panel.add(panel_2, BorderLayout.SOUTH);         button_2.setText("震屏");        panel_2.add(button_2);         button_3.setText("发送");        panel_2.add(button_3);         panel.add(scrollPane_1, BorderLayout.CENTER);         scrollPane_1.setViewportView(textArea);        button_3.addActionListener(new ActionListener() {            public void actionPerformed(final ActionEvent e) {                 try {                    String ip=InetAddress.getLocalHost().getHostAddress();                     ip=ip.substring(0, ip.lastIndexOf("."));                    byte[] b = (uname+"\t宋体\t"+spinner.getValue()+"\t"+textArea.getText()).getBytes();                    DatagramPacket data = http://www.mamicode.com/new DatagramPacket(b, b.length,                            InetAddress.getByName(ip+".255"), 8978);                    DatagramSocket client = new DatagramSocket();                    client.send(data);                    textArea.setText("");                } catch (Exception e2) {                    e2.printStackTrace();                }            }        });        button_2.addActionListener(new ActionListener() {            public void actionPerformed(final ActionEvent e) {                try {                    String ip=InetAddress.getLocalHost().getHostAddress();                     ip=ip.substring(0, ip.lastIndexOf("."));                    byte[] b = (uname+"\t宋体\t"+spinner.getValue()+"\tZPZL22234").getBytes();                    DatagramPacket data = http://www.mamicode.com/new DatagramPacket(b, b.length,                            InetAddress.getByName(ip+".255"), 8978);                    DatagramSocket client = new DatagramSocket();                    client.send(data);                    textArea.setText("");                } catch (Exception e2) {                    e2.printStackTrace();                }            }        });        button.addActionListener(new ActionListener() {            public void actionPerformed(final ActionEvent e) {                new SelectImageFrame(MessageFrame.this).setVisible(true);            }        });    }}
package com.kaige123;/** * 照片选择 * @author 凯哥 * */public class SelectImageFrame extends JFrame {    class MyMouseListener extends MouseAdapter {        String code = "";        public MyMouseListener(String code) {            this.code = code;        }        public void mousePressed(MouseEvent e) {             frame.textArea.setText(frame.textArea.getText()+code);             SelectImageFrame.this.setVisible(false);        }    }    private static MessageFrame frame;     public SelectImageFrame(MessageFrame frame1) {        super();        this.frame = frame1;        getContentPane().setLayout(new GridLayout(5, 0));        setBounds(100, 100, 500, 500);        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);         for (int i = 0; i < 18; i++) {            if (i >= 10) {                JLabel j1 = new JLabel(new ImageIcon("./image/1" + (i - 10)                        + ".jpg"));                j1.addMouseListener(new MyMouseListener("[1" + (i - 10) + "]"));                this.add(j1);            } else {                JLabel j1 = new JLabel(new ImageIcon("./image/0" + i + ".jpg"));                j1.addMouseListener(new MyMouseListener("[0" + (i) + "]"));                this.add(j1);            }         }     } }
package com.kaige123;/** * 局域网数据处理 * @author 凯哥 * */public class UDPServer extends Thread {    private MessageFrame frame = null;    public UDPServer(MessageFrame frame) {        this.frame = frame;    }    // 处理对方发送过来的数据    public void run() {        try {            DatagramSocket server = new DatagramSocket(8978);            while (true) {                try {                    byte[] b = new byte[1024 * 100];                    DatagramPacket data = http://www.mamicode.com/new DatagramPacket(b, b.length);                    server.receive(data);                    String message = new String(data.getData(), 0,                            data.getLength());                    String name = message.split("\t")[0];// 昵称                    String font = message.split("\t")[1];// 字体                    String size = message.split("\t")[2];// 大小                    String text = message.split("\t")[3];// 内容                    // 设置我里面放入的是网页代码 请解析页面                    try {                        File html = new File("msg.html");                        FileInputStream in = new FileInputStream(html);                        byte[] b1 = new byte[(int) html.length()];                        in.read(b1);                        in.close();                        String newHtmlText = new String(b1);                        newHtmlText = newHtmlText.replace("{name}", name);                        newHtmlText = newHtmlText.replace("{time}",                                new Date().toLocaleString());                        if (text.trim().equals("ZPZL22234")) {                            newHtmlText = newHtmlText                                    .replace("{text}", "震屏ZZZ");                            new Thread() {                                public void run() {                                    Point last = frame.getLocation();                                    try {                                        for (int i = 0; i < 5; i++) {                                            frame.setLocation(last.x - 10,                                                    last.y - 10);                                            Thread.sleep(30);                                            frame.setLocation(last.x - 10,                                                    last.y + 10);                                            Thread.sleep(30);                                            frame.setLocation(last.x + 10,                                                    last.y - 10);                                            Thread.sleep(30);                                            frame.setLocation(last.x + 10,                                                    last.y + 10);                                            Thread.sleep(30);                                        }                                    } catch (Exception e) {                                        // TODO: handle exception                                    }                                    frame.setLocation(last);                                };                            }.start();                        } else {                            newHtmlText = newHtmlText.replace("{text}", text);                        }                        newHtmlText = newHtmlText.replace("{font}", size);                        // {font}                        for (String[] image : images) {                            if (newHtmlText.indexOf(image[0]) >= 0) {                                newHtmlText = newHtmlText.replace(image[0],                                        "<img  src=http://www.mamicode.com/’" + image[1] + "’>");                            }                        }                        htmlText += newHtmlText;                        frame.editorPane.setContentType("text/html");                        frame.editorPane.setText(htmlText);                        frame.editorPane.setSelectionStart(htmlText.length());                        frame.editorPane.setSelectionEnd(htmlText.length());                    } catch (Exception e) {                        e.printStackTrace();                     }                } catch (Exception e) {                    e.printStackTrace();                }            }        } catch (SocketException e) {            javax.swing.JOptionPane.showMessageDialog(frame, "软件已经打开过了!");        }    }    // 照片对应的网络地址    String[][] images = {            { "[00]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/00.jpg" },            { "[01]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/01.jpg" },            { "[02]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/02.jpg" },            { "[03]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/03.jpg" },            { "[04]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/04.jpg" },            { "[05]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/05.jpg" },            { "[06]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/06.jpg" },            { "[07]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/07.jpg" },            { "[08]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/08.jpg" },            { "[09]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/09.jpg" },            { "[10]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/10.jpg" },            { "[11]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/11.jpg" },            { "[12]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/12.jpg" },            { "[13]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/13.jpg" },            { "[14]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/14.jpg" },            { "[15]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/15.jpg" },            { "[16]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/16.jpg" },            { "[17]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/17.jpg" } };    String htmlText = "";}

Msg.html

<table width="100%" border="0"> <tr>   <td>{name}</td>   <td align="right">时间:{time} </td> </tr></table><pre style="font-size:{font}px">{text}</pre><hr>

工程目录

/aaa/srccom.kaige123/aaa/src/com/kaige123/MessageFrame.java/aaa/src/com/kaige123/SelectImageFrame.java/aaa/src/com/kaige123/UDPServer.java/aaa/image/aaa/image/00.jpg/aaa/image/01.jpg/aaa/image/02.jpg/aaa/image/03.jpg/aaa/image/04.jpg/aaa/image/05.jpg/aaa/image/06.jpg/aaa/image/07.jpg/aaa/image/08.jpg/aaa/image/09.jpg/aaa/image/10.jpg/aaa/image/11.jpg/aaa/image/12.jpg/aaa/image/13.jpg/aaa/image/14.jpg/aaa/image/15.jpg/aaa/image/16.jpg/aaa/image/17.jpg

局域网聊天【带照片】