高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(一)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(二)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(三)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(四)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(五)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(六)
[高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(七)](当前位置)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(八)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(九)
项目效果图
![]() |
![]() |
![]() |
![]() |
![]() |
功能点实现
- 实现学生信息的录入
- 实现学生信息的修改
- 实现学生信息的更新
- 实现学生信息的删除
- 添加快捷键使用,方便快速管理
- 使用javafx+fxml+css控制ui样式
- 实现以javafx内部api调用绘制字体特效,无需额外资源调度
- 实现软件图标自定义,增加软件美观度
- 实现拖动窗口即可移动,使更加人性化
- 实现软件英文化,增加可交流性
- 禁用窗口缩放功能,防止ui碰撞
- 添加作者、主页、关闭按钮
- 增加事务弹窗,给予正确提示及错误解决方案
内部优化
- 使用分装思想,将功能块拆分,设立CreateMenu类,统一添加
- 封装错误与信息提示框,统一布局格式
- 封装数据库连接类,无需重复调度
- 采用Lambda表达式绑定事件,无需重写类
- 使用fxml模块化设计标签,方便增改
- 采用css设置样式,统一管理
- 去除不必要的类public,增加软件安全性
- 利用SceneBuilder绘制生成fxml控件,提升编写效率
- 采用不同尺寸图标格式适应多种运行状态
类结构示例
书写具体的操作逻辑
还记得在Entry中我们写了如下代码:
详见:
package system;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.TextField;
import java.io.IOException;
public class Entry {
@FXML
TextField Number;
@FXML
TextField Name;
@FXML
TextField Gender;
@FXML
TextField Address;
@FXML
TextField Phone;
@FXML
TextField Major;
//不能写构造函数
@FXML
void SignInButtonAction(ActionEvent event) {
}
@FXML
void ResetButtonAction(ActionEvent event){
}
Parent createNode() throws IOException {
return FXMLLoader.load(getClass().getResource("../source/EntryFxml.fxml"));
}
}
1、书写重置按钮事件
重置就是把每个文本框里面的东西都清除掉,由于插入完成之后也需要把里面的字都清除掉,所以我们直接拉出来写个函数就行了
@FXML
void ResetButtonAction(ActionEvent event){
clearText();
}
而clearText()函数如下:
意思很简单就是把所有的都清除掉,但是要注意,要保证Number、Name等,那些都是fxml里面的,已经接好头的
private void clearText(){
Number.clear();
Name.clear();
Gender.clear();
Address.clear();
Phone.clear();
Major.clear();
}
2、书写插入事件按钮
点击插入时,我们把文本框中的数据保存到数据库中
- 我们做一次判断,如果没有填学号,那么就不能进行插入
- 我们上一次创建了一个专门显示错误信息的类,那么,我们可以直接弹出一个框,告诉用户错误
- Number.getText()获取Number文本框中的数据
- 否则的话,我们执行else里面的东西,我们在这里又建立了一个entrySQL方法,用来执行语句,因为都写到一块,太臃肿了
@FXML
void SignInButtonAction(ActionEvent event) throws SQLException {
if(Number.getText().length() == 0){
new MassageError().show("Entry Error!","Student Number Is Not Null,Please Input Student Number.");
}
else {
entrySQL(Number.getText(),Name.getText(),Gender.getText(),Address.getText(),Phone.getText(),Major.getText());
}
}
3、最后的工作
现在看来,我们万事俱备了,就剩下entrySQL就可以工作了
我们首先写一个方法,把数据传进来:
private void entrySQL(String Number, String Name, String Gender, String Address, String Phone, String Major) throws SQLException {
}
还记得上一章的连接数据库的函数吗,那个函数最后返回了一个statement ,有了这个我们就非常方便的连接数据库了
Statement statement = new ConnectSQL().connectSQL();
这样,我们就已经连接好了数据库
接下来,我们写一条SQL语句,插入数据就是:
insert into 表名 values("","","","","","","");
注意: 我建立了一个student 的表,你可以自己建立一个表
我们把SQL做成一个String语句
final String sql = "insert into student values('" + Number + "','" + Name + "','" + Gender + "','" + Address + "','" + Phone + "','" + Major + "');";
这时,我们调用一下执行就可以了
statement.executeUpdate(sql)
合起来就是:
private void entrySQL(String Number, String Name, String Gender, String Address, String Phone, String Major) throws SQLException {
Statement statement = new ConnectSQL().connectSQL();
assert statement != null;
final String sql = "insert into student values('" + Number + "','" + Name + "','" + Gender + "','" + Address + "','" + Phone + "','" + Major + "');";
statement.executeUpdate(sql);
}
4、一些优化
当我们插入成功的时候,我们弹出一条消息,告知用户成功了,要判断插入成功与失败,我们只要看statement.executeUpdate(sql);最后返回的值就行了
if(statement.executeUpdate(sql) > 0){
new MassageInformation().show("Entry Successfully!",sql);
}else{
new MassageError().show("Entry Error!","Insert Error,Maybe The Table Is Restricted");
}
其中MassageInformation是我又新建的一个类,专门用来显示一些信息
public class MassageInformation {
void show(String HeaderText,String ContentText){
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("information");
alert.setHeaderText(HeaderText);
alert.setContentText(ContentText);
alert.show();
}
}
在完成时候,我们应该把流关掉,否则我们不能继续使用了
statement.getConnection().close();
最后,我们要把文本框里面的内容清除掉:
clearText();
5、效果图
我们输入一写些文字,点击Sign In来进行录入操作
我们将会看到激动人心的提示Successfully!!!!
回过头来我们看数据库里面,已经插入了数据
6、完整代码
entrySQL代码:
private void entrySQL(String Number, String Name, String Gender, String Address, String Phone, String Major) throws SQLException {
Statement statement = new ConnectSQL().connectSQL();
assert statement != null;
final String sql = "insert into student values('" + Number + "','" + Name + "','" + Gender + "','" + Address + "','" + Phone + "','" + Major + "');";
if(statement.executeUpdate(sql) > 0){
new MassageInformation().show("Entry Successfully!",sql);
}else{
new MassageError().show("Entry Error!","Insert Error,Maybe The Table Is Restricted");
}
statement.getConnection().close();
clearText();
}
Entry类完整代码:
package system;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.TextField;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Statement;
public class Entry {
@FXML
TextField Number;
@FXML
TextField Name;
@FXML
TextField Gender;
@FXML
TextField Address;
@FXML
TextField Phone;
@FXML
TextField Major;
//不能写构造函数
@FXML
void SignInButtonAction(ActionEvent event) throws SQLException {
if(Number.getText().length() == 0){
new MassageError().show("Entry Error!","Student Number Is Not Null,Please Input Student Number.");
}
else {
entrySQL(Number.getText(),Name.getText(),Gender.getText(),Address.getText(),Phone.getText(),Major.getText());
}
}
@FXML
void ResetButtonAction(ActionEvent event){
clearText();
}
private void entrySQL(String Number, String Name, String Gender, String Address, String Phone, String Major) throws SQLException {
Statement statement = new ConnectSQL().connectSQL();
assert statement != null;
final String sql = "insert into student values('" + Number + "','" + Name + "','" + Gender + "','" + Address + "','" + Phone + "','" + Major + "');";
if(statement.executeUpdate(sql) > 0){
new MassageInformation().show("Entry Successfully!",sql);
}else{
new MassageError().show("Entry Error!","Insert Error,Maybe The Table Is Restricted");
}
statement.getConnection().close();
clearText();
}
private void clearText(){
Number.clear();
Name.clear();
Gender.clear();
Address.clear();
Phone.clear();
Major.clear();
}
Parent createNode() throws IOException {
return FXMLLoader.load(getClass().getResource("../source/EntryFxml.fxml"));
}
}
关注后续章节,我们会添加更多功能:
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(一)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(二)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(三)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(四)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(五)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(六)
[高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(七)](当前位置)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(八)
高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(九)
后记
更多项目逐句吐血精讲在这里,加油ヾ(◍°∇°◍)ノ゙!!
C语言飞机大战小游戏(2万字!完整精讲解版+源代码)
Markdown 6334 字数 243 行数 当前行 216, 当前列 17 文章已保存12:24:37 HTML 4288 字数 158 段落