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 ...
随机推荐
- DotNetBar控件,superTabControl多文档界面(MDI)的风格、多Tab的创建方法
最近在做一个条码系统的项目,第一次用dotnetbar控件,,查找资料时看到伍老师一篇文章(链接),但是没有关于加载tab窗口的方法,自己摸索做了一个此类风格出来,并写了一个通用方法,供大家参考. 风 ...
- Angular开发实践(六):服务端渲染
Angular Universal Angular在服务端渲染方面提供一套前后端同构解决方案,它就是 Angular Universal(统一平台),一项在服务端运行 Angular 应用的技术. 标 ...
- 1077. Kuchiguse (20)
The Japanese language is notorious for its sentence ending particles. Personal preference of such pa ...
- Find The Multiply
Find The Multiply poj-1426 题目大意:给你一个正整数n,求任意一个正整数m,使得n|m且m在十进制下的每一位都是0或1. 注释:n<=200. 想法:看网上的题解全是b ...
- CentOS 6.5 通过命令行安装发送邮件
1.安装sendmail: yum install sendmail 2.安装mailx: yum install mailx -y 3.编辑发送的配置文件: vi /etc/mail.rc #在最后 ...
- java之静态属性和静态方法
前言 静态属性和方法必须用static修饰符 静态属性和非静态属性的区别: 1.在内存中存放位置不同 所有带static修饰符的属性或者方法都存放在内存中的方法区 而非静态属性存放在内存中的堆区 ...
- 【Alpha版本】冲刺阶段 - Day6 - 乘风
今日进展 袁逸灏:1.实现了碰撞的判定:2.代码规范化:3.解决了项目基本代码.(7h) 刘伟康:补充了上次未完成的任务,即检查代码规范,增加AS规范并整理上传至码云.除此之外,学习了部分 Andro ...
- 在Eclipse中调用Algs4库
首先下载Eclipse,我选择的是Eclipse IDE for Java Developers64位版本,下载下来之后解压缩到喜欢的位置然后双击Eclipse.exe启动 然后开始新建项目,File ...
- PHP获取短信验证码
PHP如何获取短信验证码?以下是创蓝253短信平台下的PHP接口代码案例: <?php header("Content-type:text/html; charset=UTF-8& ...
- 超绚丽CSS3多色彩发光立方体旋转动画
CSS3添加了几个动画效果的属性,通过设置这些属性,可以做出一些简单的动画效果而不需要再去借助JavaScript.css3动画的属性主要分为三类:transform.transition以及anim ...