网格布局


将整个面板划分为若干个格子 , 每个格子的大小是一样的 , 每个格子中可以放置一个控件(布局) , 类似于表格的方式。在网格布局


中放入控件的时候 , 还需要指定位置。


我们将要排出这个布局 , 也就是登陆页面的优化版本


位置原理讲解


以网格布局的思维来拆分该布局 , 可以分出一个 2*3 的网格


GridPane gridPane = new GridPane (); 我们可以给格子从上到下 , 从左到右依次编号 , 分别是:


得出结论:


位置 a,b 其中 a 向右移动需要变大 , 向下移动则 b 需要变大


且 a,b 都从 0 开始增长


代码讲解


// 
 新建文本标签:用户名 
 
Label l1 = new Label(" 
 用户名 
 "); 
 
// 
 新建输入框 
 
TextField name = new TextField(" 
 请输入用户名 
 "); 
 
// 
 新建文本标签:用户密码 
 
Label l2 = new Label(" 
 用户密码 
 "); 
 
// 
 新建密码框 
 
PasswordField pwd = new PasswordField(); 
 
// 
 登录按钮的创建 
 
Button login = new Button(" 
 登录 
 "); 
 
// 
 指定位置:按照之前的位置图进行对比并完成位置推理 
 
gridPane.add(l1, 0, 0); 
 gridPane.add(name, 1, 0); 
 
gridPane.add(l2, 0, 1); 
 
gridPane.add(pwd, 1, 1); 
 
gridPane.add(login, 0, 2); 
 
网格布局中的网格是默认居左上的 
 
可以通过代码调整其网格位置 
 
// 
 设置居中方式 
 
gridPane 
 . 
 setAlignment 
 ( 
 Pos 
 . 
 CENTER 
 ); 
 
Pos  
 类中定义了一些居中方式 
 
public enum  
 Pos  
 { 
 
TOP_LEFT  
 左上 
 
TOP_CENTER  
 居上 
 
TOP_RIGHT  
 右上 
 
CENTER_LEFT  
 居左 
 
CENTER  
 居中 
 
CENTER_RIGHT  
 居右 
 
BOTTOM_LEFT  
 左下 
 
BOTTOM_CENTER  
 居下 
 
BOTTOM_RIGHT  
 右下 
 
} 
 可以观察到每个控件之间挨得太近了 
 , 
 可以使用代码将距离调整开


完整代码


gridPane 
 . 
 setHgap 
 ( 
 10 
 ); 
 // 
 两个格子之间的水平距离 
 
gridPane 
 . 
 setVgap 
 ( 
 10 
 ); 
 // 
 两个各自之间的垂直距离 
 
@Override 
 
public  
 void  
 start 
 ( 
 Stage primaryStage 
 )  
 throws  
 IOException  
 { 
 
// 
 新建布局 
 
GridPane gridPane  
 =  
 new  
 GridPane 
 (); 
 
// 
 设置居中方式 
 
gridPane 
 . 
 setAlignment 
 ( 
 Pos 
 . 
 CENTER 
 ); 
 
// 
 调整间隙 
 
gridPane 
 . 
 setHgap 
 ( 
 10 
 ); 
 
gridPane 
 . 
 setVgap 
 ( 
 10 
 ); 
 
// 
 新建文本标签:用户名 
 
Label l1  
 =  
 new  
 Label 
 ( 
 " 
 用户名 
 " 
 ); 
 
// 
 新建输入框 
 
TextField name  
 =  
 new  
 TextField 
 ( 
 " 
 请输入用户名 
 " 
 ); 
 
// 
 新建文本标签:用户密码 
 
Label l2  
 =  
 new  
 Label 
 ( 
 " 
 用户密码 
 " 
 ); 
 
// 
 新建密码框 
 
PasswordField pwd  
 =  
 new  
 PasswordField 
 (); 
 
// 
 登录按钮的创建 
 
Button login  
 =  
 new  
 Button 
 ( 
 " 
 登录 
 " 
 ); 
 
// 
 添加控件进行位置绑定 
 
gridPane 
 . 
 add 
 ( 
 l1 
 ,  
 0 
 ,  
 0 
 ); 
 注册页面案例制作


分析布局


分析控件


用户名 输入框 TextField


用户密码 密码框 PasswordField


用户性别 单选框 RadioButton


用户地址 下拉框 ChoiceBox


用户爱好 复选框 CheckBox


注册 , 取消 按钮 Button


控件讲解


单选框的使用


构建单选框


这样的单选框是无法实现单选功能的 , 只有当单选按钮在一组的时候才能完成单选功能


gridPane 
 . 
 add 
 ( 
 name 
 ,  
 1 
 ,  
 0 
 ); 
 
gridPane 
 . 
 add 
 ( 
 l2 
 ,  
 0 
 ,  
 1 
 ); 
 
gridPane 
 . 
 add 
 ( 
 pwd 
 ,  
 1 
 ,  
 1 
 ); 
 
gridPane 
 . 
 add 
 ( 
 login 
 ,  
 0 
 ,  
 2 
 ); 
 
// 
 生成场景并完成布局绑定 
 , 
 同时设定场景大小 
 
Scene scene  
 =  
 new  
 Scene 
 ( 
 gridPane 
 ,  
 300 
 ,  
 200 
 ); 
 
// 
 主容器标题设置 
 
primaryStage 
 . 
 setTitle 
 ( 
 " 
 网格登录 
 " 
 ); 
 
// 
 给主容器绑定场景(让场景显示出来) 
 
primaryStage 
 . 
 setScene 
 ( 
 scene 
 ); 
 
// 
 不要忘了这一行 
 , 
 让主容器显示 
 
primaryStage 
 . 
 show 
 (); 
 
}
 
RadioButton men  
 =  
 new  
 RadioButton 
 ( 
 " 
 🚹 
 " 
 ); 
 
RadioButton miss  
 =  
 new  
 RadioButton 
 ( 
 " 
 🚺 
 " 
 ); 
 
ToggleGroup group = new ToggleGroup();// 
 构建单选按钮组 
 设置两个按钮为一组


完整代码


下拉框的使用


下拉框的选项是一个 ObservableList , 所以我们是无法直接向其中添加文本作为下拉框选项 , 需要进行代码改造


1. 将文本内容放到 List 集合中


2. 将 List 集合转换成一个 ObservableList


3. 通过构造方法或者是 setItems 方法给下拉框设置选项


RadioButton men = new RadioButton(" 
 🚹 
 "); 
 
RadioButton miss = new RadioButton(" 
 🚺 
 "); 
 
ToggleGroup group = new ToggleGroup(); 
 
// 
 实现单选功能 
 
men.setToggleGroup(group); 
 
miss.setToggleGroup(group); 
 
@Override 
 
public  
 void  
 start 
 ( 
 Stage primaryStage 
 )  
 throws  
 Exception  
 { 
 
FlowPane flowPane  
 =  
 new  
 FlowPane 
 (); 
 
ToggleGroup group  
 =  
 new  
 ToggleGroup 
 (); 
 
RadioButton men  
 =  
 new  
 RadioButton 
 ( 
 " 
 🚹 
 " 
 ); 
 
RadioButton miss  
 =  
 new  
 RadioButton 
 ( 
 " 
 🚺 
 " 
 ); 
 
men 
 . 
 setToggleGroup 
 ( 
 group 
 ); 
 
miss 
 . 
 setToggleGroup 
 ( 
 group 
 ); 
 
flowPane 
 . 
 getChildren 
 (). 
 addAll 
 ( 
 men 
 ,  
 miss 
 ); 
 
Scene scene  
 =  
 new  
 Scene 
 ( 
 flowPane 
 ,  
 300 
 ,  
 100 
 ); 
 
primaryStage 
 . 
 setScene 
 ( 
 scene 
 ); 
 
primaryStage 
 . 
 show 
 (); 
 
}
 
ChoiceBox choiceBox  
 =  
 new  
 ChoiceBox 
 (); 
 // 
 定义下拉框内容集合 
 
List 
 < 
 String 
 >  
 items  
 =  
 Arrays 
 . 
 asList 
 ( 
 " 
 湖南省 
 " 
 ,  
 " 
 四川省 
 " 
 ,  
 " 
 湖北省 
 " 
 ); 
 
// 
 转换成下拉框需要的数据集合 
 
ObservableList 
 < 
 String 
 >  
 items  
 =  
 FXCollections 
 . 
 observableList 
 ( 
 list 
 ); 
 
// 
 通过构造方法设置选项 
 
ChoiceBox choiceBox  
 =  
 new  
 ChoiceBox 
 ( 
 items 
 ); 
 
因为  
 ObservableList  
 也是一个 
 List 
 集合 
 , 
 我们也可以直接调用  
 add  
 方法为其添加选项 
 
ChoiceBox choiceBox  
 =  
 new  
 ChoiceBox 
 (); 
 
choiceBox 
 . 
 getItems 
 (). 
 add 
 ( 
 " 
 湖南省 
 " 
 ); 
 
choiceBox 
 . 
 getItems 
 (). 
 add 
 ( 
 " 
 四川省 
 " 
 ); 
 
choiceBox 
 . 
 getItems 
 (). 
 add 
 ( 
 " 
 湖北省 
 " 
 ); 
 
重点:我们还可以给下拉框对象设置泛型,从而可以实现超简易写法 
 
ChoiceBox<String> choiceBox = new ChoiceBox<String>(); 
 
请同学们注意,  
 getItems()  
 方法得到的是一个  
 ObservableList  
 ,我们讲解过的  
 List  
 方法它也都能使用 
 
choiceBox 
 . 
 getItems 
 (). 
 addAll 
 ( 
 " 
 湖南省 
 " 
 , 
 " 
 四川省 
 " 
 , 
 " 
 湖北省 
 " 
 ); 
 
运行之后可以观察到下拉框中默认是没有选中值的 
 , 
 可以通过方法设置其下拉框默认选中 
 
choiceBox 
 . 
 setValue 
 ( 
 " 
 湖南省 
 " 
 );


也可容易通过方法来获得下拉框中被选中的选项与选项下标 还可以通过 getValue() 来获得下拉框选中的值


完整代码


复选框的使用


对于复选框和单选框 , 都可以通过 setSelected(boolean) 来设置选中状态 , 通过 isSelected() 来获取选中状态


完整代码


// 
 被选中选项的下标 
 
int  
 selectedIndex  
 =  
 choiceBox 
 . 
 getSelectionModel 
 (). 
 getSelectedIndex 
 (); 
 
// 
 被选中的选项 
 
String  
 selectedItem  
 =  
 choiceBox 
 . 
 getSelectionModel 
 (). 
 getSelectedItem 
 (); 
 
String  
 value  
 =  
 choiceBox 
 . 
 getValue 
 (); 
 
@Override 
 
public  
 void  
 start 
 ( 
 Stage primaryStage 
 )  
 throws  
 Exception  
 { 
 
FlowPane flowPane  
 =  
 new  
 FlowPane 
 (); 
 
ChoiceBox 
 < 
 String 
 >  
 choiceBox  
 =  
 new  
 ChoiceBox 
 < 
 String 
 > 
 (); 
 
choiceBox 
 . 
 getItems 
 (). 
 addAll 
 ( 
 " 
 湖南省 
 " 
 , 
 " 
 四川省 
 " 
 , 
 " 
 湖北省 
 " 
 ); 
 
choiceBox 
 . 
 setValue 
 ( 
 " 
 湖南省 
 " 
 ); 
 
flowPane 
 . 
 getChildren 
 (). 
 add 
 ( 
 choiceBox 
 ); 
 
Scene scene  
 =  
 new  
 Scene 
 ( 
 flowPane 
 ,  
 300 
 ,  
 100 
 ); 
 
primaryStage 
 . 
 setScene 
 ( 
 scene 
 ); 
 
primaryStage 
 . 
 show 
 (); 
 
}
 
CheckBox checkBox  
 =  
 new  
 CheckBox 
 ( 
 " 
 打篮球 
 " 
 ); 
 
CheckBox c1  
 =  
 new  
 CheckBox 
 ( 
 " 
 打篮球 
 " 
 ); 
 
CheckBox c2  
 =  
 new  
 CheckBox 
 ( 
 " 
 打游戏 
 " 
 ); 
 
CheckBox c3  
 =  
 new  
 CheckBox 
 ( 
 " 
 打豆豆 
 " 
 ); 
 页面制作


布局设置


文本控件设置


输入框控件设置


单选框设置


因为按钮的个数不一致 , 导致使用网格布局的时候会出现计算位置比较麻烦的情况 , 我们可以这么做:将多个控件放到一个布局中 ,


再把布局对象当成组件放到对应的网格中


这里我们可以采用流式布局 , 也可以采用 HBox 布局: 在这个布局中 , 控件都显示为一行


@Override 
 
public  
 void  
 start 
 ( 
 Stage primaryStage 
 )  
 throws  
 Exception  
 { 
 
FlowPane flowPane  
 =  
 new  
 FlowPane 
 (); 
 
CheckBox c1  
 =  
 new  
 CheckBox 
 ( 
 " 
 打篮球 
 " 
 ); 
 
CheckBox c2  
 =  
 new  
 CheckBox 
 ( 
 " 
 打游戏 
 " 
 ); 
 
CheckBox c3  
 =  
 new  
 CheckBox 
 ( 
 " 
 打豆豆 
 " 
 ); 
 
flowPane 
 . 
 getChildren 
 (). 
 addAll 
 ( 
 c1 
 ,  
 c2 
 ,  
 c3 
 ); 
 
Scene scene  
 =  
 new  
 Scene 
 ( 
 flowPane 
 ,  
 300 
 ,  
 100 
 ); 
 
primaryStage 
 . 
 setScene 
 ( 
 scene 
 ); 
 
primaryStage 
 . 
 show 
 (); 
 
}
 
// 
 新建布局 
 
GridPane gridPane  
 =  
 new  
 GridPane 
 (); 
 
// 
 设置居中方式 
 
gridPane 
 . 
 setAlignment 
 ( 
 Pos 
 . 
 CENTER 
 ); 
 
// 
 调整间隙 
 
gridPane 
 . 
 setHgap 
 ( 
 10 
 ); 
 
gridPane 
 . 
 setVgap 
 ( 
 10 
 ); 
 
// 
 文本标签 
 
Label l1  
 =  
 new  
 Label 
 ( 
 " 
 用户名 
 " 
 ); 
 
Label l2  
 =  
 new  
 Label 
 ( 
 " 
 用户密码 
 " 
 ); 
 
Label l3  
 =  
 new  
 Label 
 ( 
 " 
 用户性别 
 " 
 ); 
 
Label l4  
 =  
 new  
 Label 
 ( 
 " 
 用户地址 
 " 
 ); 
 
Label l5  
 =  
 new  
 Label 
 ( 
 " 
 用户爱好 
 " 
 ); 
 
TextField f1  
 =  
 new  
 TextField 
 (); 
 // 
 用户名 
 
PasswordField f2  
 =  
 new  
 PasswordField 
 (); 
 // 
 用户密码 
 
ToggleGroup group  
 =  
 new  
 ToggleGroup 
 (); 
 // 
 按钮组 
 
RadioButton men  
 =  
 new  
 RadioButton 
 ( 
 " 
 🚹 
 " 
 ); 
 // 
 男 
 
RadioButton miss  
 =  
 new  
 RadioButton 
 ( 
 " 
 🚺 
 " 
 ); 
 // 
 女 
 
men 
 . 
 setToggleGroup 
 ( 
 group 
 ); 
 // 
 添加到按钮组 
 , 
 实现单选 
 
miss 
 . 
 setToggleGroup 
 ( 
 group 
 ); 
 // 
 添加到按钮组 
 , 
 实现单选 
 
men 
 . 
 setSelected 
 ( 
 true 
 ); 
 // 
 设置默认选中男 
 , 
 防止用户不选的情况 
 下拉框设置


复选框设置


可以选择和单选框一样的做法


按钮设置


控件与网格绑定


HBox h1  
 =  
 new  
 HBox 
 (); 
 
h1 
 . 
 getChildren 
 (). 
 addAll 
 ( 
 men 
 ,  
 miss 
 ); 
 
// 
 构建选项集合 
 
List 
 < 
 String 
 >  
 list  
 =  
 Arrays 
 . 
 asList 
 ( 
 " 
 湖南省 
 " 
 ,  
 " 
 四川省 
 " 
 ,  
 " 
 湖北省 
 " 
 ); 
 
// 
 生成并设置下拉框选项 
 
ChoiceBox 
 < 
 String 
 >  
 choiceBox  
 =  
 new  
 ChoiceBox 
 < 
 String 
 > 
 ( 
 items 
 ); 
 
// 
 这里替换成数据库的集合便可以完成数据库值的显示 
 
choiceBox 
 . 
 addAll 
 ( 
 list 
 ); 
 
// 
 设置下拉框默认值 
 
choiceBox 
 . 
 setValue 
 ( 
 list 
 . 
 get 
 ( 
 0 
 )); 
 
CheckBox c1  
 =  
 new  
 CheckBox 
 ( 
 " 
 打篮球 
 " 
 ); 
 
CheckBox c2  
 =  
 new  
 CheckBox 
 ( 
 " 
 打游戏 
 " 
 ); 
 
CheckBox c3  
 =  
 new  
 CheckBox 
 ( 
 " 
 打豆豆 
 " 
 ); 
 
HBox h2  
 =  
 new  
 HBox 
 (); 
 
h2 
 . 
 getChildren 
 (). 
 addAll 
 ( 
 c1 
 ,  
 c2 
 ,  
 c3 
 ); 
 
Button register  
 =  
 new  
 Button 
 ( 
 " 
 注册 
 " 
 ); 
 
Button cancel  
 =  
 new  
 Button 
 ( 
 " 
 取消 
 " 
 ); 
 
// 
 用户名 
 
gridPane 
 . 
 add 
 ( 
 l1 
 ,  
 0 
 ,  
 0 
 ); 
 
gridPane 
 . 
 add 
 ( 
 f1 
 ,  
 1 
 ,  
 0 
 ); 
 
// 
 用户密码 
 
gridPane 
 . 
 add 
 ( 
 l2 
 ,  
 0 
 ,  
 1 
 ); 
 
gridPane 
 . 
 add 
 ( 
 f2 
 ,  
 1 
 ,  
 1 
 ); 
 
// 
 用户性别 
 
gridPane 
 . 
 add 
 ( 
 l3 
 ,  
 0 
 ,  
 2 
 ); 
 
gridPane 
 . 
 add 
 ( 
 h1 
 ,  
 1 
 ,  
 2 
 ); 
 
// 
 用户地址 
 
gridPane 
 . 
 add 
 ( 
 l4 
 ,  
 0 
 ,  
 3 
 ); 
 
gridPane 
 . 
 add 
 ( 
 choiceBox 
 ,  
 1 
 ,  
 3 
 ); 
 
// 
 用户爱好 
 
gridPane 
 . 
 add 
 ( 
 l5 
 ,  
 0 
 ,  
 4 
 ); 
 
gridPane 
 . 
 add 
 ( 
 h2 
 ,  
 1 
 ,  
 4 
 ); 
 
// 
 按钮 
 
gridPane 
 . 
 add 
 ( 
 register 
 ,  
 0 
 ,  
 5 
 );


gridPane . add ( cancel , 1 , 5 ); 一定要注意上面的单选框和复选框是放的 HBox 布局对象 , 这两个布局对象中已经放了相应的控件了


完整代码


@Override 
 
public  
 void  
 start 
 ( 
 Stage primaryStage 
 )  
 throws  
 IOException  
 { 
 
// 
 新建布局 
 
GridPane gridPane  
 =  
 new  
 GridPane 
 (); 
 
// 
 设置居中方式 
 
gridPane 
 . 
 setAlignment 
 ( 
 Pos 
 . 
 CENTER 
 ); 
 
// 
 调整间隙 
 
gridPane 
 . 
 setHgap 
 ( 
 10 
 ); 
 
gridPane 
 . 
 setVgap 
 ( 
 10 
 ); 
 
// 
 文本标签 
 
Label l1  
 =  
 new  
 Label 
 ( 
 " 
 用户名 
 " 
 ); 
 
Label l2  
 =  
 new  
 Label 
 ( 
 " 
 用户密码 
 " 
 ); 
 
Label l3  
 =  
 new  
 Label 
 ( 
 " 
 用户性别 
 " 
 ); 
 
Label l4  
 =  
 new  
 Label 
 ( 
 " 
 用户地址 
 " 
 ); 
 
Label l5  
 =  
 new  
 Label 
 ( 
 " 
 用户爱好 
 " 
 ); 
 
// 
 输入框 
 
TextField f1  
 =  
 new  
 TextField 
 (); 
 
PasswordField f2  
 =  
 new  
 PasswordField 
 (); 
 
// 
 性别 
 
ToggleGroup group  
 =  
 new  
 ToggleGroup 
 (); 
 
RadioButton men  
 =  
 new  
 RadioButton 
 ( 
 " 
 🚹 
 " 
 ); 
 
RadioButton miss  
 =  
 new  
 RadioButton 
 ( 
 " 
 🚺 
 " 
 ); 
 
men 
 . 
 setToggleGroup 
 ( 
 group 
 ); 
 
miss 
 . 
 setToggleGroup 
 ( 
 group 
 ); 
 
men 
 . 
 setSelected 
 ( 
 true 
 ); 
 
HBox h1  
 =  
 new  
 HBox 
 (); 
 
h1 
 . 
 getChildren 
 (). 
 addAll 
 ( 
 men 
 ,  
 miss 
 ); 
 
// 
 构建选项集合 
 
List 
 < 
 String 
 >  
 list  
 =  
 Arrays 
 . 
 asList 
 ( 
 " 
 湖南省 
 " 
 ,  
 " 
 四川省 
 " 
 ,  
 " 
 湖北省 
 " 
 ); 
 
// 
 生成并设置下拉框选项 
 
ChoiceBox 
 < 
 String 
 >  
 choiceBox  
 =  
 new  
 ChoiceBox 
 < 
 String 
 > 
 ( 
 items 
 ); 
 
// 
 这里替换成数据库的集合便可以完成数据库值的显示 
 
choiceBox 
 . 
 addAll 
 ( 
 list 
 ); 
 
// 
 设置下拉框默认值 
 
choiceBox 
 . 
 setValue 
 ( 
 list 
 . 
 get 
 ( 
 0 
 )); 
 
// 
 复选框 
 
CheckBox c1  
 =  
 new  
 CheckBox 
 ( 
 " 
 打篮球 
 " 
 ); 
 按钮事件制作


取消按钮


注册按钮


需要在这里获取到对应的值 , 然后带入数据库执行插入操作 , 对于绝大部门控件 , 都可以通过 getText() 获得其中的文本内容 , 下拉


框则需要使用 getValue() 方法 , 而对于单选框与多选框 , 则需要对选中状态进行判断


CheckBox c2  
 =  
 new  
 CheckBox 
 ( 
 " 
 打游戏 
 " 
 ); 
 
CheckBox c3  
 =  
 new  
 CheckBox 
 ( 
 " 
 打豆豆 
 " 
 ); 
 
HBox h2  
 =  
 new  
 HBox 
 (); 
 
h2 
 . 
 getChildren 
 (). 
 addAll 
 ( 
 c1 
 ,  
 c2 
 ,  
 c3 
 ); 
 
// 
 登录按钮的创建 
 
Button register  
 =  
 new  
 Button 
 ( 
 " 
 注册 
 " 
 ); 
 
Button cancel  
 =  
 new  
 Button 
 ( 
 " 
 取消 
 " 
 ); 
 
// 
 用户名 
 
gridPane 
 . 
 add 
 ( 
 l1 
 ,  
 0 
 ,  
 0 
 ); 
 
gridPane 
 . 
 add 
 ( 
 f1 
 ,  
 1 
 ,  
 0 
 ); 
 
// 
 用户密码 
 
gridPane 
 . 
 add 
 ( 
 l2 
 ,  
 0 
 ,  
 1 
 ); 
 
gridPane 
 . 
 add 
 ( 
 f2 
 ,  
 1 
 ,  
 1 
 ); 
 
// 
 用户性别 
 
gridPane 
 . 
 add 
 ( 
 l3 
 ,  
 0 
 ,  
 2 
 ); 
 
gridPane 
 . 
 add 
 ( 
 h1 
 ,  
 1 
 ,  
 2 
 ); 
 
// 
 用户地址 
 
gridPane 
 . 
 add 
 ( 
 l4 
 ,  
 0 
 ,  
 3 
 ); 
 
gridPane 
 . 
 add 
 ( 
 choiceBox 
 ,  
 1 
 ,  
 3 
 ); 
 
// 
 用户爱好 
 
gridPane 
 . 
 add 
 ( 
 l5 
 ,  
 0 
 ,  
 4 
 ); 
 
gridPane 
 . 
 add 
 ( 
 h2 
 ,  
 1 
 ,  
 4 
 ); 
 
// 
 按钮 
 
gridPane 
 . 
 add 
 ( 
 register 
 ,  
 0 
 ,  
 5 
 ); 
 
gridPane 
 . 
 add 
 ( 
 cancel 
 ,  
 1 
 ,  
 5 
 ); 
 
// 
 生成场景并完成布局绑定 
 , 
 同时设定场景大小 
 
Scene scene  
 =  
 new  
 Scene 
 ( 
 gridPane 
 ,  
 300 
 ,  
 200 
 ); 
 
// 
 主容器标题设置 
 
primaryStage 
 . 
 setTitle 
 ( 
 " 
 网格登录 
 " 
 ); 
 
// 
 给主容器绑定场景(让场景显示出来) 
 
primaryStage 
 . 
 setScene 
 ( 
 scene 
 ); 
 
// 
 不要忘了这一行 
 , 
 让主容器显示 
 
primaryStage 
 . 
 show 
 (); 
 
}
 
cancel 
 . 
 setOnAction 
 ( 
 e 
 -> 
 { 
 
Platform 
 . 
 exit 
 (); 
 // 
 退出程序 
 
}); 
 // 
 获得用户名 
 
String  
 username  
 =  
 f1 
 . 
 getText 
 (); 
 
// 
 获得密码 
 
String  
 password  
 =  
 f2 
 . 
 getText 
 (); 
 
// 
 获得性别  
 men 
 男单选框  
 miss 
 女单选框 
 
String  
 gender 
 = 
 " 
 男 
 " 
 ; 
 // 
 默认是选中了男 
 , 
 可以查看上面的代码 
 
if 
 ( 
 miss 
 . 
 isSelected 
 ()){ 
 
gender 
 = 
 " 
 女 
 " 
 ; 
 
}
 
// 
 通过拼接的方式获得所有的爱好 每个爱好以 
 , 
 隔开 
 
StringJoiner joiner  
 =  
 new  
 StringJoiner 
 ( 
 "," 
 ); 
 
// 
 对于复选框而言 
 , 
 如果该复选框被选中 
 , 
 则记录该值 
 
if 
 ( 
 c1 
 . 
 isSelected 
 ()){ 
 
joiner 
 . 
 add 
 ( 
 c1 
 . 
 getText 
 ()); 
 
}
 
if 
 ( 
 c2 
 . 
 isSelected 
 ()){ 
 
joiner 
 . 
 add 
 ( 
 c1 
 . 
 getText 
 ()); 
 
}
 
if 
 ( 
 c3 
 . 
 isSelected 
 ()){ 
 
joiner 
 . 
 add 
 ( 
 c1 
 . 
 getText 
 ()); 
 
}
 
String  
 hobby 
 = 
 joiner 
 . 
 toString 
 (); 
 
可以使用正常的拼接 
 , 
 但是后面会多一个逗号 
 , 
 所以推荐使用  
 StringJoiner  
 该类会帮我们加上自定义的分隔符 
 
// 
 下拉框选中的值 
 
String  
 address  
 =  
 choiceBox 
 . 
 getValue 
 (). 
 toString 
 ();


这里拿到的如果是 Object, 我们需要的地址是 String, 所以请记得调用 toString() 方法


下面就可以去数据库访问了 ( ● ' ◡ ' ● )