局域网聊天带照片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了局域网聊天带照片相关的知识,希望对你有一定的参考价值。
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 = 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 = 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 = 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=’" + 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/src com.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
以上是关于局域网聊天带照片的主要内容,如果未能解决你的问题,请参考以下文章