Java学习图形界面+网络编程案例---------网络简易通讯
主要思想:
主类继承JPanel,在构造方法中将JFrame设成空布局;在其中适当位置添加组件;实现事件监听处理
DATE:2015-10-31
服务器端代码:
/**
* @author Oyc
* 功能:网络简易测试的服务器端
*
*
*/
package com.NETtestServer;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class ServerDemo extends JPanel implements ActionListener{
public static void main(String[] args) {
// TODO Auto-generated method stub
new ServerDemo();
}
//定义组件
JFrame jf;
JTextField SendJTF;
JButton SendJB;
JTextArea jta=null;
JScrollPane jsp=null;
PrintWriter pw;
public ServerDemo(){
this.setLayout(null);
//创建组件
jta=new JTextArea();
jsp=new JScrollPane(jta);
jsp.setBounds(0,50,650,210);
this.add(jsp); SendJTF=new JTextField(15);
SendJTF.addActionListener(this);
SendJTF.setBackground(Color.lightGray);
SendJTF.setBounds(0,250,650,120);
this.add(SendJTF);
//发送按钮
SendJB=new JButton("发送");
SendJB.setBounds(540,380,80,25);
SendJB.addActionListener(this);
this.add(SendJB); jf=new JFrame("QQ简易聊天 服务器");
jf.setBounds(400, 100, 660, 445);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(this);
jf.setVisible(true);
jf.setResizable(false);
//开启监听
try {
//在9988号端口监听
ServerSocket ss=new ServerSocket(9988);
//等待客户端连接
Socket s=ss.accept();
// 接受从客户端发来的信息
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
//发送准备
pw=new PrintWriter(s.getOutputStream(),true);
while(true){
//读入从客户端发来的信息
String infoClient=br.readLine();
jta.append("客户端:"+infoClient+"\n");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
//设置背景
protected void paintComponent(Graphics g)
{
try {
BufferedImage Background=ImageIO.read(new File("images/QQCHAT.jpg"));
g.drawImage(Background, 0, 0,654, 414,null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} @Override
//事件监听处理方法
public void actionPerformed(ActionEvent e) {
//发送按钮
if(e.getSource()==SendJB){
String info=SendJTF.getText();
pw.println(info);
SendJTF.setText("");
jta.append("发送:"+info+"\n");
}
}
}
客户端代码:
/**
* /**
* @author Oyc
* 功能:网络简易测试的客户端
*
*/ package com.NETtestClient;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class ClientDemo extends JPanel implements ActionListener{
public static void main(String[] args) {
// TODO Auto-generated method stub
new ClientDemo(); }
//定义组件
JFrame jf;
JTextField SendJTF;
JButton SendJB;
JTextArea jta=null;
JScrollPane jsp=null;
PrintWriter pw;
public ClientDemo(){ this.setLayout(null);
//创建组件
jta=new JTextArea();
jsp=new JScrollPane(jta);
jsp.setBounds(0,50,650,210);
this.add(jsp); SendJTF=new JTextField(15);
SendJTF.addActionListener(this);
SendJTF.setBackground(Color.lightGray);
SendJTF.setBounds(0,250,650,120);
this.add(SendJTF); //发送按钮
SendJB=new JButton("发送");
SendJB.setBounds(536,378,100,25);
SendJB.addActionListener(this);
this.add(SendJB);
jf=new JFrame("QQ简易聊天 客户端");
jf.setBounds(400, 100, 660, 445);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(this);
jf.setVisible(true);
jf.setResizable(false); //连接服务器
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 infoServer=br.readLine();
jta.append("服务器:"+infoServer+"\n");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //设置背景
protected void paintComponent(Graphics g)
{
try {
BufferedImage Background=ImageIO.read(new File("images/QQCHAT.jpg"));
g.drawImage(Background, 0, 0,654, 414,null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} @Override
//事件监听处理方法
public void actionPerformed(ActionEvent e) {
if(e.getSource()==SendJB){
String info=SendJTF.getText();
pw.println(info);
SendJTF.setText("");
jta.append("发送:"+info+"\n"); }
}
}
运行截图:



Java学习图形界面+网络编程案例---------网络简易通讯的更多相关文章
- Java 学习之网络编程案例
网络编程案例 一,概念 1,网络编程不等于网站编程 2,编程只和传输层打交道,即TCP和UDP两个协议 二,案例 1,TCP实现点对点的聊天 Server端:两个输入流:读客户端和控制台,一个输出端: ...
- Java学习疑惑(8)----可视化编程, 对Java中事件驱动模型的理解
我们编写程序就是为了方便用户使用, 我觉得UI设计的核心就是简洁, 操作过于繁琐的程序让很大一部分用户敬而远之. 即使功能强大, 但是人们更愿意使用易于操作的软件. 近年流行起来的操作手势和逐渐趋于成 ...
- Java学习之AWT GUI编程
Java学习之AWT GUI编程 0x00 前言 既然前面提到了要重写冰蝎和一些反序列化工具,当然就不能随便说说而已.在编写这些工具还是要使用图形化工具来的方便一些,所以提前把GUI的框架给学习一遍. ...
- Java学习之Swing Gui编程
Java学习之Swing Gui编程 0x00 前言 前面的使用的Gui是基于Awt 去进行实现,但是在现实写Gui中 AWT实际运用会比较少. 0x01 Swing 概述 AWT 和Swing 区别 ...
- 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分
老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分 老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/gu ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- Java的图形界面依然是跨平台的
Awt:抽象窗口工具箱,它由三部分组成: ①组件:界面元素: ②容器:装载组件的容器(例如窗体): ③布局管理器:负责决定容器中组件的摆放位置. 图形界面的应用分四步: ① 选择一个容器: ⑴wind ...
- Java Swing 图形界面开发(目录)
Java Swing 图形界面开发(目录) 2017年05月30日 23:50:42 阅读数:5228 本文链接: http://blog.csdn.net/xietansheng/article/d ...
- Java Swing图形界面开发
本文转自xietansheng的CSDN博客内容,这是自己见过的最通俗易懂.最适合快速上手做Java GUI开发的教程了,这里整合一下作为自己以后复习的笔记: 原文地址:https://blog.cs ...
随机推荐
- 源码实现 --> strrev
字符串的顺序反序 函数 char *strrev(char *string); 将字符串string中的字符顺序颠倒过来. NULL结束符位置不变. 返回调整后的字符串的指针. 源码 //其基于的思想 ...
- OpenStreetMap、googleMap等经纬度和行列号之间相互转化
# OpenStreetMap经纬度转行列号 def deg2num(lat_deg, lon_deg, zoom): lat_rad = math.radians(lat_deg) n = 2.0 ...
- android studio视频教学
英语+中文字幕: http://www.apkbus.com/plugin.php?id=buskc&modo=learn&kcid=82 中文字幕: http://www.maizi ...
- 算法题丨Remove Duplicates from Sorted Array II
描述 Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? 示例 Giv ...
- C#/AutoCAD 2018/ObjectArx/二次开发再说实体(六)
这些函数对大家很有用,如果想获取详细源代码请加云幽学院yunyou.ke.qq.com报名免费课程,如果想学习更系统.更全面的知识请报名收费课程,有大量开发案例共享. 1.获取模型空间中所有实体 #r ...
- 《Language Implementation Patterns》之 符号表
前面的章节我们学会了如何解析语言.构建AST,如何访问重写AST,有了这些基础,我们可以开始进行"语义分析"了. 在分析语义的一个基本方面是要追踪"符号",符号 ...
- python pip包管理
pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品.本文将详细说明 安装 pip 的方法和 使用 pip 的一些基本操作如安装.更新和卸载 python ...
- CSS你所不知的伪元素的用法
你所不知的 CSS ::before 和 ::after 伪元素用法 博客分类: Div / Css / XML / HTML5 CSS 有两个说不上常用的伪类 :before 和 :after, ...
- JAVA_SE基础——28.封装
黑马程序员blog... 面向对象三大特征:1. 封装2. 继承3 多态. 今天我们先学习第一大特征,封装. 封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处: 1. 将变 ...
- 微信开发之SVN提交代码与FTP同步到apache的根目录
SVN是协同开发的,版本控制器,就是几个人同时开发,可以提交代码到SVN服务器,这样就可以协同开发,一般是早上上班首先更新下代码,然后自己修改代码 工作一天之后,修改代码之后,下班之前,更新代码,然后 ...