public void start(Stage primaryStage) throws Exception { // Connecting to Access DB connect(); // Declaration of variable window as primaryStage window = primaryStage; window.setTitle("Icooköp"); primaryStage.setTitle("Icooköp"); // Calls method closeProgram() also when terminating the program window.setOnCloseRequest(e -> closeProgram()); // ---------------------SCENE1-------------------------- // Scene 1 Welcome Label Label labelScene1 = new Label(); labelScene1.setText("Välkommen till Icooköp beta v0.2!"); labelScene1.setFont(Font.font("Verdana", 20)); // Scene 1 left menu with spacing VBox scene1leftMenu = new VBox(15); scene1leftMenu.setPadding(new Insets(20, 20, 20, 20)); // Calls closeProgram() Button s1q1 = new Button("Avsluta"); s1q1.setOnAction(e -> closeProgram()); // Displays all available product types Button s1b1 = new Button("Visa produkttyper"); s1b1.setOnAction(e -> createStatement()); // TableView object for displaying database data. tableview = new TableView(); // TextField for user input of a selected product. Label s1l1 = new Label(); s1l1.setText("Visa märken till produktgrupp"); // Calls preparedStatement with product parameter choiceBox1 = new ChoiceBox<>(); getProductTypes(); choiceBox1 .getSelectionModel() .selectedItemProperty() .addListener((v, oldValue, newValue) -> preparedStatement(newValue)); // Button for switching to scene 2 (insertStamkund) Button s1b3 = new Button("Lägg till stamkund"); s1b3.setOnAction(e -> window.setScene(scene2)); // Label for drop down menu Label s1l2 = new Label(); s1l2.setText("Se butiksaldo"); // Creating ChoiceBox (drop down) with all the stores. // When choosing a store, storeStock() method is called for that store. choiceBox2 = new ChoiceBox<>(); getStores(); choiceBox2 .getSelectionModel() .selectedItemProperty() .addListener((v, oldValue, newValue) -> storeStock(newValue)); // Adding buttons, labels, text fields and choicebox (drop down) to left menu scene1leftMenu .getChildren() .addAll(labelScene1, s1q1, s1b1, s1l1, choiceBox1, s1b3, s1l2, choiceBox2); // Creating BorderPane object and aligning left and center content BorderPane Borderpane1 = new BorderPane(); Borderpane1.setLeft(scene1leftMenu); Borderpane1.setCenter(tableview); // Setting scene 1 using BorderPane1. Both scenes have identical dimensions. scene1 = new Scene(Borderpane1, 700, 500); // ------------------- SCENE2 (insert Stamkund) -------------------- // HBox for scene 2 created and a Label for it. HBox scene2topMenu = new HBox(); Label labelScene2 = new Label(); labelScene2.setText("Lägg till stamkund"); labelScene2.setFont(Font.font("Verdana", 20)); // Left menu VBox created. VBox scene2leftMenu = new VBox(15); // Scene 2 Main manu and Quit Button created Button s2b1 = new Button("Huvudmeny"); s2b1.setOnAction(e -> window.setScene(scene1)); Button s2q1 = new Button("Avsluta"); s2q1.setOnAction(e -> closeProgram()); // GridPane for scene 2 created with spacing GridPane s2grid = new GridPane(); s2grid.setPadding(new Insets(10, 10, 10, 10)); s2grid.setVgap(15); s2grid.setHgap(10); // Label displaying required input fields Label oblLabel = new Label("* = Obligatoriskt fält"); GridPane.setConstraints(oblLabel, 0, 0); // Label for prnParam Label pnrLabel = new Label("*Personnummer:"); GridPane.setConstraints(pnrLabel, 0, 1); // pnrParam is forced by regular expression to "6 digits"-"dash"-"4 digits" FormattedTextField pnrParam = new FormattedTextField("^\\d{6}-\\d{4}$"); pnrParam.setPromptText("XXXXXX-XXXX"); GridPane.setConstraints(pnrParam, 1, 1); // Label for fnameParam Label fnameLabel = new Label("*Förnamn:"); GridPane.setConstraints(fnameLabel, 0, 2); // First name TextField TextField fnameParam = new TextField(); fnameParam.setPromptText("t.ex. Arne"); GridPane.setConstraints(fnameParam, 1, 2); // Label for snameParam Label snameLabel = new Label("*Efternamn:"); GridPane.setConstraints(snameLabel, 0, 3); // Surname TextField TextField snameParam = new TextField(); snameParam.setPromptText("t.ex. Andersson"); GridPane.setConstraints(snameParam, 1, 3); // Label for addrParam Label addrLabel = new Label("*Adress:"); GridPane.setConstraints(addrLabel, 0, 4); // Address TextField TextField addrParam = new TextField(); addrParam.setPromptText("t.ex. Storgatan 1"); GridPane.setConstraints(addrParam, 1, 4); // Label for mailParam Label mailLabel = new Label("E-post:"); GridPane.setConstraints(mailLabel, 0, 5); // Mail TextField TextField mailParam = new TextField(); mailParam.setPromptText("*****@*****.**"); GridPane.setConstraints(mailParam, 1, 5); // Label for cellParam Label cellLabel = new Label("Mobilnummer:"); GridPane.setConstraints(cellLabel, 0, 6); // cellParam is forced by regular expression to "3 digits"-"dash"-"7 digits" FormattedTextField cellParam = new FormattedTextField("^\\d{3}-\\d{7}$"); cellParam.setPromptText("XXX-XXXXXXX"); GridPane.setConstraints(cellParam, 1, 6); // This Label displays user information such as errors and confirmations. Label executeLabel = new Label(); GridPane.setConstraints(executeLabel, 1, 8); // Adding Button "Registrera" with a lot of functionality Button s2b2 = new Button("Registrera"); GridPane.setConstraints(s2b2, 1, 7); s2b2.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { // First if-statement checks for data in required fields. // Required: pnrParam, fnameParam, lnameParam and addrParam. if ((pnrParam.getText() != null && !pnrParam.getText().isEmpty()) && (fnameParam.getText() != null && !fnameParam.getText().isEmpty()) && (snameParam.getText() != null && !snameParam.getText().isEmpty()) && (addrParam.getText() != null && !addrParam.getText().isEmpty())) { // Second if-statement calls checkPnr() to see if pnrParam (Personnummer) // is unique in database. If unique, checkPnr() returns False. // If !checkPnr = True, all data is valid and we run insertStamkund if (!checkPnr(pnrParam.getText())) { // Calls insertStamkund() with data from all TextFields. // Saves card number to integer cardParam. int cardParam = insertStamkund( pnrParam.getText(), fnameParam.getText(), snameParam.getText(), addrParam.getText(), mailParam.getText(), cellParam.getText()); // Converts cardParam value to String c. // Prints a welcoming and customer card number. String c = String.valueOf(cardParam); executeLabel.setText( "Välkommen som stamkund hos Icooköp!\n" + "Ditt kortnummer är: " + c); // Clear TextFields pnrParam.clear(); fnameParam.clear(); snameParam.clear(); addrParam.clear(); mailParam.clear(); cellParam.clear(); } // If !checkPnr = False, pnrParam is already in database and user is notified. else { executeLabel.setText( "Personnumret finns redan registrerat!\n" + "Välj ett annat tack."); } } // If any required fields are empty, user is notified. else { executeLabel.setText("Fyll i alla obligatoriska fält!"); } } }); // Button for clearing data in all TextFields and executeLabel Button s2b3 = new Button("Rensa fält"); GridPane.setConstraints(s2b3, 0, 7); s2b3.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { pnrParam.clear(); fnameParam.clear(); snameParam.clear(); addrParam.clear(); mailParam.clear(); cellParam.clear(); executeLabel.setText(null); } }); // Adding buttons to left and top menus scene2leftMenu.getChildren().addAll(s2b1, s2q1); scene2topMenu.getChildren().add(labelScene2); // Adding Labels and TextFields to scene 2 center grid s2grid .getChildren() .addAll( oblLabel, pnrLabel, pnrParam, fnameLabel, fnameParam, snameLabel, snameParam, addrLabel, addrParam, mailLabel, mailParam, cellLabel, cellParam, s2b2, s2b3, executeLabel); // Creating BorderPane object and aligning left, top and center content BorderPane Borderpane2 = new BorderPane(); Borderpane2.setLeft(scene2leftMenu); Borderpane2.setTop(scene2topMenu); Borderpane2.setCenter(s2grid); // Setting scene 2 using BorderPane2. Both scenes have identical dimensions. scene2 = new Scene(Borderpane2, 700, 500); // Setting primary scene and display window window.setScene(scene1); window.show(); }