どのように私は、メソッドのコントローラクラスで新しいページを呼び出すメソッドに値を渡すのですか?

カリシュマParmar:

私は10枚のフィルムとペインを持ち、フィルムのサムネイルをユーザーがクリックするたびに、私は、彼らが購入したいのですがどのように多くのチケットを選択することができ、チケットのページにユーザーを取る方法があります。しかし、私は映画のオブジェクトを渡す方法を把握しようとしているloadTicketPage私は、映画のページコントローラからフィルムのオブジェクトを呼び出すときに、呼び出されるチケットページのコントローラクラスに。

public class controller {
    public void initialize() {
        film1.setImage(getFilmFromList(0).getThumbnail());
        film2.setImage(getFilmFromList(1).getThumbnail());
        film3.setImage(getFilmFromList(2).getThumbnail());
        film4.setImage(getFilmFromList(3).getThumbnail());
        film5.setImage(getFilmFromList(4).getThumbnail());
        film6.setImage(getFilmFromList(5).getThumbnail());
        film7.setImage(getFilmFromList(6).getThumbnail());
        film8.setImage(getFilmFromList(7).getThumbnail());
        film9.setImage(getFilmFromList(8).getThumbnail());
        film10.setImage(getFilmFromList(9).getThumbnail());

    }

    public void loadTicketPage(Film film) {
        try {
            Parent root = FXMLLoader.load(getClass().getResource("ticketsPage.fxml"));

            Scene scene = new Scene(root);
            Stage stage = new Stage();

            stage.initModality(Modality.APPLICATION_MODAL);

            stage.setScene(scene);
            stage.setTitle("Ticket Page");
            stage.show();

        } catch (IOException e) {
            System.out.println(e);
        }
    }

    public void film1() {
        Double price = getFilmFromList(0).getPrice();
        String title = getFilmFromList(0).getFilmName();
        loadTicketPage(getFilmFromList(0));

    }

    public void film2() {
        Double price = getFilmFromList(1).getPrice();
        String title = getFilmFromList(1).getFilmName();
        loadTicketPage(getFilmFromList(1));
    }
}

public class TicketsPageController {
    public Label filmName;
    public Label filmDescription;

    public void initialize() {
        filmName.setText(film.getFilmTitle)
    }
}

ここでticketsPageためのFXMLファイルは次のとおりです。

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

