高颜值数据库项目实战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(完整精讲解版+源代码)(八)

高颜值数据库项目实战MySQL+JavaFX+Fxml+CSS(完整精讲解版+源代码)(九)

更多项目逐句吐血精讲在这里,加油ヾ(◍°∇°◍)ノ゙!!

项目效果图

功能点实现

  1. 实现学生信息的录入
  2. 实现学生信息的修改
  3. 实现学生信息的更新
  4. 实现学生信息的删除
  5. 添加快捷键使用,方便快速管理
  6. 使用javafx+fxml+css控制ui样式
  7. 实现以javafx内部api调用绘制字体特效,无需额外资源调度
  8. 实现软件图标自定义,增加软件美观度
  9. 实现拖动窗口即可移动,使更加人性化
  10. 实现软件英文化,增加可交流性
  11. 禁用窗口缩放功能,防止ui碰撞
  12. 添加作者、主页、关闭按钮
  13. 增加事务弹窗,给予正确提示及错误解决方案

内部优化

  1. 使用分装思想,将功能块拆分,设立CreateMenu类,统一添加
  2. 封装错误与信息提示框,统一布局格式
  3. 封装数据库连接类,无需重复调度
  4. 采用Lambda表达式绑定事件,无需重写类
  5. 使用fxml模块化设计标签,方便增改
  6. 采用css设置样式,统一管理
  7. 去除不必要的类public,增加软件安全性
  8. 利用SceneBuilder绘制生成fxml控件,提升编写效率
  9. 采用不同尺寸图标格式适应多种运行状态

类结构示例

在这里插入图片描述

书写具体的操作逻辑

还记得在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 段落

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值