Java实战之邮件发送器(3)——实现设置图标、重置和退出功能

本节概要:设置按钮图标、重置和退出功能

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】可获取本节源码。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值