<?import java.lang.String?>
<?import javafx.collections.FXCollections?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.effect.SepiaTone?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane prefHeight="670.0" prefWidth="1000.0" style="-fx-background-color: maroon;" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.TicketsPageController">
   <children>
      <Label fx:id="lblHello" layoutX="308.0" layoutY="9.0" prefHeight="94.0" prefWidth="460.0" text="Hello! Welcome to Cinema Enterpriso" textAlignment="CENTER" textFill="WHITE" wrapText="true">
         <font>
            <Font name="Broadway" size="30.0" />
         </font>
      </Label>
      <ImageView fitHeight="141.0" fitWidth="297.0" layoutX="10.0" layoutY="10.0" pickOnBounds="true" preserveRatio="true">
         <image>
            <Image url="@images/University_of_Huddersfield_logo.jpg" />
         </image>
      </ImageView>
      <Button fx:id="btnOpenLogin" layoutX="770.0" layoutY="46.0" mnemonicParsing="false" onAction="#btnOpenLoginClick" style="-fx-background-color: tan;" text="Login">
         <effect>
            <SepiaTone />
         </effect>
      </Button>
      <Button fx:id="btnSignUp" layoutX="840.0" layoutY="46.0" mnemonicParsing="false" onAction="#btnCreateNewUser" style="-fx-background-color: tan;" text="Sign Up">
         <effect>
            <SepiaTone />
         </effect>
      </Button>
      <Button fx:id="btnBasket" layoutX="925.0" layoutY="46.0" mnemonicParsing="false" onAction="#btnOpenOrderSummary" style="-fx-background-color: tan;" text="Basket">
         <effect>
            <SepiaTone />
         </effect>
      </Button>
      <Label layoutX="35.0" layoutY="328.0" text="Please select your tickets:" textFill="WHITE">
         <font>
            <Font name="Broadway" size="24.0" />
         </font>
      </Label>
      <ComboBox fx:id="ticketType1" layoutX="51.0" layoutY="383.0" prefWidth="150.0" promptText="Ticket type" style="-fx-background-color: tan;">
         <effect>
            <SepiaTone />
         </effect>
         <items>
            <FXCollections fx:factory="observableArrayList">
               <String fx:value="Adult"> </String>
               <String fx:value="Child"> </String>
               <String fx:value="Teen"> </String>
               <String fx:value="Student"> </String>
               <String fx:value="Senior"> </String>
            </FXCollections>
         </items>
      </ComboBox>
      <ComboBox fx:id="ticketType2" layoutX="51.0" layoutY="437.0" prefWidth="150.0" promptText="Ticket type" style="-fx-background-color: tan;">
         <effect>
            <SepiaTone />
         </effect>
         <items>
            <FXCollections fx:factory="observableArrayList">
               <String fx:value="Adult"> </String>
               <String fx:value="Child"> </String>
               <String fx:value="Teen"> </String>
               <String fx:value="Student"> </String>
               <String fx:value="Senior"> </String>
            </FXCollections>
         </items>
      </ComboBox>
      <ComboBox fx:id="ticketType3" layoutX="51.0" layoutY="489.0" prefWidth="150.0" promptText="Ticket type" style="-fx-background-color: tan;">
         <effect>
            <SepiaTone />
         </effect>
         <items>
            <FXCollections fx:factory="observableArrayList">
               <String fx:value="Adult"> </String>
               <String fx:value="Child"> </String>
               <String fx:value="Teen"> </String>
               <String fx:value="Student"> </String>
               <String fx:value="Senior"> </String>
            </FXCollections>
         </items>
      </ComboBox>
      <ComboBox fx:id="ticketType4" layoutX="51.0" layoutY="541.0" prefWidth="150.0" promptText="Ticket type" style="-fx-background-color: tan;">
         <effect>
            <SepiaTone />
         </effect>
         <items>
            <FXCollections fx:factory="observableArrayList">
               <String fx:value="Adult"> </String>
               <String fx:value="Child"> </String>
               <String fx:value="Teen"> </String>
               <String fx:value="Student"> </String>
               <String fx:value="Senior"> </String>
            </FXCollections>
         </items>
      </ComboBox>
      <ComboBox fx:id="ticketType5" layoutX="51.0" layoutY="592.0" prefWidth="150.0" promptText="Ticket type" style="-fx-background-color: tan;">
         <effect>
            <SepiaTone />
         </effect>
          <items>
              <FXCollections fx:factory="observableArrayList">
                  <String fx:value="Adult"> </String>
                  <String fx:value="Child"> </String>
                  <String fx:value="Teen"> </String>
                  <String fx:value="Student"> </String>
                  <String fx:value="Senior"> </String>
              </FXCollections>
          </items>
      </ComboBox>
      <ComboBox fx:id="no1" layoutX="218.0" layoutY="383.0" prefHeight="31.0" prefWidth="79.0" promptText="no." style="-fx-background-color: tan;">
         <effect>
            <SepiaTone />
         </effect>
         <items>
            <FXCollections fx:factory="observableArrayList">
               <String fx:value="1"> </String>
               <String fx:value="2"> </String>
               <String fx:value="3"> </String>
               <String fx:value="4"> </String>
               <String fx:value="5"> </String>
               <String fx:value="6"> </String>
            </FXCollections>
         </items>
      </ComboBox>
      <ComboBox fx:id="no2" layoutX="217.0" layoutY="435.0" prefHeight="31.0" prefWidth="79.0" promptText="no." style="-fx-background-color: tan;">

         <effect>
            <SepiaTone />
         </effect>
         <items>
            <FXCollections fx:factory="observableArrayList">
               <String fx:value="1"> </String>
               <String fx:value="2"> </String>
               <String fx:value="3"> </String>
               <String fx:value="4"> </String>
               <String fx:value="5"> </String>
               <String fx:value="6"> </String>
            </FXCollections>
         </items>
      </ComboBox>
      <ComboBox fx:id="no3" layoutX="217.0" layoutY="488.0" prefHeight="31.0" prefWidth="79.0" promptText="no." style="-fx-background-color: tan;">
         <effect>
            <SepiaTone />
         </effect>
         <items>
            <FXCollections fx:factory="observableArrayList">
               <String fx:value="1"> </String>
               <String fx:value="2"> </String>
               <String fx:value="3"> </String>
               <String fx:value="4"> </String>
               <String fx:value="5"> </String>
               <String fx:value="6"> </String>
            </FXCollections>
         </items>
      </ComboBox>
      <ComboBox fx:id="no4" layoutX="218.0" layoutY="542.0" prefHeight="31.0" prefWidth="79.0" promptText="no." style="-fx-background-color: tan;">
         <effect>
            <SepiaTone />
         </effect>
         <items>
            <FXCollections fx:factory="observableArrayList">
               <String fx:value="1"> </String>
               <String fx:value="2"> </String>
               <String fx:value="3"> </String>
               <String fx:value="4"> </String>
               <String fx:value="5"> </String>
               <String fx:value="6"> </String>
            </FXCollections>
         </items>
      </ComboBox>
      <ComboBox fx:id="no5" layoutX="217.0" layoutY="594.0" prefHeight="31.0" prefWidth="79.0" promptText="no." style="-fx-background-color: tan;">
         <effect>
            <SepiaTone />
         </effect>
         <items>
            <FXCollections fx:factory="observableArrayList">
               <String fx:value="1"> </String>
               <String fx:value="2"> </String>
               <String fx:value="3"> </String>
               <String fx:value="4"> </String>
               <String fx:value="5"> </String>
               <String fx:value="6"> </String>
            </FXCollections>
         </items>
      </ComboBox>
      <Label fx:id="filmName" layoutX="521.0" layoutY="123.0" text="Film" textFill="WHITE">
         <font>
            <Font name="Broadway" size="30.0" />
         </font>
      </Label>
      <Label fx:id="filmDescription" layoutX="485.0" layoutY="189.0" text="Description" textFill="WHITE">
         <font>
            <Font name="Broadway" size="24.0" />
         </font>
      </Label>
      <Button fx:id="btnAddToOrder1" layoutX="325.0" layoutY="383.0" mnemonicParsing="false" onAction="#btnAddTicketToOrder1" style="-fx-background-color: tan;" text="Add to order" textFill="MAROON">
         <effect>
            <SepiaTone />
         </effect>
      </Button>
      <Button fx:id="btnAddToOrder2" layoutX="325.0" layoutY="435.0" mnemonicParsing="false" onAction="#btnAddTicketToOrder2" style="-fx-background-color: tan;" text="Add to order" textFill="MAROON">
         <effect>
            <SepiaTone />
         </effect>
      </Button>
      <Button fx:id="btnAddToOrder3" layoutX="325.0" layoutY="489.0" mnemonicParsing="false" onAction="#btnAddTicketToOrder3" style="-fx-background-color: tan;" text="Add to order" textFill="MAROON">
         <effect>
            <SepiaTone />
         </effect>
      </Button>
      <Button fx:id="btnAddToOrder4" layoutX="325.0" layoutY="541.0" mnemonicParsing="false" onAction="#btnAddTicketToOrder4" style="-fx-background-color: tan;" text="Add to order" textFill="MAROON">
         <effect>
            <SepiaTone />
         </effect>
      </Button>
      <Button fx:id="btnAddToOrder5" layoutX="325.0" layoutY="595.0" mnemonicParsing="false" onAction="#btnAddTicketToOrder5" style="-fx-background-color: tan;" text="Add to order" textFill="MAROON">
         <effect>
            <SepiaTone />
         </effect>
      </Button>
      <Button fx:id="btnBackHomepage" layoutX="485.0" layoutY="594.0" mnemonicParsing="false" onAction="#btnBackToHomePageClick" prefHeight="31.0" prefWidth="155.0" style="-fx-background-color: tan;" text="Back to Homepage" textFill="MAROON">
         <effect>
            <SepiaTone />
         </effect>
      </Button>
   </children>
