主要思想:
主类继承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+" "); } } 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+" "); } } }
客户端代码:
/** * /** * @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+" "); } } 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+" "); } } }
运行截图: