博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现类似qq的窗口对聊
阅读量:6239 次
发布时间:2019-06-22

本文共 7273 字,大约阅读时间需要 24 分钟。

  Swing实现界面,socket实现通信

package com.learn.talk;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTextArea;public class ChatReceiver {    private PrintWriter pw;    private JFrame frame;    private JPanel pane_buttom;    private JSplitPane pane_center;    // 显示内容的文本框,输入内容的文本框,发送内容按钮    private JScrollPane pane_showWindow;    private JScrollPane pane_inputWindow;    private JTextArea area_showWindow;    private JTextArea area_inputWindow;    private JButton btn_send;    private Dimension dimension;// 用于设置area_showWindow可拖拉的大小    // 初始化    public ChatReceiver() {        frame = new JFrame();        pane_buttom = new JPanel();        pane_showWindow = new JScrollPane();        pane_inputWindow = new JScrollPane();        area_showWindow = new JTextArea();        area_inputWindow = new JTextArea();        pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false,                pane_showWindow, pane_inputWindow);        btn_send = new JButton("send");        dimension = new Dimension(50, 300);    }    // 调用方法显示窗口    public void showFrame() {        initFrame();        initChatTextArea();        initButton();        btn_send();        socket();    }    // 主窗体    public void initFrame() {        frame.setTitle("简繁");        int width = (int) Toolkit.getDefaultToolkit().getScreenSize()                .getWidth();        int height = (int) Toolkit.getDefaultToolkit().getScreenSize()                .getHeight();        frame.setBounds(width / 2, height / 2, 400, 450);        frame.setVisible(true);    }    // 内容显示文本框和输入内容文本框    private void initChatTextArea() {        // 取得视图焦点        pane_showWindow.getViewport().add(area_showWindow);        pane_inputWindow.getViewport().add(area_inputWindow);        // 将显示文本域设置为不可编辑        area_showWindow.setEditable(false);        // 设置显示文本域可拖拉的大小        pane_showWindow.setMinimumSize(dimension);        frame.add(pane_center, BorderLayout.CENTER);    }    // 发送文件,发送内容按钮    public void initButton() {        pane_buttom.add(btn_send);        frame.add(pane_buttom, BorderLayout.SOUTH);    }    private void btn_send() {        btn_send.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                String info = area_inputWindow.getText();                area_showWindow.append("简繁:" + info + "\r\n");                pw.println(info);                area_inputWindow.setText("");            }        });    }    private void socket() {        ServerSocket ss;        try {            ss = new ServerSocket(9988);            // 等待连接 客户端            Socket s = ss.accept();            InputStreamReader isr = new InputStreamReader(s.getInputStream());            BufferedReader br = new BufferedReader(isr);            // PrintWriter必须和socket有密切的关系            pw = new PrintWriter(s.getOutputStream(), true);            // 读取从客户端法发来的信息            while (true) {                // 读取从客户端发来的信息                String info = br.readLine();                // 在文本栏里显示                area_showWindow.append("garfield:" + info + "\r\n");            }        } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        ChatReceiver chat = new ChatReceiver();        chat.showFrame();    }}
package com.learn.talk;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTextArea;public class ChatSender {    private PrintWriter pw;    private JFrame frame;    private JPanel pane_buttom;    private JSplitPane pane_center;    // 显示内容的文本框,输入内容的文本框,发送内容按钮    private JScrollPane pane_showWindow;    private JScrollPane pane_inputWindow;    private JTextArea area_showWindow;    private JTextArea area_inputWindow;    private JButton btn_send;    private Dimension dimension;// 用于设置area_showWindow可拖拉的大小    // 初始化    public ChatSender() {        frame = new JFrame();        pane_buttom = new JPanel();        pane_showWindow = new JScrollPane();        pane_inputWindow = new JScrollPane();        area_showWindow = new JTextArea();        area_inputWindow = new JTextArea();        pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false,                pane_showWindow, pane_inputWindow);        btn_send = new JButton("send");        dimension = new Dimension(50, 300);    }    // 调用方法显示窗口    public void showFrame() {        initFrame();        initChatTextArea();        initButton();        btn_send();        socket();    }    // 主窗体    public void initFrame() {        frame.setTitle("garfield");        int width = (int) Toolkit.getDefaultToolkit().getScreenSize()                .getWidth();        int height = (int) Toolkit.getDefaultToolkit().getScreenSize()                .getHeight();        frame.setBounds(width / 2, height / 2, 400, 450);        frame.setVisible(true);    }    // 内容显示文本框和输入内容文本框    private void initChatTextArea() {        // 取得视图焦点        pane_showWindow.getViewport().add(area_showWindow);        pane_inputWindow.getViewport().add(area_inputWindow);        // 将显示文本域设置为不可编辑        area_showWindow.setEditable(false);        // 设置显示文本域可拖拉的大小        pane_showWindow.setMinimumSize(dimension);        frame.add(pane_center, BorderLayout.CENTER);    }    // 发送文件,发送内容按钮    public void initButton() {        pane_buttom.add(btn_send);        frame.add(pane_buttom, BorderLayout.SOUTH);    }    private void btn_send() {        btn_send.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                String info = area_inputWindow.getText();                area_showWindow.append("garfield: " + info + "\r\n");                pw.println(info);                area_inputWindow.setText("");            }        });    }    private void socket() {        try {            Socket s = new Socket("127.0.0.1", 9988);            InputStreamReader isr = new InputStreamReader(s.getInputStream());            BufferedReader br = new BufferedReader(isr);            pw = new PrintWriter(s.getOutputStream(), true);            while (true) {                String info = br.readLine();                area_showWindow.append("简繁: " + info + "\r\n");            }        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        ChatSender chat = new ChatSender();        chat.showFrame();    }}

 

转载地址:http://qsdia.baihongyu.com/

你可能感兴趣的文章
PBOC APDU命令解析【转】
查看>>
封装HttpUrlConnection开箱即用
查看>>
第二天笔记
查看>>
如何在外部终止一个pengding状态的promise对象
查看>>
初级模拟电路:1-5 二极管的其他特性
查看>>
《简明Python教程》Swaroop, C. H. 著 第1章 介绍
查看>>
Chapter 4. Working with Key/Value Pairs
查看>>
Python基础:Python可变对象和不可变对象
查看>>
[css3]文字过多以省略号显示
查看>>
vim显示行号、语法高亮、自动缩进的设置
查看>>
shell中的if语句
查看>>
WCf客户端测试
查看>>
Java线程面试题 Top 50
查看>>
java内存模型
查看>>
python继承关系及DVD案例
查看>>
木其工作室代写程序 [原]使用Filter过滤ip禁止访问系统
查看>>
2.6 The Object Model -- Bindings
查看>>
2.4 The Object Model -- Computed Properties and Aggregate Data with @each(计算的属性和使用@each聚合数据)...
查看>>
二叉树问题(区间DP好题)
查看>>
PHP基础
查看>>