目录
Alert进阶
Alert 的基本使用
public Alert(Alert.AlertType,String,ButtonType...) {
分析 Alert 的构造函数:
第一个参数,弹框的类型,主要是图标的不同。
第二个参数,弹框的提示信息
第三个参数,一个按钮可变数组,用于弹框下方显示的按钮
public static final ButtonType APPLY;
public static final ButtonType OK;
public static final ButtonType CANCEL;
public static final ButtonType CLOSE;
public static final ButtonType YES;
public static final ButtonType NO;
public static final ButtonType FINISH;
public static final ButtonType NEXT;
public static final ButtonType PREVIOUS;
可以通过给构造函数中传入多个按钮来自定义弹框
Alert alert = new Alert(Alert.AlertType.ERROR, "登录失败,请重 试",ButtonType.OK,ButtonType.NO,ButtonType.CLOSE);
当调用了弹框的 showAndWait() 方法后,我们会接收到弹框被调用的按钮,
Optional type = alert.showAndWait();
我们只要做判断,就可以知道选择的按钮了,然后在执行相关的操作
if(type.get()==ButtonType.OK){
}
if(type.get()==ButtonType.NO){
}
if(type.get()==ButtonType.CLOSE){
}
切换与新开
前往登录 按钮设置点击事件,目的是点击它能够打开注册界面,了解如何进行页面新开与跳转
场景切换
根据之前的介绍,FX的构成部分分为
Stage 舞台
Scene 场景,可以理解为舞台上的节目,一个舞台可以呈现多个节目,对于场景的切换,就是将舞台的场景进行重新设置 setScene(Scene) 就可以完成了
可以通过代码来实践: 构建两个场景,分别放置不同的内容
FlowPane flow01=new FlowPane();
Label l1 = new Label("我是场景一");
flow01.getChildren().add(l1);
Scene s1 = new Scene(flow01);
FlowPane flow02=new FlowPane();
Label l2 = new Label("我是场景二");
flow02.getChildren().add(l2);
Scene s2 = new Scene(flow02);
给场景一放置一个按钮控件,当我们点击按钮的时候,将舞台场景切换为场景二
Button btn=new Button("切换场景二");
btn.setOnAction(a->{ primaryStage.setScene(s2);
});
flow01.getChildren().add(btn);
设置场景一为默认显示
primaryStage.setScene(s1);
默认视图:
@Override
public void start(Stage primaryStage) throws Exception {
FlowPane flow01=new FlowPane();
Label l1 = new Label("我是场景一");
flow01.getChildren().add(l1);
Scene s1 = new Scene(flow01);
FlowPane flow02=new FlowPane();
Label l2 = new Label("我是场景二");
flow02.getChildren().add(l2);
Scene s2 = new Scene(flow02);
Button btn=new Button("切换场景二");
btn.setOnAction(a->{
primaryStage.setScene(s2);
});
flow01.getChildren().add(btn);
primaryStage.setScene(s1);
primaryStage.show(); }
新开窗口Stage 和 Scene
一个 Stage 就是一个窗口, Scene 就是该窗口中显示的内容,如果需要新开一个窗口,那就意味存在多个舞台 Stage 完成功能:点击按钮新开注册页面
编写登录页面 前往注册 点击事件
此处会出来两个界面 ,如果需要关闭登录界面,可以调用 对应舞台的 close() 方法
primaryStage.close();
首页搭建
布局分析
结构对比
所以搭建整体布局为:边框布局
BorderPane borderPane = new BorderPane();
顶部
需要放入多个控件,且位于一行,可以选择 FlowPane 或者 HBOX
中部
这个部位是表格控件 TableView
TableView tableView = new TableView();
borderPane.setCenter(tableView);
表中无列
需要为表格设置列 TableColumn
TableColumn c1 = new TableColumn("学生编号");
TableColumn c2 = new TableColumn("学生名字");
TableColumn c3 = new TableColumn("学生密码");
TableColumn c4 = new TableColumn("学生性别");
TableColumn c5 = new TableColumn("学生地址");
TableColumn c6 = new TableColumn("学生爱好");
将列绑定到表格控件中
tableView.getColumns().addAll(c1, c2, c3, c4, c5, c6);
表格控件
列值处理器
表格控件的数据可以来源于 List 集合,所以我们可以选择从数据库查询出来的学生 Student 对象集合
//StudentDao
public List list(){
//此处省略代码
}
从 Dao 层拿到学生集合之后,需要将该集合中的数据绑定到表格控件中,所以我们需要给该控件的列进行代码设置
其中, new PropertyValueFactory(xx) 这行代码会自动帮助我们从学生对象中取值对应的属性,我们只需要改变列的名称与对 应的属性值 xx 即可完成数据显示
数据绑定
需要注意的点: 绑定数据的方式
未指定泛型时候,必须使用 FXCollections.observableList(list) 对普通的List进行转换才能被表格所识别 ,指定了泛型后,可以直接使用 addAll() 方法合并集合
强烈要求:在 TableView 后面指定遍历数据的类型,如 TableView
自定义列值处理器
此处定义在这里是为了进行拓展,可自行选择是否需要了解 自定义列
TableColumn c7 = new TableColumn("我是拓展列");
需要在 TableColumn 后面指定:
- 第一个?指的是数据集合的类型,比如List就可以替换为Student
- 第二个String指的该列显示的数据类型
自定义列处理器
c7.setCellValueFactory(row->{
return new ReadOnlyStringWrapper("我是自定义信息");
});
底部
与顶部类似
完成老师管理学生的功能
需求
首先需要一个老师类,学生类,DBHelper类,Dao类,登录界面,注册界面,学生管理界面
新建 MyLogin.java ,完成登录界面排版
完整代码
注册页面搭建
使用网格布局搭建页面
完整代码
学生管理界面
完整代码
Dao类
完整代码
学生类(student)
代码,提供get,set方法tostring方法,无参,有参方法。。。
老师类(teacher)
代码,提供get,set方法tostring方法,无参,有参方法。。。
DBHelpes类
完整代码