</AnchorPane>

ここでスタックトレースは次のようになります。

Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2566)
    ... 45 more
Caused by: java.lang.NullPointerException
    at sample.TicketsPageController.setStuff(TicketsPageController.java:54)
    at sample.TicketsPageController.initialize(TicketsPageController.java:41)
    ... 55 more

ここに私のTicketPageControllerです

package sample;

import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.stage.Window;

import java.io.IOException;

public class TicketsPageController {
    public Label lblHello;
    public Button btnOpenLogin;
    public Button btnSignUp;
    public Button btnBasket;
    public Label filmName;
    public Label filmDescription;
    public ComboBox ticketType1;
    public ComboBox ticketType2;
    public ComboBox ticketType3;
    public ComboBox ticketType4;
    public ComboBox ticketType5;
    public ComboBox no1;
    public ComboBox no2;
    public ComboBox no3;
    public ComboBox no4;
    public ComboBox no5;
    public Button btnAddToOrder1;
    public Button btnAddToOrder2;
    public Button btnAddToOrder3;
    public Button btnAddToOrder4;
    public Button btnAddToOrder5;
    public Button btnBackHomepage;
    private String filmTitle;

    private Film film;

    public void initialize() {
          setStuff();
//        System.out.println(filmTitle);
          filmName.setText(filmTitle);
    }

//    public void setFilm(Film film) {
//        System.out.println("in set film");
//        this.film = film;
//
//    }

