功能介绍
登录界面
这是程序的入口,包括用户头像、账号、密码、记住密码、自动登录、注册账号、找回密码几大部分。
微信公众号:JavaWeb架构师
1.1头像
1.这是用户登录之后显示头像的区域。
2.当用户在输入账户的过程中,会动态的进行匹配(注册了的账号,显示对应的头像;否则显示为空白)。
3.无论用户是否点击记住密码,登录界面都会自动的记录头像与账号,在打开软件的时候进行显示。
4.信息本身记录在user表中。
5.下次登录的信息记录在password.properties文件中。
1.2账号
此区域是用户账号的输入区域。
无论用户是否点击记住密码,登录界面都会自动的记录头像与账号,在打开软件的时候进行显示。
账号长度会进行限制,在8-11位之间。
4.账号的输入是动态的,包括动态的检测合法性、匹配头像。
5.信息本身记录在user表中。
6.下次登录的信息记录在password.properties文件中。
1.3密码
这是用户输入密码的区域,将与账号进行匹配。
如果用户点击了记住密码,登录界面会记住密码,,在打开软件的时候进行显示。
3.信息本身记录在user表中。
4.下次登录的信息记录在password.properties文件中。
1.4记住密码
是否记住密码的选项,决定下一次登录是否自动的显示密码。
2.信息本身记录在password.properties文件中。
1.5自动登录
1.是否自动登录的选项,决定下一次是否自动登录。
2.信息本身记录在password.properties文件中。
3.用户通过返回的形式,进行账号的切换。
1.6注册账号
用户进行注册账号的入口。
1.7忘记密码
用户找回密码的选项。
注册账号界面
用户在这个界面完成新用户的注册。
微信公众号:JavaWeb架构师
2.1账号
用户注册的账号,只能是8-11位的数字。
2.2密码
用户设置的密码8-11位。
2.3头像
用户设置的头像。
2.4注册按钮
进行注册,这里会进行输入不完整的检测、账号已存在的检测、账号不符合要求的检测。
2.5关闭按钮
退出注册页面。
找回密码
用户用户的密码找回,因为涉及到短信下发,需要钱,所以就是这样的一个方式进行找回。
选择页面
当登录成功之后,会进入到这个页面,进行写或者查的选择。
微信公众号:JavaWeb架构师
4.1写
进入到写的界面。
4.2查
进入到查的页面。
4.3返回
返回到登录页面,进行重新的登录。
4.4退出
退出本软件。
写
该页面是进行写日记的主界面。
微信公众号:JavaWeb架构师
5.1提示栏
事件
提示内容
进入到写界面
欢迎使用写日记系统!
保存时未输入文章内容
您尚未输入文章内容
编号不是整数
编号应该为整数
成功保存
保存成功!
5.2编号
日记的编号,作为文章的主键。
5.3标题
日记的标题。
5.4天气
进行天气选择。
微信公众号:JavaWeb架构师
5.5心情
用户进行心情的选择。
微信公众号:JavaWeb架构师
5.6日期
用户进行日期的选择,默认为当前时间。
微信公众号:JavaWeb架构师
5.7返回
返回到上一级。
5.8保存
进行文章保存。
5.9插入图片
进行图片的插入。
微信公众号:JavaWeb架构师
5.10日记编辑区域
有丰富的日记编辑功能,比如复制、粘贴、剪切、对齐方式、标号、字体颜色、字体背景颜色、段落、字体、字体大小、加粗、斜体、下划线、中划线、分割线等等。
微信公众号:JavaWeb架构师
5.11头像更换
单击头像可以进行头像的更换。
微信公众号:JavaWeb架构师
5.12头像栏
进行用户头像的显示。
5.13用户信息栏
显示用户的信息。
6、查
有对日记进行过滤的条件,包括全文、心情、天气、日期。
微信公众号:JavaWeb架构师
6.1编号
对用户查阅的日记的标号进行显示。
6.2标题
对用户查阅的日记的标题进行显示。
6.3天气
对用户查阅的日记的天气进行显示。
6.4心情
对用户查阅的日记的心情进行显示。
6.5日期
对用户查阅的日记的日期进行显示。
6.6返回
返回上一级菜单。
6.7查找结果
对查找结果进行显示。
6.8全文查找
根据关键字搜索库中文章。
6.9心情查找
根据心情进行查找。
6.10天气查找
根据天气进行查找。
6.11时间查找
根据时间段进行查找。
注:全文查找与心情、天气、日期是独立开来的。
心情、天气、日期是求交集的。
交互系统
7.1抖动交互
进行用户反馈时,会有窗口抖动进行提示。
7.2提示栏
进行用户反馈时,会有提示栏
进行提示。
部分源码
package application;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import application.choice.Choice;
import application.forget.Forget;
import application.register.Register;
import application.tool.FileTools;
import application.tool.JDBCTools;
import application.tool.StringTools;
import application.write.Writer;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class Main extends Application {
private String tempPath = ".//temp//";
private ImageView logoImage;
private CheckBox checkPassword;
private TextField accountField;
private TextField passwordField;
private double xOffset = 0;
private double yOffset = 0;
private Properties pass = new Properties();
private FileInputStream passwordFile;
private Connection con = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
private Button login;
private boolean isAutoLog = false;
double startX ;
double startY ;
private CheckBox autoLog;
private Stage primaryStage;
private Label hint;
@Override
public void start(Stage primaryStage) {
try {
// 加载fxml
Parent root = FXMLLoader.load(getClass().getResource("/application/LoginUI.fxml"));
hint = (Label) root.lookup("#hint");
passwordField = (PasswordField) root.lookup("#passwordField");
accountField = (TextField) root.lookup("#accountField");
logoImage = (ImageView) root.lookup("#logoImage");
login = (Button) root.lookup("#login");
autoLog = (CheckBox)root.lookup("#autoLog");
this.primaryStage = primaryStage;
WebView log = (WebView) root.lookup("#log");
if (log != null) {
File file = new File("edulion//edulion.html");
if (file.exists()) {
WebEngine webEngine = log.getEngine();
try {
webEngine.load(file.toURL().toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
//读取本地信息
try {
passwordFile = new FileInputStream("password.properties");
pass.load(passwordFile);
} catch (IOException e1) {
e1.printStackTrace();
}
// 记住密码
checkPassword = (CheckBox) root.lookup("#checkPassword");
//显示历史信息
setUsername();
setInofor();
// 加载css
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setTitle("YiMi日记本");
primaryStage.setScene(scene);
primaryStage.initStyle(StageStyle.UNDECORATED);// 设定窗口无边框
// 可拖动
root.setOnMousePressed((MouseEvent event) -> {
event.consume();
xOffset = event.getScreenX();
startX = primaryStage.getX();
startY = primaryStage.getY();
yOffset = event.getScreenY();
//System.out.println(xOffset + ":" + yOffset);
});
//root.setOnMouseDragEntered
root.setOnMouseDragged((MouseEvent event) -> {
//System.out.println(event.getSceneX() + "-" + event.getSceneY());
double xx = event.getScreenX();
double yy = event.getScreenY();
double x = xx - xOffset + startX;
double y = yy - yOffset + startY;
primaryStage.setX(x);
primaryStage.setY(y);
});
// 关闭窗口
ImageView iv = (ImageView) root.lookup("#closeWindow");
if (iv != null) {
iv.setOnMouseClicked((MouseEvent event) -> {
System.out.println("12121");
primaryStage.close();
});
}
// 关闭窗口
Label find = (Label) root.lookup("#find");
if (find != null) {
find.setOnMouseClicked((MouseEvent event) -> {
new Forget().start(new Stage());
});
}
//设置头像
if( !accountField.getText().equals("") ) {
setLogo();
}
// 账号改事件
if( accountField != null ) {
accountField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue,
String newValue) {
if( !newValue .equals("") && StringTools.matchs(newValue, "\\d{8,11}")) {
System.out.println("444444444444");
setLogo();
setInofor();
}
}
});
}
//登录
if (login != null) {
login.setOnMouseClicked((MouseEvent event) -> {
logIn();
});
}
Label register = (Label) root.lookup("#register");
if (register != null) {
register.setOnMouseClicked((MouseEvent event) -> {
Register r = new Register();
r.start(new Stage());
});
}
passwordFile.close();
primaryStage.setResizable(false);
if(isAutoLog == false) primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public void logIn() {
String sql = "select * from user where username = ? and password = ?";
try {
con = JDBCTools.getConnection("jdbc.properties");
ps = con.prepareStatement(sql);
ps.setString(1, accountField.getText() == null ? "" : accountField.getText());
ps.setString(2, passwordField.getText() == null ? "" : passwordField.getText());
rs = ps.executeQuery();
if (rs.next()) {
hint.setOpacity(0);
User user = new User();
user.setUser(rs.getString(1));
System.out.println(user.getUser());
user.setPassword(rs.getString(2));
Choice c = new Choice(user,primaryStage);
c.show();
primaryStage.close();
} else {
Shake.warn(primaryStage);
hint.setText("账号错误或者密码错误!请重试!");
hint.setOpacity(1);
}
saveInfor();
} catch (SQLException | ClassNotFoundException | IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} finally {
JDBCTools.release(ps, null, rs);
}
}
public void setUsername() {
if( !pass.getProperty("username").equals("") ) {
accountField.setText(pass.getProperty("username"));
}
}
public void setInofor() {
try {
passwordFile = new FileInputStream("password.properties");
pass.load(passwordFile);
System.out.println("888" + pass.getProperty("isSave"));
if( pass.getProperty("isSave").equals("1") ) {
if( !pass.getProperty("password").equals("") ) {
passwordField.setText(pass.getProperty("password"));
//自动登录
if( pass.getProperty("autoLog").equals("1")) {
autoLog.setSelected(true);
logIn();
} else {
autoLog.setSelected(false);
}
}
checkPassword.setSelected(true);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
passwordFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void saveInfor() {
try {
FileOutputStream passwordFile = new FileOutputStream("password.properties");
pass.setProperty("username", accountField.getText());
if(autoLog.isSelected() ) {
pass.setProperty("autoLog","1");
isAutoLog = true;
} else {
pass.setProperty("autoLog","0");
}
if( checkPassword.isSelected() ) {
pass.setProperty("password", passwordField.getText());
} else {
}
if( checkPassword.isSelected() ) {
pass.setProperty("isSave","1");
} else {
pass.setProperty("isSave","0");
}
pass.store(passwordFile, null);
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
passwordFile.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
public void setLogo() {
String sql = "select count(*) from user where username = ?";
try {
con = JDBCTools.getConnection("jdbc.properties");
ps = con.prepareStatement(sql);
ps.setString(1, accountField.getText() == null ? "" : accountField.getText());
rs = ps.executeQuery();
rs.next();
int i = rs.getInt(1);
if (i == 1 ) {
sql = "select img from user where username = ?";
JDBCTools.release(ps, null, rs);
ps = con.prepareStatement(sql);
ps.setString(1, accountField.getText());
FileTools.readDB2Image(con, tempPath + accountField.getText() + ".jpg", ps);
FileInputStream f = new FileInputStream(tempPath+ accountField.getText() + ".jpg");
logoImage.setImage(new Image(f));
f.close();
} else {
logoImage.setImage(null);
}
saveInfor();
} catch (IOException e) {
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} finally {
JDBCTools.release(ps, null, rs);
}
}
private Writer Writer() {
return null;
}
public static void main(String[] args) {
launch(args);
}
}
其它
- 源码下载
关注下方公众号,选择开源项目菜单
-
欢迎加入交流群:451826376
-
更多信息:www.itcourse.top
网友评论