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日
最近浏览更多
13133117021 LV5
2024年12月24日
3263394665 LV9
2024年8月31日
周鸣郝 LV2
2024年5月26日
krispeng LV15
2024年4月16日
dapeng0011 LV15
2024年2月25日
陈小灏 LV18
2023年12月27日
微信网友_6762641760833536
2023年12月4日
暂无贡献等级
yuchunxing LV1
2023年9月2日
fuyouou LV5
2023年6月29日
CL200228 LV4
2023年5月5日

