package lts;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Enumeration;

import javax.swing.*;
import javax.swing.plaf.FontUIResource;

import lts.ClinetRecive;



/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class client{
    //新建窗体并设置窗体标题
    public JFrame frame = new JFrame("客户端");
    public JPanel panel = null;
    private JButton stop;
    private JTextArea showaddress;
    private JTextArea name;
	private JButton link;
    private JLabel address;
    private JTextArea showport;
    private JLabel dkh;
    private JTextArea showmess;
	private JTextArea sendmess;
    private JButton fsbutton;
    BufferedWriter bw;
    ClinetRecive recive;
    Socket socket;
    //构造方法
    public client()
    {
        //加载构造方法时初始化
        init();
        stop.setEnabled(false);
    }
    //get和set方法
    public JTextArea getShowmess() {
 		return showmess;
 	}
 	public void setShowmess(JTextArea showmess) {
 		this.showmess = showmess;
 	}
 	public JTextArea getName() {
		return name;
	}
	public void setName(JTextArea name) {
		this.name = name;
	}
    //
    @SuppressWarnings("serial")
    public void init(){
        //创建布局管理器
		panel = new JPanel() {
			// 获取窗体所需组件
			public void paintComponent(Graphics g) 
			{
				// 设定背景图路径(图片的路径要更换成你自己的相对路径也可以,我这里用绝对路径)
				String imagePath = "D:\\works\\wf\\LTS\\src\\5.jpg";
				// 创建图片类
				ImageIcon icon = new ImageIcon(imagePath);
				// 创建图片类获取图片
				Image image = icon.getImage();
				// 绘画
				g.drawImage(image, 0, 0, icon.getIconWidth(),icon.getIconHeight(), icon.getImageObserver());
				// 获取图片宽高作为窗体宽高
				frame.setSize(icon.getIconWidth(), icon.getIconHeight());
			}
		};
        //把布局设定进窗体中
        frame.add(panel);
        panel.setLayout(null);
        //将窗体设置为可视
        frame.setVisible(true);
        frame.setPreferredSize(new java.awt.Dimension(510, 639));
        frame.setTitle("\u5ba2\u6237\u7aef");
        //调整窗体大小
        frame.pack();
        frame.setSize(510, 639);
        //====================================================
        {
        	fsbutton = new JButton();
        	panel.add(fsbutton);
        	fsbutton.setText("\u53d1\u9001");
        	fsbutton.setBounds(289, 512, 83, 33);
        	fsbutton.setFont(new java.awt.Font("幼圆",1,18));
        	fsbutton.setForeground(Color.white);
        	fsbutton.setBackground(new Color(33, 184,229));
        	fsbutton.setBorder(null);
        	fsbutton.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					String s=sendmess.getText();//消息内容
					String s2=name.getText();//用户名
					if("".equals(s)){//不为空的那个来点equals
						JOptionPane.showMessageDialog(null, "输入内容不能为空", "友情提示", JOptionPane.WARNING_MESSAGE);
						sendmess.requestFocus();//获取焦点
					}else{
						sendmess(s,s2);
						sendmess.setText(null);// 发送后清空文本框内容
					}
				}
			});
        }
        {
        	sendmess = new JTextArea();
        	panel.add(sendmess);
        	sendmess.setBounds(28, 409, 344, 91);
        	sendmess.setFont(new java.awt.Font("幼圆",0,15));
        	 //按回车发送消息  
            sendmess.addKeyListener(new KeyAdapter() {  
                public void keyPressed(KeyEvent e) {  
                    if(e.getKeyCode() == KeyEvent.VK_ENTER){  
                    	String s=sendmess.getText();//
    					String s2=name.getText();
    					if("".equals(s)){//不为空的那个来点equals
    						JOptionPane.showMessageDialog(null, "输入内容不能为空", "友情提示", JOptionPane.WARNING_MESSAGE);
    						sendmess.requestFocus();//获取焦点
    					}else{
    						sendmess(s,s2);
    						sendmess.setText(null);// 发送后清空文本框内容
    					}
                    }  
                }  
            });  
        }
        {
        	showmess = new JTextArea();
        	panel.add(showmess);
        	showmess.setBounds(28, 68, 344, 295);
        	showmess.setFont(new java.awt.Font("幼圆",0,15));
        	showmess.setEditable(false);//设置文本区域不可编译
        	showmess.setLineWrap(true);//设置自动换行,之后则不需要设置水平滚动条
        	//设置滚动条
        	JScrollPane jsp=new JScrollPane(showmess);
        	//设置矩形大小.参数依次为(矩形左上角横坐标x,矩形左上角纵坐标y,矩形长度,矩形宽度)
        	jsp.setBounds(28, 68, 344, 295);
        	jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        	/*
        	//分别设置水平和垂直滚动条自动出现 
        	jsp.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);   
        	jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);   
        	  
        	//分别设置水平和垂直滚动条总是出现   
        	jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);   
        	jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);   
        	  
        	//分别设置水平和垂直滚动条总是隐藏  
        	jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);   
        	jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        	*/
        	panel.add(jsp);
        }
        {
        	dkh = new JLabel();
        	panel.add(dkh);
        	dkh.setText("\u7aef\u53e3\u53f7");
        	dkh.setBounds(404, 74, 62, 21);
        	dkh.setFont(new java.awt.Font("幼圆",1,18));
        	dkh.setForeground(Color.white);
        }
        {
        	showport = new JTextArea();
        	panel.add(showport);
        	showport.setText("6666");
        	showport.setBounds(404, 101, 54, 23);
        	showport.setFont(new java.awt.Font("方正兰亭超细黑简体",1,15));
        	showport.setForeground(Color.black);
        }
        {
        	address = new JLabel();
        	panel.add(address);
        	address.setText("\u5730\u5740");
        	address.setBounds(413, 130, 45, 24);
        	address.setFont(new java.awt.Font("幼圆",1,18));
        	address.setForeground(Color.white);
        }
        {
        	showaddress = new JTextArea();
        	panel.add(showaddress);
        	showaddress.setText("127.0.0.1");
        	showaddress.setBounds(392, 160, 83, 21);
        	showaddress.setFont(new java.awt.Font("方正兰亭超细黑简体",1,15));
        	showaddress.setForeground(Color.black);
        }
        {
        	link = new JButton();
        	panel.add(link);
        	link.setText("\u8fde\u63a5");
        	link.setBounds(392, 193, 83, 33);
        	link.setFont(new java.awt.Font("幼圆",1,18));
        	link.setForeground(Color.white);
        	link.setBackground(new Color(33, 184,229));
        	link.setBorder(null);
        	//-----------------------------利用匿名内部类实现-------------------==========================
			link.addActionListener(new ActionListener() {//连接按钮
				@Override
				public void actionPerformed(ActionEvent arg0) {
					link.setEnabled(false);
					getLink();//连接到服务器
				}
			});
            //======================================================================================
        }
        {
        	name = new JTextArea();
        	panel.add(name);
        	panel.add(getStop());
        	name.setText("\u9a6c\u4e91");
        	name.setBounds(28, 25, 64, 24);
        	name.setFont(new java.awt.Font("方正兰亭超细黑简体",1,15));
        	name.setForeground(Color.black);
        }
        //====================================================================
        
    }
    public static void main(String[] args) {
        //调用
        new client();
    }
  //===getLink方法===============================================================================
  	public BufferedWriter getLink() {// 连接到服务器,并向服务器发送自己的名字
  		try {
  			socket = new Socket("127.0.0.1", 6666);
  			stop.setEnabled(true);
  			OutputStream os = socket.getOutputStream();
  			bw = new BufferedWriter(new OutputStreamWriter(os));
  			String mess = name.getText()+"\n";
  			bw.write(mess);
  			bw.flush();
  			// 开启线程处理消息的接收
  			//连接成功之后就一直等着客户端发消息过来,客户端等着接收消息
  			recive=new ClinetRecive(socket,this.getShowmess());
  			recive.start();
  		} catch (UnknownHostException e) {
  			JOptionPane.showMessageDialog(null, "地址错误", "友情提示", JOptionPane.WARNING_MESSAGE);
  		} catch (IOException e) {
  			JOptionPane.showMessageDialog(null, "服务器未启动", "友情提示", JOptionPane.WARNING_MESSAGE);
  			link.setEnabled(true);
  		}
  		return bw;
  	}
  //==客户端发送消息方法==========================================================
  	public void sendmess(String s,String s2){//s2是用户名
  		try {
  			bw.write(s2+"//"+s+"\n"); //bw已经写好      **怎么解决某一条消息是某某发送的缺陷**
  			bw.flush();                      //发送的时候获取文本区域的名字把名字一起发送过去
  		} catch (IOException e) {
  			e.printStackTrace();
  		}
  		System.out.println("消息已从客户端发送,转发到服务器及其他客户端");
  	}
  
  private JButton getStop() {
	  if(stop == null) {
		  stop = new JButton();
		  stop.setText("\u65ad\u5f00");
		  stop.setBounds(392, 237,83, 33);
          panel.add(stop);
          stop.setFont(new java.awt.Font("幼圆",1,18));
          stop.setForeground(Color.white);
          stop.setBackground(new Color(33, 184,229));
          stop.setBorder(null);
          stop.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				//先关闭客户端后再关闭服务器
				//关闭输出输入流,线程,socket
				link.setEnabled(true);
				stop.setEnabled(false);
				String s2=name.getText();//获取用户名
				System.out.println(s2);
				disconnect(s2);
				//System.exit(0);
				//recive.stop();
//				try {
//					bw.write("$$$"+"\n");
//					bw.flush();
//					//bw.close();//关闭输出流
//				    //socket.close();//关闭socket
//				} catch (IOException e) {
//					System.out.println("关闭失败");
//					e.printStackTrace();
//				}
				//=============
			}
		});
	  }
	  return stop;
  }
  //==========================================>>>>>>>>>>>>>>>>>>>>>>>>
  public void disconnect(String s2){
	  try {
		bw.write(s2+"//"+"【断开连接】"+"\n");
		bw.flush();
		//要关闭用户端的输出流
	} catch (IOException e) {
		e.printStackTrace();
	}
  }
  //======================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
}
最近下载更多
yuchunxing  LV1 2023年9月2日
青柠编程  LV13 2023年4月18日
referrer  LV1 2022年12月25日
qqyx777  LV1 2022年6月27日
微信网友_6003487859068928  LV5 2022年6月15日
123456qiqiqi  LV1 2022年5月27日
tdcq123  LV14 2022年3月13日
bbbookworm  LV1 2022年2月19日
weny_QAQ  LV2 2021年12月22日
Sunknown  LV1 2021年11月30日
最近浏览更多
3263394665  LV9 8月31日
周鸣郝  LV2 5月26日
krispeng  LV13 4月16日
dapeng0011  LV15 2月25日
陈小灏  LV15 2023年12月27日
暂无贡献等级
yuchunxing  LV1 2023年9月2日
fuyouou  LV5 2023年6月29日
CL200228  LV4 2023年5月5日
gzryue  LV6 2023年3月8日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友