本节概要:设置按钮图标、重置和退出功能
01 打开设置界面
在上一节中只能打开主界面,看到主界面的一些组件,当点击“设置”按钮的时候,不会弹出设置界面。
在MainApp.java中添加一个initSendAccountOptionFrame()方法,内容如下:
/**
* 加载设置界面
*/
public void initSendAccountOptionFrame(){
try {
// 加载FXML文件
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/view/SendAccountOptionFrame.fxml"));
Parent root = loader.load();
// 实例化舞台
Stage stage = new Stage();
// 设置标题
stage.setTitle("设置");
// 设置该界面不可缩放
stage.setResizable(true);
// 设置该界面总是处于最顶端
stage.setAlwaysOnTop(true);
// 设置模态窗口,该窗口阻止事件传递到任何其他应用程序窗口
stage.initModality(Modality.APPLICATION_MODAL);
// 设置主容器为主界面舞台
stage.initOwner(primaryStage);
// 实例化场景
Scene scene = new Scene(root);
// 将场景设置到舞台上
stage.setScene(scene);
// 获取SendAccountOptionFrameController控制器
SendAccountOptionFrameController controller = loader.getController();
// 设置SendAccountOptionFrameController类的stage
controller.setStage(stage);
// 展示舞台
stage.showAndWait();
} catch (IOException e) {
e.printStackTrace();
}
}
该方法是用来加载FXML资源文件并对加载成功的界面进行一些设置。
接下来就是在设置按钮的事件监听器方法中启动该方法,因此在MainFrameController.java类中的将do_optionButton_event内的内容换成如下:
@FXML
void do_optionButton_event(ActionEvent event) {
// 加载设置界面
new MainApp().initSendAccountOptionFrame();
}
刚才在MainApp类有一个红色报错,那是因为在SendAccountOptionFrameController类并没有定义stage。
因此在SendAccountOptionFrameController类添加如下代码:
private Stage stage;
public void setStage(Stage stage) {
this.stage = stage;
}
这个设置是为了获得该界面的场景,在取消按钮事件中会用到它来关闭界面。
运行程序,点击主界面右上角的设置按钮,将打开如下界面:
02 设置按钮图标
在很多软件中按钮都是有图标,便于识别。
对比如下两个界面,回发现有图标的好看得多,而且更容易明白这个按钮的具体功能是什么。
在本项目中需要设置图标的组件分别是发送按钮、重置按钮、退出按钮、添加附件按钮、设置按钮、保存按钮和取消按钮。
图片如下:
首先设置主界面的各个按钮的图标。
在MainFrameController添加一个initialize()方法
public void initialize() {
// 初始化按钮图标
simpleTools.setLabeledImage(
new Labeled[]{
optionButton, sendButton, resetButton, exitButton, addAppendixButton},
new String[]{
"src/main/resources/images/option.png",
"src/main/resources/images/send.png",
"src/main/resources/images/reset.png",
"src/main/resources/images/exit.png",
"src/main/resources/images/appendix.png"});
}
initialize()方法是JavaFX提供的,不是自定义的方法,该方法用来在控制器中初始化一些配置。
在这里初始化了各个按钮的图标。设置按钮图标的方法是定义在SimpleTools类中的setLabeledImage()方法,该方法有两个参数,第一个参数是按钮数组,第二个参数是与之对应的要设置图片的路径。
效果如下:
接下来就是设置界面的图标设计了,同理SendAccountOptionFrameController类中添加如下方法来初始化图标设置:
public void initialize() {
// 初始化图标设置
new SimpleTools().setLabeledImage(
new Labeled[]{saveButton, cancelButton},
new String[]{"src/main/resources/images/save.png",
"src/main/resources/images/cancel.png"});
}
效果图:
03 实现重置功能
重置即将各输入框清空。
在MainFrameController类中的do_resetButton_event()方法中添加如下代码:
@FXML
void do_resetButton_event(ActionEvent event) {
JavaFXTools javaFXTools=new JavaFXTools();
javaFXTools.reset(addresseeTextField, subjectTextField);
javaFXTools.reset(contentHTMLEditor);
javaFXTools.reset(appendixNameLabel);
}
代码解释说明:
-
JavaFXTools是自定义在tools包的工具类,里面是重载的不同参数的reset()方法。
-
需要重置的有:收信人输入文本框、主题输入文本框、附件显示标签以及内容编辑器HTMLEditor。
效果图如下:
04 退出功能
退出功能在本项目其实有两个:主界面的退出按钮的退出和设置界面的取消按钮的退出。
其中退出按钮的退出即结束程序,可使用System.exit(0);。
因此在do_exitButton_event()方法添加如下内容:
@FXML
void do_exitButton_event(ActionEvent event) {
// 退出程序
System.exit(0);
}
其二就是设置界面的取消按钮,取消按钮只是退出当前设置界面,而不是结束程序,因此就需要用到前面传过来的stage了。
在SendAccountOptionFrameController.java类中的do_cancelButton_event方法添加如下代码:
@FXML
void do_cancelButton_event(ActionEvent event) {
// 退出当前设置界面
stage.close();
}
好了,这节的功能实现了,需要注意的是工具类中的方法是如何实现的,理解有助于去自定义适合更复杂场景的工具方法。还有一个难点就是取消按钮的功能实现,虽然代码简单,但是实现逻辑需要注意,这其间传输设置stage的过程。
可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。
注意:在公众号后台回复【20191026】可获取本节源码。