Java-从FXML ald Java控制器传递变量

时间:2019-05-06 06:09:04

标签: java javafx fxml

我使用FXML编写程序。在FXML中,我创建了4个TextFields和Button。我的问题是,当我单击此按钮时,如何将参数从FXML中的TextFields发送到Controller。

我正在使用FXML制作JavaFX应用程序。我将此应用程序连接到数据库。我上周搜索失败,但没有发现任何可以帮助我的特殊信息。

<children>
    <BorderPane prefHeight="30.0" prefWidth="700.0">
        <bottom>
            <AnchorPane>
                <children>
                    <Button text="Add car" fx:id="button" onAction="#AddCar"/>
                </children>
            </AnchorPane>
        </bottom>
    </BorderPane>
    <TextField promptText="Brand" id="carBrand"/>
    <TextField promptText="Model" id="carModel"/>
    <TextField promptText="Mileage" id="carMileage"/>
</children>

我希望我单击FXML中的按钮-Java控制器从FXML获取参数并写入控制台。实际上,我知道如何在控制台中编写代码,但是我的问题是我不知道如何从FXML获取品牌,型号和里程。

1 个答案:

答案 0 :(得分:2)

您需要将TextField注入到控制器中,然后查询其文本属性。为此,请为要注入的每个元素指定一个fx:id,然后将具有相同类型和名称的字段添加到控制器类中。如果该字段不是公开字段,则需要使用@FXML对其进行注释。

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>

<VBox xmlns="http://javafx.com/javafx/12.0.1" xmlns:fx="http://javafx.com/fxml/1"
      fx:controller="com.example.Controller" spacing="10" alignment="center">
    <TextField fx:id="carBrand" promptText="Brand"/>
    <TextField fx:id="carModel" promptText="Model"/>
    <TextField fx:id="carMileage" promptText="Mileage"/>
    <Button text="Add car" onAction="#addCar"/>
</VBox>

package com.example;

import javafx.fxml.FXML;
import javafx.event.ActionEvent;
import javafx.scene.control.TextField;

public class Controller {

    @FXML private TextField carBrand;
    @FXML private TextField carModel;
    @FXML private TextField carMileage;

    @FXML
    private void addCar(ActionEvent event) {
        event.consume();

        String brand = carBrand.getText();
        String model = carModel.getText();
        String mileage = carMileage.getText();
        // do something with values...
    }

}

注意:按照Java命名约定,方法名称使用camelCase。换句话说,按钮的操作方法名称应为addCar(如上),而不是AddCar