0

I am trying to pass the ArrayList of customers back to the first Scene because I want to display the customers inside a table view. I add the customers to the Bank object inside the Second Scene Controller. I was able to get it to run the only issue is that I had to create a new instance of the Bank object. I am not sure where I would instantiate the Bank object that way it is not getting reset everytime I create an account and go back to the main screen

public class MainRun extends Application

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("/sample/mainMenu.fxml"));
    Scene scene = new Scene(root);
    scene.getStylesheets().add("my_style.css");
    stage.setScene(scene);
    stage.show();
}

public static void main(String[] args) {
    launch(args);
}

This is my first scene class

public class FirstSceneController implements Initializable

private Scene scene;
private Stage stage;
private Parent root;

@FXML
private MenuItem exit_menuItem;
@FXML
MenuBar menu_Bar;

@FXML
private Button createAccount;
@FXML
private GridPane gridPane_root;
@FXML
private StackPane parentContainer;


public void closeWindow(ActionEvent actionEvent) {
    stage = (Stage) menu_Bar.getScene().getWindow();
    stage.close();
}

public void switchToCreateAccountWindow(ActionEvent event) throws IOException {
    root = FXMLLoader.load(getClass().getResource("addAccount.fxml"));

    scene = createAccount.getScene();

    root.translateYProperty().set(scene.getHeight());
    parentContainer.getChildren().add(root);

    Timeline timeline = new Timeline();
    KeyValue kv = new KeyValue(root.translateYProperty(), 0, Interpolator.EASE_IN);
    KeyFrame kf = new KeyFrame(Duration.seconds(1), kv);

    timeline.getKeyFrames().add(kf);
    timeline.setOnFinished(event1 -> {
        parentContainer.getChildren().remove(gridPane_root);
    });

    timeline.play();
}

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
    ImageView exitImage = new ImageView(new Image("exit_icon.jpg"));
    exitImage.setSmooth(true);
    exitImage.setPreserveRatio(true);
    exitImage.setFitHeight(16);
    exitImage.setFitWidth(16);
    exit_menuItem.setGraphic(exitImage);
}

Second Scene Class

public class SecondSceneController implements Initializable

ObservableList<String> list = FXCollections.observableArrayList("Checking", "Savings");

private Parent root;
private Scene scene;
private Stage stage;
private StackPane parentContainer;
@FXML
private GridPane gridPane_root;


@FXML
private MenuBar menu_Bar;
@FXML
ComboBox<String> account_types;
@FXML
private Button cancel_button;
@FXML
private TextField firstNameField;
@FXML
private TextField lastNameField;
@FXML
private TextField socialSecurityField;
@FXML
private TextField depositField;
@FXML
MenuItem exit_menuItem;

private double amount = 0.0;
Account account = null;
private Bank bank;


@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
    account_types.setItems(list);
    ImageView exitImage = new ImageView(new Image("exit_icon.jpg"));
    exitImage.setSmooth(true);
    exitImage.setPreserveRatio(true);
    exitImage.setFitHeight(16);
    exitImage.setFitWidth(16);
    exit_menuItem.setGraphic(exitImage);
}

public void goBackToMainScreen() throws IOException {

    root = FXMLLoader.load(getClass().getResource("mainMenu.fxml"));
    scene = cancel_button.getScene();

    root.translateXProperty().set(scene.getWidth());

    parentContainer = (StackPane) scene.getRoot();
    parentContainer.getChildren().add(root);

    Timeline timeline = new Timeline();
    KeyValue kv = new KeyValue(root.translateXProperty(), 0, Interpolator.EASE_IN);
    KeyFrame kf = new KeyFrame(Duration.seconds(1), kv);

    timeline.getKeyFrames().add(kf);
    timeline.setOnFinished(event1 -> {
        parentContainer.getChildren().remove(gridPane_root);
    });

    timeline.play();
}

public void createAccountActionPerformed(ActionEvent event) throws IOException {
    boolean isValid;

    StringBuilder stringBuilder = new StringBuilder();

    String firstName = "", lastName = "", ssn = "";

    if (firstNameField.getText().isEmpty()) {
        System.out.println("First name must not be empty");
    } else {
        firstName = firstNameField.getText();
    }
    if (lastNameField.getText().isEmpty()) {
        System.out.println("Last name must not be empty");
    } else {
        lastName = lastNameField.getText();
    }
    if (socialSecurityField.getText().isEmpty()) {
        System.out.println("SSN must not be empty");
    }
    if (!socialSecurityField.getText().matches("\\d{3}-\\d{2}-\\d{4}")) {
        System.out.println("Invalid SSN");
    } else {
        ssn = socialSecurityField.getText().replace("-", "");
    }
    if (depositField.getText().isEmpty()) {
        System.out.println("Enter an amount!");
        isValid = false;
    } else {
        try {
            amount = round(Double.parseDouble(depositField.getText()), 2);
            isValid = true;
        } catch (NumberFormatException e) {
            System.out.println("Deposit must be a number!");
            isValid = false;
        }
    }
    if (account_types.getSelectionModel().isEmpty()) {
        System.out.println("Please select an account type!");
        isValid = false;
    } else if (account_types.getSelectionModel().equals("Checking")) {
        account = new Checking(amount);
        isValid = true;
    } else if (account_types.getSelectionModel().equals("Savings")) {
        account = new Savings(amount);
        isValid = true;
    }

    Customer customer = new Customer(firstName, lastName, ssn, account);
    bank.addCustomer(customer);


    if (isValid) {
        for (Customer c : bank.getCustomers()) {
            System.out.println(c.firstName + " " + c.lastName);
        }
        goBackToMainScreen();
    }

}

public void closeWindow(ActionEvent event) {
    stage = (Stage) menu_Bar.getScene().getWindow();
    stage.close();
}


private static double round(double number, int places) {
    if (places < 0) {
        throw new IllegalArgumentException();
    }
    BigDecimal bd = new BigDecimal(number);
    bd = bd.setScale(places, RoundingMode.FLOOR);
    return bd.doubleValue();
}

Bank Class that holds an arraylist of customers public class Bank

List<Customer> customers;

public Bank() {
    customers = new ArrayList<>();
}

public void addCustomer(Customer customer) {
    customers.add(customer);
}

public List<Customer> getCustomers() {
    return customers;
}
esque01
  • 1
  • 5
  • https://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml – SedJ601 Jan 19 '21 at 03:48
  • How would I approach this differently If i am using an animation to open a new scene. I am not creating a new stage the second scene is sliding up from the bottom – esque01 Jan 19 '21 at 03:57
  • If your question is to pass the information or have the info available for the next scene, then one of those two answers will do. If your question is something else, you need to state that. The animation is irrelevant. – SedJ601 Jan 19 '21 at 04:05
  • 1
    I figured it out the post answered my question. Thanks – esque01 Jan 19 '21 at 04:09

0 Answers0