9:高颜值JavaFX数据库-九讲之九
高颜值数据库项目实战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控件,提升编写效率
- 采用不同尺寸图标格式适应多种运行状态
类结构示例
最后的优化
注册事件
我们为了提高用户体验,我们添加了拖动事件监听,也就是用鼠标拖动窗口中的任何部分拖动,窗口都会动,非常不错的功能
- 我们在主类中添加一段代码,我的主类是Management,大家自行添加
- 我们引用了DragWindowHandler类,我们稍后创建
EventHandler<MouseEvent> handler = new DragWindowHandler(primaryStage);
scene.setOnMousePressed(handler);
scene.setOnMouseDragged(handler);
我们要把这段代码添加到start方法中
@Override
public void start(Stage primaryStage) throws Exception {
Scene scene = createScene();
primaryStage.setScene(scene);
primaryStage.setTitle("Student Information Management System");
primaryStage.setResizable(false);
primaryStage.getIcons().add(new Image(Management.class.getResourceAsStream("/source/UniversityTable.png")));
EventHandler<MouseEvent> handler = new DragWindowHandler(primaryStage);
scene.setOnMousePressed(handler);
scene.setOnMouseDragged(handler);
primaryStage.show();
}
创建DragWindowHandler类
建立DragWindowHandler类
我们建立DragWindowHandler类
- 我们的类要实现 EventHandler,从而进行控制鼠标拖动
package system;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
class DragWindowHandler implements EventHandler<MouseEvent> {
}
写构造方法
将将要操作的Stage传进来
package system;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
class DragWindowHandler implements EventHandler<MouseEvent> {
private Stage primaryStage;
DragWindowHandler(Stage primaryStage) {
this.primaryStage = primaryStage;
}
}
定义一些位置信息
private double oldStageX;
private double oldStageY;
private double oldScreenX;
private double oldScreenY;
重写handle方法
记录上次的位置,然后实时改变现在的位置
@Override
public void handle(MouseEvent e) {
if (e.getEventType() == MouseEvent.MOUSE_PRESSED) {
this.oldStageX = this.primaryStage.getX();
this.oldStageY = this.primaryStage.getY();
this.oldScreenX = e.getScreenX();
this.oldScreenY = e.getScreenY();
} else if (e.getEventType() == MouseEvent.MOUSE_DRAGGED) {
this.primaryStage.setX(e.getScreenX() - this.oldScreenX + this.oldStageX);
this.primaryStage.setY(e.getScreenY() - this.oldScreenY + this.oldStageY);
}
}
最终DragWindowHandler代码
package system;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
class DragWindowHandler implements EventHandler<MouseEvent> {
private Stage primaryStage;
private double oldStageX;
private double oldStageY;
private double oldScreenX;
private double oldScreenY;
DragWindowHandler(Stage primaryStage) {
this.primaryStage = primaryStage;
}
@Override
public void handle(MouseEvent e) {
if (e.getEventType() == MouseEvent.MOUSE_PRESSED) {
this.oldStageX = this.primaryStage.getX();
this.oldStageY = this.primaryStage.getY();
this.oldScreenX = e.getScreenX();
this.oldScreenY = e.getScreenY();
} else if (e.getEventType() == MouseEvent.MOUSE_DRAGGED) {
this.primaryStage.setX(e.getScreenX() - this.oldScreenX + this.oldStageX);
this.primaryStage.setY(e.getScreenY() - this.oldScreenY + this.oldStageY);
}
}
}
这样我们就可以实现拖拽了,鼠标不必天机上方的标题进行拖拽,直接拖动Stage就可以了
我们成功了Successfully!!!
最后,非常感谢小伙伴能够一直陪伴走完这美妙的旅途,希望在未来的编程道路上,不做程序员,要做软件设计艺术家!!!
所有文章:
高颜值数据库项目实战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(完整精讲解版+源代码)(九)