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 ...
随机推荐
- 在Anacoda中管理多个版本Python
win10. 在cmd窗口中输入 conda info --envs 或者 conda env list 查看已经安装的环境,当前活动的环境前会加*号. 在cmd窗口(终端窗口)或anaconda p ...
- mysqldump 备份脚本
#!/bin/bash DUMP=/usr/bin/mysqldump OUT_DIR=/home/mysql LINUX_USER=root DB_NAME=snale DB_USER=root D ...
- Dom属性方法
一.javascript的三大核心 1.ECMAScript js的语法标准 2.DOM Document object Model 文档对象模型,提供的方法可以让js操作html标签 3.BOM B ...
- iPhone的App嵌入html页面问题
测试环境:iPhone ios 11.0.3 问题:iPhone App嵌入HTML页面,页面拉动到底部时,手势从屏幕底部边缘开始往上拉动,页面出现白色图层,且html页面一屏外的会卡住,无法滚动,需 ...
- 利用jmeter进行数据库测试
1.首先,用jmeter进行数据库测试之前,要把oracle和mysql的JDBC驱动jar包放到jmeter安装路径的lib目录下,否则会提示错误 2.添加一个线程组,如下图 3.接下来添加一个JD ...
- Beta冲刺-用户测试报告
一.项目概述 1.1项目名称 高校学生征信系统 1.2项目简介 此项目基于SSH框架,力图为学生提供征信服务和信用相关的借款和申请活动.其中以信用统计和管理为主,信用使用为辅,构建出一个集信用收集和使 ...
- CentOS 7 安装Graphite
Graphite简介 Graphite是一个Python编写的企业级开源监控工具,采用django框架,用来收集服务器所有的即时状态,用户请求信息,Memcached命中率,RabbitMQ消息服务器 ...
- JAVA_SE基础——66.StringBuffer类 ③
如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer). StringBuffer 其实就是一个存储字符 的容器. 容器的具备 的行为 常用方法 String 增加 ap ...
- Highcharts tooltip显示多条线的信息
直接上代码吧,简单粗暴点: tooltip: { shared: true, valueSuffix: '分', formatter: function () { let s = "&quo ...
- Linux CentOS7.0 (04)systemctl vs chkconfig、service
CentOS 7.0中已经没有service命令,而是启用了systemctl服务器命令 systemctl 是系统服务管理器命令,它实际上将 service 和 chkconfig 这两个命令组合到 ...