    public void setFilm(Film film) {
        this.film = film;
        filmName.setText(film.getFilmName());
    }

    public void setStuff() {
        System.out.println("test");
        filmTitle = film.getFilmName();
    }

    public String printFilm(){
        return film.getFilmName();
    }

    public void btnOpenLoginClick(ActionEvent actionEvent) {
        printFilm();
    }

    public void btnCreateNewUser(ActionEvent actionEvent) {
    }

    public void btnOpenOrderSummary(ActionEvent actionEvent) {
    }

    public void btnAddTicketToOrder1(ActionEvent actionEvent) {
    }

    public void btnAddTicketToOrder2(ActionEvent actionEvent) {
    }

    public void btnAddTicketToOrder3(ActionEvent actionEvent) {
    }

    public void btnAddTicketToOrder4(ActionEvent actionEvent) {
    }

    public void btnAddTicketToOrder5(ActionEvent actionEvent) {
    }

    public void btnBackToHomePageClick(ActionEvent actionEvent) throws IOException {
        Window mainWindow = btnBackHomepage.getScene().getWindow();
        Parent newRoot = FXMLLoader.load(getClass().getResource("homepage.fxml"));
        mainWindow.getScene().setRoot(newRoot);
    }
}
サミュエル・フィリップ:

新しいのロード・プロセス中にPaneあなたがから、コントローラを得ることができますFXMLLoaderし、それにフィルムを渡します。

public void loadTicketPage(Film film){
    try {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("ticketsPage.fxml"));

        Scene scene = new Scene(loader.load());
        Stage stage = new Stage();

        stage.initModality(Modality.APPLICATION_MODAL);

        stage.setScene(scene);
        stage.setTitle("Ticket Page");

        // get the controller and set the film
        TicketsPageController controller = loader.getController();
        controller.setFilm(film);

        stage.show();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

以下のようなあなたのコントローラのルックスと仮定すると:

public class TicketsPageController {
    private Film film;

    public Label filmName;
    public Label filmDescription;

    public void setFilm(Film film) {
        this.film = film;
        filmName.setText(film.getFilmTitle());
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=214645&siteId=1