Java - передаваемая переменная из FXML и Java Controller - PullRequest
0 голосов
/ 06 мая 2019

Я делаю программу, используя FXML. В FXML я создаю 4 TextFields и Button. Моя проблема заключается в том, как отправить параметры из TextFields в FXML в контроллер, когда я нажимаю эту кнопку.

Я делаю JavaFX-приложение с FXML. Я подключаю это приложение к базе данных. Я искал предыдущую неделю безуспешно, но не нашел ничего особенного, что могло бы мне помочь.

<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 Ответ

2 голосов
/ 06 мая 2019

Вам нужно вставить свои 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.

...