JavaFX - передача информации от контроллера всплывающего окна к вызывающему контроллеру - PullRequest
0 голосов
/ 03 марта 2019

Я уже некоторое время пытаюсь заставить что-то работать, но это не ладит.Я относительно новичок в GUI и пытаюсь сделать это в JavaFX, используя IntelliJ и Gluon SceneBuilder.Вот что я хочу сделать:

Когда я нажимаю Button в моем исходном окне, появляется всплывающее окно.По сути, это новое окно, если это необычно, пожалуйста, дайте мне знать.В этом всплывающем окне есть три TextField с, в которые я могу ввести материал.Когда я нажимаю «Подтвердить» Button во всплывающем окне, всплывающее окно должно закрыться и сообщить контроллеру, который вызвал его, все, что было введено в TextField s.

Надеюсь, я предоставил достаточноИнформация.Я искал весь день и спросил у некоторых опытных программистов, но безрезультатно.

Прямо сейчас, это относительный код (извините, голландцы):

Базовый контроллер

public class Controller implements Initializable{

    public Controller(){
        people = new ArrayList<>();
        casks = new ArrayList<>();
    }

    public void startNewCask(ActionEvent actionEvent) throws IOException {
        FXMLLoader loader = new FXMLLoader();
        Parent root = loader.load(getClass().getResource("../view/NewCask.fxml"));
        Stage stage = new Stage();
        stage.setTitle("New cask");
        Scene scene = new Scene(root, 300, 275);
        stage.setScene(scene);
        stage.show();
    }
}

Контроллер всплывающих окон

public class NewCaskController {
    @FXML
    private TextField price;
    @FXML
    private TextField volume;
    @FXML
    private TextField type;
    @FXML
    private Button confirm;

    @FXML
    public void handleConfirm(ActionEvent event) {
        Stage stage = (Stage) confirm.getScene().getWindow();
        stage.close();
    }

JavaFX всплывающих окон

<AnchorPane maxHeight="305.0" maxWidth="260.0" minHeight="230.0" minWidth="260.0" prefHeight="246.0" prefWidth="260.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.NewCaskController">
   <children>
      <Label layoutX="12.0" layoutY="14.0" text="Klik op het kruisje om te annuleren." />
      <Label layoutX="12.0" layoutY="35.0" text="Prijs nieuw fust (in euro's zonder €):" />
      <TextField fx:id="price" layoutX="12.0" layoutY="56.0" promptText="Prijs" />
      <Label layoutX="12.0" layoutY="87.0" text="Volume (in milliliter):" />
      <TextField fx:id="volume" layoutX="12.0" layoutY="108.0" promptText="Volume" />
      <Label layoutX="12.0" layoutY="139.0" text="Type" />
      <TextField fx:id="type" layoutX="12.0" layoutY="160.0" promptText="Type" />
      <Button fx:id="confirm" layoutX="12.0" layoutY="201.0" mnemonicParsing="false" onAction="#handleConfirm" text="Bevestig" />
   </children>
</AnchorPane>

JavaFX оригинального окна

<SplitPane dividerPositions="0.5" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" orientation="VERTICAL" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.Controller">
  <items>
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
         <children>
            <Label layoutX="14.0" layoutY="14.0" text="Huidig fust" />
            <Label layoutX="14.0" layoutY="58.0" text="Biersoort: " />
            <ProgressBar fx:id="caskProgress" layoutX="14.0" layoutY="35.0" prefWidth="200.0" progress="0.5" AnchorPane.leftAnchor="12.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="35.0" />
            <Label fx:id="beerTypeLabel" layoutX="81.0" layoutY="58.0" text="404 BIER NIET HIER" />
            <Button layoutX="12.0" layoutY="82.0" mnemonicParsing="false" onAction="#startNewCask" text="Nieuw fust" />
            <Button layoutX="113.0" layoutY="82.0" mnemonicParsing="false" text="Nieuwe gebruiker" />
            <Button layoutX="261.0" layoutY="82.0" mnemonicParsing="false" text="Statistieken" visible="false" />
         </children></AnchorPane>
</items>
   <padding>
      <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
   </padding>
</SplitPane>

1 Ответ

0 голосов
/ 09 марта 2019

Для всплывающего окна лучше использовать Dialog, чем целое новое окно JavaFX.Благодарим @Zephyr за то, что он обратил на это мое внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...