в классе контроллера fxml не найдено поле для ввода для идентификатора

SceneBuilder не вводит поля из класса контроллера в FXML, несмотря на аннотацию @FXML. Вместо этого, когда я ввожу идентификатор в fx: id в Scene Builder, вместо этого отображается сообщение об ошибке «в классе контроллера fxml для идентификатора не найдено поле для ввода».

Раньше мне удавалось заставить его работать, когда идентификатор показывает раскрывающееся меню, и вы просто выбираете соответствующее поле; однако я не уверен, почему он перестал работать.

FXML:

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" stylesheets="@../../common/gui/common_style.css" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="vehicles.logic.addVehicle">
   <children>
      <Text fill="WHITE" layoutX="304.0" layoutY="263.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Registration Number">
         <font>
            <Font size="19.0" />
         </font></Text>
      <Text fill="WHITE" layoutX="305.0" layoutY="162.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Model">
         <font>
            <Font size="19.0" />
         </font></Text>
      <Text fill="WHITE" layoutX="307.0" layoutY="215.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Make">
         <font>
            <Font size="19.0" />
         </font></Text>
      <Text fill="WHITE" layoutX="306.0" layoutY="314.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Engine Size">
         <font>
            <Font size="19.0" />
         </font></Text>
      <Text fill="WHITE" layoutX="307.0" layoutY="363.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Fuel Type">
         <font>
            <Font size="19.0" />
         </font></Text>
      <Text fill="WHITE" layoutX="308.0" layoutY="415.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Colour">
         <font>
            <Font size="19.0" />
         </font></Text>
      <Text fill="WHITE" layoutX="306.0" layoutY="472.0" strokeType="OUTSIDE" strokeWidth="0.0" text="MOT Renewal Date">
         <font>
            <Font size="19.0" />
         </font></Text>
      <Text fill="WHITE" layoutX="307.0" layoutY="536.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Last Service Date">
         <font>
            <Font size="19.0" />
         </font></Text>
      <Text fill="WHITE" layoutX="309.0" layoutY="597.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Current Mileage">
         <font>
            <Font size="19.0" />
         </font></Text>
      <TextField fx:id="model" layoutX="538.0" layoutY="142.0" prefHeight="25.0" prefWidth="170.0" />
      <TextField fx:id="make" layoutX="539.0" layoutY="195.0" prefHeight="25.0" prefWidth="170.0" />
      <TextField fx:id="regnum" layoutX="540.0" layoutY="244.0" prefHeight="25.0" prefWidth="170.0" />
      <TextField fx:id="engine" layoutX="539.0" layoutY="295.0" prefHeight="25.0" prefWidth="170.0" />
      <TextField fx:id="fueltype" layoutX="540.0" layoutY="344.0" prefHeight="25.0" prefWidth="170.0" />
      <TextField fx:id="colour" layoutX="540.0" layoutY="396.0" prefHeight="25.0" prefWidth="170.0" />
      <TextField fx:id="mileage" layoutX="540.0" layoutY="577.0" prefHeight="25.0" prefWidth="170.0" />
      <DatePicker fx:id="motrenewal" layoutX="539.0" layoutY="453.0" />
      <DatePicker fx:id="servicedate" layoutX="541.0" layoutY="515.0" />
      <Button fx:id="add" layoutX="927.0" layoutY="604.0" mnemonicParsing="false" prefHeight="26.0" prefWidth="71.0" text="Add" />
      <Button fx:id="back" layoutX="820.0" layoutY="604.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="71.0" text="Back" />
      <Text fill="WHITE" layoutX="527.0" layoutY="90.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Add Vehicle">
         <font>
            <Font size="43.0" />
         </font>
      </Text>
   </children>
</AnchorPane>

Контроллер:

package vehicles.logic;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextField;

/**
 * FXML Controller class
 *
 * @author ugonw
 */
public class addVehicle implements Initializable {

    @FXML
    private TextField model;
    @FXML
    private TextField make;
    @FXML
    private TextField regnum;
    @FXML
    private TextField engine;
    @FXML
    private TextField fueltype;
    @FXML
    private TextField colour;
    @FXML
    private TextField mileage;
    @FXML
    private DatePicker motrenewal;
    @FXML
    private DatePicker servicedate;
    @FXML
    private Button add;
    @FXML
    private Button back;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}

person Donovan Haynes    schedule 21.02.2017    source источник
comment
Предположительно, оператор пакета для контроллера опущен только из-за ошибки копирования и вставки?   -  person James_D    schedule 21.02.2017
comment
Конечно. Сейчас я отредактирую код, чтобы включить это   -  person Donovan Haynes    schedule 21.02.2017
comment
Хм, ну, это не тот пакет, который у вас есть в атрибуте fx:controller в файле FXML...   -  person James_D    schedule 22.02.2017
comment
Опять ошибка, потому что я перемещал контроллер по пакетам в надежде, что это исправит проблему. Я снова исправил код...   -  person Donovan Haynes    schedule 22.02.2017
comment
Скопировал весь код и у меня все заработало. Если я удалю один из атрибутов fx:id, SceneBuilder покажет разумные варианты в раскрывающемся списке, и я не увижу сообщений об ошибках. Какая у вас версия SceneBuilder?   -  person James_D    schedule 22.02.2017
comment
Я удалил и переустановил последнюю версию SceneBuilder, однако она по-прежнему не работает... Версия 8.3.0 Дата: 16 декабря 2016 г. Версия Java: 1.8.0_111-b14, Oracle Corporation   -  person Donovan Haynes    schedule 22.02.2017


Ответы (1)


Обходной путь - открыть файл xml в вашей среде IDE и вручную добавить имя идентификатора в этот файл. Поэтому, если Scenebuilder не сделал этого за вас и объект касается, например, текстового поля, то тег будет выглядеть так.

<TextField />

Вы должны добавить к нему fx:id="your_id_name" следующим образом:

<TextField fx:id="userName" />

Это должно работать как шарм после сохранения файла xml. Надеюсь это поможет.

person Maurice    schedule 14.05.2017