package Controller;
import Model.*;
import Model.Data.MsgData;
import Model.Data.Userdata;
import View.Alert;
import View.*;
import View.Dialog;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import java.util.regex.Pattern;
/**
* 页面控制类 所有页面的控制 包含的方法 exec() 和 $()
* 包含的属性为View包下的页面类
*/
public class Controller {
private Dialog dialog;
private Register register;
private Forget forget;
private MainWindow mainWindow;
public static Userdata userdata;
private Homepage homepage;
public static DatabaseModel database;
private AlterPerson alterPerson;
public static FriendPage friendPage;
public static SearchFriend searchFriend;
private HeadProtrait headProtrait;
private String friendName;
private String friendHead;
public static Alert alert;
public Controller() throws IOException {
dialog = new Dialog();
register = new Register();
userdata = new Userdata();
database = new DatabaseModel();
forget = new Forget();
mainWindow = new MainWindow();
homepage = new Homepage();
alterPerson = new AlterPerson();
alert = new Alert();
friendPage = new FriendPage();
searchFriend = new SearchFriend();
headProtrait = new HeadProtrait();
MsgData.msg = new Vector<>();
MsgData.MsgMap = new HashMap<>();
MsgData.accountList = new Vector<>();
database.connect();
dialog.show();
}
/**
* 该方法实现各个页面的各种交互 例如点击当前页面的按钮 跳转至另一个页面 所有功能集合
*
* @throws ClassNotFoundException
*/
public void exec() throws ClassNotFoundException {
headProtrait.setModailty(register);
headProtrait.setModailty(alterPerson);
alert.setModailty(mainWindow);
alert.setModailty(searchFriend);
ChatManager.getInstance().setMainWindow(mainWindow);
initEvent();
dialogExec();
forgetExec();
alterPersonExec();
registerExec();
sendMsgExec();
OptionHead();
SearchFriends();
find();
FriendInfo();
saveRemark();
dialog.show();
}
/**
* 初始化事件
*/
public void initEvent() {
((Button) $(dialog, "register")).setOnAction(event -> {
dialog.hide();
dialog.clear();
register.show();
});
((Button) $(register, "back")).setOnAction(event -> {
register.hide();
register.clear();
dialog.show();
});
((Button) $(dialog, "getBack")).setOnAction(event -> {
dialog.hide();
dialog.clear("Password");
forget.show();
});
((Button) $(forget, "cancel")).setOnAction(event -> {
forget.hide();
forget.clear();
dialog.show();
});
((Button) $(mainWindow, "more")).setOnAction(event -> {
homepage.show();
});
((Button) $(homepage, "alter")).setOnAction(event -> {
alterPerson.setUserData(userdata.getUserdata());
alterPerson.show();
});
((Button) $(register, "ChooseHead")).setOnAction(event -> {
headProtrait.show();
});
((Button) $(mainWindow, "maximization")).setOnAction(event -> {
searchFriend.clear();
searchFriend.show();
});
}
/**
* 该方法通过页面对象 以及给定的id 选择页面的元素 用法:TextField t = (TextField)$(dialog,"UserName");
* 这样选出登入框对象的id为UserName的输入框 之后就可以为 t 绑定事件了
*
* @param window
* @param id
* @return
*/
private Object $(window window, String id) {
return (Object) window.getRoot().lookup("#" + id);
}
/**
* 邓鹏飞
* 登入功能
*/
private void dialogExec() {
((Button) $(dialog, "enter")).setOnAction(event -> {
dialog.resetErrorTip();
String UserName = ((TextField) $(dialog, "UserName")).getText();
String Password = ((PasswordField) $(dialog, "Password")).getText();
if (UserName.equals("") || Password.equals("")) {
if (UserName.equals("")) {
dialog.setErrorTip("accountError", "!未输入账号");
}
if (Password.equals("")) {
dialog.setErrorTip("passwordError", "!未输入密码");
}
} else {
ResultSet resultSet = null;
try {
resultSet = database.execResult("SELECT * FROM user WHERE account=?", UserName);
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (resultSet.next()) {
if (resultSet.getString(3).equals(Password)) {
ResultSet set = database.execResult("SELECT * FROM dialog WHERE account = ?", UserName);
if (set.next()) {
dialog.setErrorTip("accountError", "该账号已经登入,不能重复登入!");
} else {
database.exec("INSERT INTO dialog VALUES(?)", UserName);//登入记录
//设置用户数据
userdata.setUserdata(resultSet);
userdata.setData(resultSet);
//个人主页数据
homepage.setUserData(userdata.getUserdata());
dialog.close();
//主窗口
mainWindow.setHead(userdata.getHead());
mainWindow.setPersonalInfo(userdata.getAccount(),userdata.getName(),userdata.getAddress(),userdata.getPhone());
ResultSet resultSet1 = database.execResult("SELECT head,account,remark FROM user,companion WHERE account = Y_account AND I_account=?", UserName);
//聊天助手
mainWindow.addFriend("system", "WeChat聊天助手","聊天助手");
((Label) $(mainWindow, "Y_account")).setText("WeChat聊天助手");
MsgData.msg.add(new Vector<>());
MsgData.accountList.add("WeChat聊天助手");
MsgData.msgTip.put("WeChat聊天助手", 0);
//所有好友
while (resultSet1.next()) {
MsgData.msg.add(new Vector<>());
String temp = resultSet1.getString("account");
MsgData.accountList.add(temp);
MsgData.msgTip.put(temp, 0);
mainWindow.addFriend(resultSet1.getString("head"), resultSet1.getString("account"), resultSet1.getString("remark"),database, friendPage);
}
mainWindow.addLeft("system", "欢迎使用WeChat,赶快找好友聊天吧!");
MsgData.msg.get(0).add("WeChat聊天助手 欢迎使用WeCha
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一个聊天软件,使用JAVAFX来做界面,实现的功能有登入注册,找回密码,更改头像,发送接收消息,查看好友资料,修改好友备注,好友是否在线的提示,消息的提示,气泡的大小自动改变,标为已读未读,清除聊天记录,删除好友,添加好友,好友备注,搜索好友,个人资料的修改查看,设置,聊天助手的提示,右键菜单等功能。
资源推荐
资源详情
资源评论
收起资源包目录
JavaFx Wechat聊天软件 (291个子文件)
Controller.class 21KB
friendListItem.class 12KB
MainWindow.class 10KB
ChatManager$1.class 6KB
ListItem.class 6KB
DatabaseModel.class 6KB
AlterPerson.class 5KB
Homepage.class 5KB
Userdata.class 4KB
Register.class 4KB
SearchFriend.class 4KB
FriendPage.class 4KB
HeadProtrait.class 4KB
Alert.class 4KB
Forget.class 3KB
Dialog.class 3KB
window.class 3KB
ChatListItem.class 3KB
ChatManager.class 2KB
Tool.class 2KB
MsgData.class 853B
friendData.class 802B
Main.class 650B
MianWindow.css 11KB
MianWindow.css 11KB
SearchFriend.css 5KB
SearchFriend.css 5KB
Register.css 4KB
Register.css 4KB
FriendPage.css 4KB
FriendPage.css 4KB
AlterPerson.css 4KB
AlterPerson.css 4KB
Homepage.css 4KB
Homepage.css 4KB
HeadPortrait.css 4KB
HeadPortrait.css 4KB
Forget.css 3KB
Forget.css 3KB
Dialog.css 3KB
Dialog.css 3KB
Alert.css 2KB
Alert.css 2KB
Register.fxml 6KB
Register.fxml 6KB
MainWindow.fxml 6KB
MainWindow.fxml 6KB
AlterPerson.fxml 5KB
AlterPerson.fxml 5KB
Forget.fxml 5KB
Forget.fxml 5KB
Homepage.fxml 4KB
Homepage.fxml 4KB
FriendPage.fxml 4KB
FriendPage.fxml 4KB
HeadPortrait.fxml 4KB
HeadPortrait.fxml 4KB
Dialog.fxml 4KB
Dialog.fxml 4KB
SearchFriend.fxml 1KB
SearchFriend.fxml 1KB
Alert.fxml 1KB
Alert.fxml 1KB
dialog.gif 2.83MB
dialog.gif 2.83MB
description.html 189B
WeChat.iml 437B
Controller.java 32KB
friendListItem.java 11KB
DatabaseModel.java 11KB
MainWindow.java 10KB
ChatManager.java 9KB
Userdata.java 5KB
ListItem.java 4KB
AlterPerson.java 4KB
Homepage.java 3KB
Register.java 3KB
HeadProtrait.java 2KB
SearchFriend.java 2KB
FriendPage.java 2KB
Dialog.java 2KB
Forget.java 2KB
Alert.java 2KB
Tool.java 2KB
window.java 2KB
friendData.java 525B
MsgData.java 460B
Main.java 368B
head5.jpg 3.06MB
head5.jpg 3.06MB
head8.jpg 2.51MB
head8.jpg 2.51MB
head7.jpg 2.4MB
head7.jpg 2.4MB
head4.jpg 1.5MB
head4.jpg 1.5MB
background17.jpg 1.26MB
background17.jpg 1.26MB
background2.jpg 1.18MB
background2.jpg 1.18MB
共 291 条
- 1
- 2
- 3
资源评论
- MHXW2019-08-27您好,sql文件没有吗?
- 阿培start2018-08-18素材还不错
- orange3602018-12-01感觉不错哎。大佬大佬
- fayzeng2020-05-26文档内容一般
sundialdreams
- 粉丝: 327
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功