JavaFX:Initializable接口,JavaFX加载fxml文件的控件初始化

105 篇文章 5 订阅

JavaFX的窗体文件是fxml格式的xml文件。JavaFX通过FXMLLoader加载fxml文件,并将其进行显示。

fxml文件:

<?xml version="1.0" encoding="UTF-8"?>

<!--
  Copyright (c) 2015, 2019, Gluon and/or its affiliates.
  All rights reserved. Use is subject to license terms.

  This file is available and licensed under the following license:

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:

  - Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
  - Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the distribution.
  - Neither the name of Oracle Corporation nor the names of its
    contributors may be used to endorse or promote products derived
    from this software without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.SeparatorMenuItem?>
<?import javafx.scene.control.Spinner?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.web.WebView?>

<VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="form.MainFrameController">
  
  <children>
    <MenuBar VBox.vgrow="NEVER">
      <menus>
        <Menu mnemonicParsing="false" text="File">
          <items>
            <MenuItem mnemonicParsing="false" text="New" />
            <MenuItem fx:id="openFileItem" mnemonicParsing="false" text="Open…" />
            <Menu mnemonicParsing="false" text="Open Recent" />
            <SeparatorMenuItem mnemonicParsing="false" />
            <MenuItem mnemonicParsing="false" text="Close" />
            <MenuItem mnemonicParsing="false" text="Save" />
            <MenuItem mnemonicParsing="false" text="Save As…" />
            <MenuItem mnemonicParsing="false" text="Revert" />
            <SeparatorMenuItem mnemonicParsing="false" />
            <MenuItem mnemonicParsing="false" text="Preferences…" />
            <SeparatorMenuItem mnemonicParsing="false" />
            <MenuItem fx:id="quitItem" mnemonicParsing="false" text="Quit" />
          </items>
        </Menu>
        
        <Menu mnemonicParsing="false" text="Edit">
          <items>
            <MenuItem mnemonicParsing="false" text="Undo" />
            <MenuItem mnemonicParsing="false" text="Redo" />
            <SeparatorMenuItem mnemonicParsing="false" />
            <MenuItem mnemonicParsing="false" text="Cut" />
            <MenuItem mnemonicParsing="false" text="Copy" />
            <MenuItem mnemonicParsing="false" text="Paste" />
            <MenuItem mnemonicParsing="false" text="Delete" />
            <SeparatorMenuItem mnemonicParsing="false" />
            <MenuItem mnemonicParsing="false" text="Select All" />
            <MenuItem mnemonicParsing="false" text="Unselect All" />
          </items>
        </Menu>
        
        <Menu mnemonicParsing="false" text="Help">
          <items>
            <MenuItem mnemonicParsing="false" text="About MyHelloApp" />
          </items>
        </Menu>
      </menus>
    </MenuBar>
      <TabPane prefHeight="375.0" prefWidth="642.0" tabClosingPolicy="UNAVAILABLE" VBox.vgrow="ALWAYS">
        <tabs>
          <Tab fx:id="trackDataViewTab" text="雷达数据" />
          
                <Tab fx:id="trackDataMapTab" text="雷达数据地图">
               <content>
                  <BorderPane prefHeight="200.0" prefWidth="200.0">
                     <center>
                        <WebView fx:id="trackMapWebView" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
                     </center>
                     <left>
                        <VBox prefHeight="200.0" prefWidth="150.0" spacing="2.0" BorderPane.alignment="CENTER">
                           <children>
                              <Label text="最底高度范围:0~15000米" />
                              <Spinner fx:id="minAltitudeSpinner" editable="true" />
                              <Label text="最高高度范围:0~15000米" />
                              <Spinner fx:id="maxAltitudeSpinner" editable="true" />
                              <Button mnemonicParsing="false" prefHeight="23.0" prefWidth="150.0" text="高 度 过 滤">
                                 <font>
                                    <Font size="16.0" />
                                 </font>
                              </Button>
                              <Separator orientation="VERTICAL" prefHeight="200.0" />
                           </children>
                        </VBox>
                     </left>
                  </BorderPane>
               </content>
          </Tab>
        </tabs>
      </TabPane>
  </children>
</VBox>

绑定的的Java文件:

package form;


import java.net.URL;
import java.util.ResourceBundle;

import handle.MainFrameHandle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.MenuItem;
import javafx.scene.control.Spinner;
import javafx.scene.control.Tab;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;


/**
 * @copyright 2003-2023
 * @package   form
 * @file      MainFrameController.java
 * @date      2023-12-16
 * @author    qiao wei
 * @version   1.0
 * @brief     MainWindow.fxml文件对应的Java类。
 * @history
 */
public class MainFrameController implements Initializable {
    
    public MainFrameController() {
        mainFrameHandle = MainFrameHandle.getInstance();
    }

    /**
     * @class   MainFrameController
     * @date    2023-12-18
     * @author  qiao wei
     * @version 1.0
     * @brief   初始化,实现Initializable接口。MainFrameController.java与MainWindow.fxml绑定,当fxml文件被FXMLLoader
     *          加载(加载fxml文件时,绑定的控件已经进行初始化)后就自动调用该方法,对已经创建的控件可以进行二次设置。
     * @param   
     * @return  
     * @throws
     */
    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        setControlProperty();
    }
    
    private void setControlProperty() {
        openFileItem.setOnAction(event -> mainFrameHandle.chooseFiles());
        quitItem.setOnAction(event -> mainFrameHandle.exitApplication(event));
        
        WebEngine webEngine = trackMapWebView.getEngine();
        webEngine.load("https://toutiao.com/");
         
//        StackPane stackPane = new StackPane();
//        stackPane.getChildren().addAll(webView);
//
//        HBox hBox = new HBox();
//        HBox.setHgrow(webView, Priority.ALWAYS);
//        VBox.setVgrow(webView, Priority.ALWAYS);
//        hBox.getChildren().addAll(webView);
        
//        trackDataMapTab.setContent(hBox);
    }
    
    @FXML
    private Tab trackDataViewTab;
    
    @FXML
    private Tab trackDataMapTab;
    
    @FXML
    private MenuItem openFileItem;
    
    @FXML
    private MenuItem quitItem;
    
    @FXML
    private Spinner<Integer> minAltitudeSpinner;

    @FXML
    private Spinner<Integer> maxAltitudeSpinner;
    
    @FXML
    private WebView trackMapWebView;
    
    private MainFrameHandle mainFrameHandle;
}

Initializable接口简介:

Controller initialization interface.

NOTE This interface has been superseded by automatic injection of location and resources properties into the controller. FXMLLoader will now automatically call any suitably annotated no-arg initialize() method defined by the controller. It is recommended that the injection approach be used whenever possible.

Since:

fxml文件中的JavaFX控件在Java文件中绑定,在Java类的构造函数中还没有初始化,所有的控件还都是null,但是Java类继承了Initializable接口,则在构造函数之后自动调用Initializable接口的方法,此时JavaFX控件已经初始化,可以进行设置了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值