package com.lzy.window.secondwindow;
import com.lzy.smallclien.service.ClientConnectServerThread;
import com.lzy.smallclien.service.MessageClientService;
import com.lzy.smallclien.service.UserClientService;
import com.lzy.window.MessageSplicing;
import com.lzy.window.WindowLogin;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* @author Me
* @version 1.0
* @date 2023/11/2 14:06
* @Description:醉了,被我删掉要重来了啊啊啊啊
*/
@SuppressWarnings({"all"})
public class SecondWindow extends JFrame {
public static String getGetId() {
return getId;
}
public static void setGetId(String getId) {
SecondWindow.getId = getId;
}
UserClientService userClientService;
private static String getId;//收信人
private String sendId;
private String Text; //消息内容
// private String s; // 从输入框获取的文本信息,包含在线用户
//弃用,直接使用getText即可
private boolean aBoolean = false; //判断是群聊还是私聊
private MessageClientService messageClientService = new MessageClientService();//用于对象私聊
private ClientConnectServerThread clientConnectServerThread ;
public SecondWindow(String sendId,UserClientService userClientService) {
this.userClientService = userClientService;
this.sendId = sendId;
initComponents();
}
public static JTextArea getTextArea1() {
return textArea1;
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents @formatter:off
scrollPane1 = new JScrollPane();
textArea1 = new JTextArea();
formattedTextField1 = new JFormattedTextField();
button3 = new JButton();
button4 = new JButton();
button5 = new JButton();
button6 = new JButton();
button7 = new JButton();
button8 = new JButton();
button9 = new JButton();
//======== this ========
setTitle("当前在线用户:"+sendId);
setMinimumSize(new Dimension(800, 600));
var contentPane = getContentPane();
contentPane.setLayout(null);
setVisible(true);
//关闭窗口时将线程杀死退出
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int result = JOptionPane.showConfirmDialog(null,"你确定退出聊天程序吗?","嘿!",JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.YES_OPTION){
userClientService.logout();
setDefaultCloseOperation(EXIT_ON_CLOSE);
} else if (result == JOptionPane.NO_OPTION){
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
}
}
});
//======== scrollPane1 ========
{
scrollPane1.setViewportView(textArea1);
textArea1.setEditable(true);//不允许编辑文本框,允许自由复制
formattedTextField1.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER)
{
if(aBoolean){
MessageClientService.sendMessageToAll(formattedTextField1.getText(),sendId);
Text = MessageSplicing.getToValidUsers().get(getId) +sendId+"(我)对大家说:"+formattedTextField1.getText()+"\n";
MessageSplicing.getToValidUsers().put(getId,Text);
textArea1.append(sendId+"(我)对大家说:"+formattedTextField1.getText()+"\n"); //在自己的用户窗口显示发送的消息
formattedTextField1.setText("");
}else {
messageClientService.sendMessageToOne(formattedTextField1.getText(),sendId,getId);
Text = MessageSplicing.getToValidUsers().get(getId)+sendId+"(我)对用户:"+getId+"说:"+formattedTextField1.getText()+"\n";
MessageSplicing.getToValidUsers().put(getId,Text);
textArea1.append(sendId+"(我)对用户:"+getId+"说:"+formattedTextField1.getText()+"\n"); //在自己的用户窗口显示发送的消息
formattedTextField1.setText("");
}
}
}
});
}
contentPane.add(scrollPane1);
scrollPane1.setBounds(90, 5, 650, 450);
contentPane.add(formattedTextField1);
formattedTextField1.setBounds(50, 470, 580, formattedTextField1.getPreferredSize().height);//文本条
//---- button3 发送按钮 ----
button3.setText("发送");
contentPane.add(button3);
button3.setBounds(new Rectangle(new Point(640,470 ), button3.getPreferredSize()));
button3.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(aBoolean){
MessageClientService.sendMessageToAll(formattedTextField1.getText(),sendId);
Text = MessageSplicing.getToValidUsers().get(getId) +sendId+"(我)对大家说:"+formattedTextField1.getText()+"\n";
MessageSplicing.getToValidUsers().put(getId,Text);
textArea1.append(sendId+"(我)对大家说:"+formattedTextField1.getText()+"\n"); //在自己的用户窗口显示发送的消息
formattedTextField1.setText("");
}else {
messageClientService.sendMessageToOne(formattedTextField1.getText(),sendId,getId);
Text = MessageSplicing.getToValidUsers().get(getId)+sendId+"(我)对用户:"+getId+"说:"+formattedTextField1.getText()+"\n";
MessageSplicing.getToValidUsers().put(getId,Text);
textArea1.append(sendId+"(我)对用户:"+getId+"说:"+formattedTextField1.getText()+"\n"); //在自己的用户窗口显示发送的消息
formattedTextField1.setText("");
}
}
});
//---- button4 ----
contentPane.add(button4);
button4.setBounds(0, 5, 90, button3.getPreferredSize().height);
button4.setText("群发消息");
button4.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
getId = "我发起群聊";
textArea1.setText(MessageSplicing.getToValidUsers().get(getId)+"=========与在线的同学群聊中=========\n");
aBoolean = true;
}
});
//---- button5 ----
button5.setText("100");
contentPane.add(button5);
button5.setBounds(0, 55, 90, 38);
aBoolean = false;
button5.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
getId = "100";
aBoolean = false;
if (getId.equals(sendId)){
JOptionPane.showMessageDialog(null,"该用户为当前所窗口的在线","!警告",JOptionPane.WARNING_MESSAGE); //消息对话框
}else {
WindowLogin.getUserClientService().onlineFriendList();
textArea1.setText(MessageSplicing.getToValidUsers().get(getId) + "=========与用户:100 聊天中=========\n");
// ClientConnectServerThread.isLoop()不应当是静态,不然无法找到socket
} }
});
//---- button6 ----
button6.setText("200");
contentPane.add(button6);
button6.setBounds(0, 95, 90, 38);
button6.addMouseLis
利用java设计的网络编程及图形化界面大作业
需积分: 0 102 浏览量
更新于2023-11-25
收藏 681KB ZIP 举报
该项目具备了基本的图形化界面,能够将服务端和客户端打包成两个文件,具备群聊,私聊的,保存聊天记录等功能。利用了多线程,图形化的类与方法,事件处理,网络编程,集合管理。
该程序再后续添加了保存聊天记录的功能和修改ip地址的功能。
在客户端,使用HashMap将对应的聊天记录进行在客户端的临时保存,以便每次与相应用户进行私聊时,只显示与该用户的聊天记录。随后当退出客户端时,将会向服务端发送该用户的聊天记录。在下次登录时,只有与服务端建立连接,将会向指定客户端回送保存在服务端的消息,实现“联网获取聊天记录的效果”。
而服务端将会把读取到的聊天记录利用文件流以Unicode写到配置文件(properties)中去,在客户端登录成功时读出打包成message发送。
以同样的文件流的方法,将客户端连接的ip地址写到配置文件中,,默认为本机地址。当不同在一台电脑下运行,则需要连接在同一个局域网下,在配置文件中修改服务端的ip4即可进行连接。
m0_73875592
- 粉丝: 76
- 资源: 3
最新资源
- 使用 HTML 和 CSS 实现绚丽的节日烟花效果
- html/css/javascript实现简单的圣诞快乐demo
- 全志V3s GPIO驱动示例(传统设备驱动模型、平台总线设备驱动模型、设备树驱动模型)
- 基于pytho的turtle库实现的圣诞快乐demo
- 【深度学习系列专栏】ch01配套资源
- yolov4 - tiny 900张图片训练效果3
- 连接服务器的服务,可以电脑直连后获得服务器信息
- Vue.js 2.0 入门Demo文档步骤梳理
- 用JavaScript实现文字上下浮动效果
- 用python的turtle库实现新年快乐demo
- Parallels Desktop Activation Tool
- 用java是swing库实现新年快乐动效demo
- mingw资源包wenjian
- 华为汽车产品知识 外呼邀约需要注意什么
- LABVIEW程序实例-cp2_ex10.zip
- LABVIEW程序实例-chart接受的数据类型.zip