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();
}
}

java实现类似qq的窗口对聊的更多相关文章

  1. AJ学IOS(07)UI之UITextField代理事件_类似QQ登陆窗口的简单实现

    AJ分享,必须精品 先看效果图: 学习代码 // // NYViewController.m // 05-UITextField事件_UIKit复习 // // Created by apple on ...

  2. qt实现类似QQ伸缩窗口--鼠标事件应用

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://blog.csdn.net/hiwubihe/article/details/38678305,qq:1269122125. 上一章 ...

  3. [C# 网络编程系列]专题九:实现类似QQ的即时通信程序

    转自:http://www.cnblogs.com/zhili/archive/2012/09/23/2666987.html 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例 ...

  4. 详解C# 网络编程系列:实现类似QQ的即时通信程序

    https://www.jb51.net/article/101289.htm 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net ...

  5. 转:【专题九】实现类似QQ的即时通信程序

    引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...

  6. 专题九:实现类似QQ的即时通信程序

    引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...

  7. 使用plupload做一个类似qq邮箱附件上传的效果

    公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...

  8. WinForm实现类似QQ停靠,显示隐藏过程添加特效效果

    原文:WinForm实现类似QQ停靠,显示隐藏过程添加特效效果 这可能是个老题长谈的问题了,只是在项目中会用到这个效果,所以今天做个记录.大家见了别喷我.在项目中的需求是这样的. 打开程序,在屏幕的右 ...

  9. 用C#代码实现类似QQ窗体的“上、左、右”停靠功能

    大家都知道QQ有一个自动停靠功能,即“上.左.右”,当你把窗体拖到屏幕边缘,然后移开鼠标它会自动缩放,然后只显示一小小点出来,我们仔细观察会发现其实它只露3像素左右的边缘,当你鼠标移上去它又会伸出来, ...

随机推荐

  1. POJ 2068 Nim#双人dp博弈

    http://poj.org/problem?id=2068 #include<iostream> #include<cstdio> #include<cstring&g ...

  2. CentOS postgresql9.4

    yum install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm Once t ...

  3. JSP中的EL语言

    1,EL(Expression Language)是从JavaScript得到启发的一种表达式语言, 2,EL表达式包含文字,操作符,变量,函数调用: 3,EL 存取变量的语法格式:${ userna ...

  4. ubuntu下安装UltraEdit

    在windows下常年使用UltraEdit来查看log,现在突然切换到ubuntu下,系统自带的Text Editor相当不适应:只有自己安装了. 首先,需要下载安装包,可以去:http://www ...

  5. There was a problem parsing the package(android)

    android phone when you install the application there will inevitably be "a problem parsing the ...

  6. javascript动画效果之多物体缓冲运动

    这个是通过一个for循环控制的三个li标签,被鼠标触发则会有一个宽度增加和减少的事件 html和css同样写在一起方便察看,这里就是简单的布局,重点在js <!DOCTYPE html> ...

  7. Hadoop作业优化

    mapper数量 reduce数量 combiner 中间值压缩 自定义序列 调整shuffle,减少溢出写 关闭推测执行 任务JVM重用 慢启动reduce

  8. 在VS中生成后拷贝文件

    环境:win7_64旗舰版,VS2013 工作项目中,一般会使用第三方库,当修改并重新编译第三方库后,需要将DLL文件拷贝到工作项目下的生成目录中,每次手动拷贝比较繁琐,VS提供自定义生成事件,允许我 ...

  9. java中Class对象详解

    java中把生成Class对象和实例对象弄混了,更何况生成Class对象和生成instance都有多种方式.所以只有弄清其中的原理,才可以深入理解.首先要生成Class对象,然后再生成Instance ...

  10. linex下部署发布web项目

    准备工作:通过Xmanager远程连接linux系统,下载对应的jdk和tomcat. 1.通过Xmanager远程连接linux系统,下载地址请自己网上搜索吧. 2.下载jdk (这里为jdk-7u ...