java实现类似qq的窗口对聊
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的窗口对聊的更多相关文章
- AJ学IOS(07)UI之UITextField代理事件_类似QQ登陆窗口的简单实现
AJ分享,必须精品 先看效果图: 学习代码 // // NYViewController.m // 05-UITextField事件_UIKit复习 // // Created by apple on ...
- qt实现类似QQ伸缩窗口--鼠标事件应用
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://blog.csdn.net/hiwubihe/article/details/38678305,qq:1269122125. 上一章 ...
- [C# 网络编程系列]专题九:实现类似QQ的即时通信程序
转自:http://www.cnblogs.com/zhili/archive/2012/09/23/2666987.html 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例 ...
- 详解C# 网络编程系列:实现类似QQ的即时通信程序
https://www.jb51.net/article/101289.htm 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net ...
- 转:【专题九】实现类似QQ的即时通信程序
引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...
- 专题九:实现类似QQ的即时通信程序
引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...
- 使用plupload做一个类似qq邮箱附件上传的效果
公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...
- WinForm实现类似QQ停靠,显示隐藏过程添加特效效果
原文:WinForm实现类似QQ停靠,显示隐藏过程添加特效效果 这可能是个老题长谈的问题了,只是在项目中会用到这个效果,所以今天做个记录.大家见了别喷我.在项目中的需求是这样的. 打开程序,在屏幕的右 ...
- 用C#代码实现类似QQ窗体的“上、左、右”停靠功能
大家都知道QQ有一个自动停靠功能,即“上.左.右”,当你把窗体拖到屏幕边缘,然后移开鼠标它会自动缩放,然后只显示一小小点出来,我们仔细观察会发现其实它只露3像素左右的边缘,当你鼠标移上去它又会伸出来, ...
随机推荐
- 屏幕居中(DIV/CSS) 的几种方法(转)
1.利用table特性,在width and height all set 100%的时候,可以把容器嵌套在td内形成绝对居中,此时的被嵌套容器可为绝对或者相对大小.(非标准)注意不能加声明! 如是在 ...
- POJ 1065 Wooden Sticks#贪心+qsort用法
(- ̄▽ ̄)-* 这道题用到了cstdlib库的qsort()函数: 用法链接:http://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.h ...
- LeetCode OJ 123. Best Time to Buy and Sell Stock III
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- LeetCode OJ 152. Maximum Product Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- Office Web Apps安装部署(一)
来源于:http://www.cnblogs.com/poissonnotes/p/3238238.html 系统要求为Windows Server 2012, 注意:安装Office Web App ...
- C++常用库函数
C++常用库函数 转自:http://blog.csdn.net/sai19841003/article/details/7957115 1.常用数学函数 头文件 #include <math ...
- java.io.IOException: Invalid header signature; read 0xE011BDBFEFBDBFEF, expected 0xE11AB1A1E011CFD0
根据网上的解释,这个表示poi读取excel(97-2003)的时候头文件被损坏了,正常的方式:能打开的话,另存一下即可,实在不行直接新建一个内容一样的 本人环境:eclipse部署到tomcat,e ...
- Sql Sever语句 (续2)
日期时间 把日期类型的字段下默认值或绑定里的 设置成getdate() ,新建字段时候不设置会自动获取当前服务器时间 在当前时间加上xx年xx月xx天 select datedd(yy,100,g ...
- Android.mk简单分析
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $ ...
- wordpress建站过程3——header.php
header.php中包含了一个页面的页头,也就是其他页面中重复出现的部分,包括用户登陆/登陆后显示的文字,导航条,网页logo,有的还包括轮播图. 下面就简单的贴上一个文件吧. <!DOCTY ...