In: Computer Science
HW1 code
sample.fxml
<?import javafx.geometry.Insets?> <?import javafx.scene.layout.GridPane?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.control.TextField?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.control.ToggleGroup?> <?import javafx.scene.control.RadioButton?> <?import javafx.scene.control.CheckBox?> <?import javafx.scene.control.ComboBox?> <?import javafx.collections.*?> <?import java.lang.String?> <?import javafx.collections.FXCollections?> <?import javafx.collections.FXCollections?> <?import javafx.scene.text.Font?> <GridPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml" alignment="TOP_CENTER" hgap="10" vgap="10"> <columnConstraints> <ColumnConstraints percentWidth="50"/> <ColumnConstraints percentWidth="50"/> </columnConstraints> <padding> <Insets topRightBottomLeft="5"/> </padding> <Label GridPane.rowIndex="0" GridPane.columnIndex="0" text="Name"> </Label> <Label GridPane.rowIndex="1" GridPane.columnIndex="0" text="Street" > </Label> <Label GridPane.rowIndex="2" GridPane.columnIndex="0" text="City"> </Label> <Label GridPane.rowIndex="3" GridPane.columnIndex="0" text="State" > </Label> <Label GridPane.rowIndex="4" GridPane.columnIndex="0" text="Zip" > </Label> <Label GridPane.rowIndex="5" GridPane.columnIndex="0" text="Choose One" > </Label> <Label GridPane.rowIndex="6" GridPane.columnIndex="0" text="Type of Music" > </Label> <Label GridPane.rowIndex="7" GridPane.columnIndex="0" text="Type of App" > </Label> <Label GridPane.rowIndex="8" GridPane.columnIndex="0" text="Enter Title"> </Label> <Label GridPane.rowIndex="9" GridPane.columnIndex="0" text="Date Purchased" > </Label> <Label GridPane.rowIndex="10" GridPane.columnIndex="0" text="Account Number" > </Label> <Button text="SUBMIT" GridPane.rowIndex="11" GridPane.columnIndex="0" prefWidth="Infinity" style ="-fx-background-radius:30"/> <Button text="FINISH" GridPane.rowIndex="11" GridPane.columnIndex="1" prefWidth="Infinity" style ="-fx-background-radius:30"/> <TextField GridPane.rowIndex="0" GridPane.columnIndex="1"/> <TextField GridPane.rowIndex="1" GridPane.columnIndex="1"/> <TextField GridPane.rowIndex="2" GridPane.columnIndex="1"/> <TextField GridPane.rowIndex="3" GridPane.columnIndex="1"/> <TextField GridPane.rowIndex="4" GridPane.columnIndex="1"/> <TextField GridPane.rowIndex="8" GridPane.columnIndex="1"/> <TextField GridPane.rowIndex="9" GridPane.columnIndex="1"/> <TextField GridPane.rowIndex="10" GridPane.columnIndex="1"/> <HBox GridPane.rowIndex ="7" GridPane.columnIndex="1"> <fx:define> <ToggleGroup fx:id="ToggleGroup"/> </fx:define> <RadioButton text="GAME" toggleGroup="$ToggleGroup" prefWidth="120"/> <RadioButton text="PRODUCTIVITY" toggleGroup="$ToggleGroup" prefWidth="120"/> <RadioButton text="EDUCATION" toggleGroup="$ToggleGroup" prefWidth="120"/> </HBox> <HBox GridPane.rowIndex="5" GridPane.columnIndex="1"> <CheckBox fx:id ="appButton" text="APP" prefWidth="175" /> <CheckBox fx:id="musicButton" text="MUSIC" prefWidth="175" /> </HBox> <ComboBox fx:id="chooseOne" GridPane.rowIndex="6" GridPane.columnIndex ="1" > <items> <FXCollections fx:factory="observableArrayList"> <String fx:value="CHOOSE ONE"/> <String fx:value="My very first favorite kind of music are R n B and Pop Ballad"/> <String fx:value="My very second favorite kind if music is Rock n roll and Rap"/> </FXCollections> </items> <value> <String fx:value="CHOOSE ONE"/> </value> </ComboBox> </GridPane>
module-info.java
module HW2 { requires javafx.fxml; requires javafx.controls; opens sample; }
main.java
package sample; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(root, 800, 390)); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
controller.java
package sample;
public class Controller{ }
Question The user will enter the data and click the SUBMIT button for each customer. On each submit, your program will check to make sure that data was entered in each field. If not, you must tell the user what is missing and place the cursor in that field. Once all data is entered, a new customer will be created and added to the customer array. Data will be stored in app.txt file If APP box is checked and data will be stored in music.txt file if the MUSIC box is checked. You will then clear all fields and set the focus in the name field. When completely finished, the user will click the FINISH button and program will terminat
main.java
package sample; //importing all required classes import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(root, 800, 420)); primaryStage.show(); } // Starting application public static void main(String[] args) { launch(args); } }
sample.fxml
<?import javafx.geometry.Insets?> <?import javafx.scene.layout.GridPane?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.control.TextField?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.control.ToggleGroup?> <?import javafx.scene.control.RadioButton?> <?import javafx.scene.control.CheckBox?> <?import javafx.scene.control.ComboBox?> <?import javafx.collections.*?> <?import java.lang.String?> <?import javafx.collections.FXCollections?> <?import javafx.collections.FXCollections?> <?import javafx.scene.text.Font?> <!--gird pane with controller--> <GridPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml" alignment="TOP_CENTER" hgap="10" vgap="10"> <columnConstraints> <ColumnConstraints percentWidth="50"/> <ColumnConstraints percentWidth="50"/> </columnConstraints> <padding> <Insets topRightBottomLeft="5"/> </padding> <Label GridPane.rowIndex="0" GridPane.columnIndex="0" text="Name"> </Label> <Label GridPane.rowIndex="1" GridPane.columnIndex="0" text="Street" > </Label> <Label GridPane.rowIndex="2" GridPane.columnIndex="0" text="City"> </Label> <Label GridPane.rowIndex="3" GridPane.columnIndex="0" text="State" > </Label> <Label GridPane.rowIndex="4" GridPane.columnIndex="0" text="Zip" > </Label> <Label GridPane.rowIndex="5" GridPane.columnIndex="0" text="Choose One" > </Label> <Label GridPane.rowIndex="6" GridPane.columnIndex="0" text="Type of Music" > </Label> <Label GridPane.rowIndex="7" GridPane.columnIndex="0" text="Type of App" > </Label> <Label GridPane.rowIndex="8" GridPane.columnIndex="0" text="Enter Title"> </Label> <Label GridPane.rowIndex="9" GridPane.columnIndex="0" text="Date Purchased" > </Label> <Label GridPane.rowIndex="10" GridPane.columnIndex="0" text="Account Number" > </Label> <Button text="SUBMIT" GridPane.rowIndex="11" GridPane.columnIndex="0" prefWidth="Infinity" style ="-fx-background-radius:30" onAction="#dataProcess"/> <Button text="FINISH" GridPane.rowIndex="11" GridPane.columnIndex="1" prefWidth="Infinity" style ="-fx-background-radius:30" onAction="#exit"/> <!-- Here all text field is written--> <TextField GridPane.rowIndex="0" GridPane.columnIndex="1" fx:id="name"/> <TextField GridPane.rowIndex="1" GridPane.columnIndex="1" fx:id="street"/> <TextField GridPane.rowIndex="2" GridPane.columnIndex="1" fx:id="city"/> <TextField GridPane.rowIndex="3" GridPane.columnIndex="1" fx:id="state"/> <TextField GridPane.rowIndex="4" GridPane.columnIndex="1" fx:id="zip"/> <TextField GridPane.rowIndex="8" GridPane.columnIndex="1" fx:id="title"/> <TextField GridPane.rowIndex="9" GridPane.columnIndex="1" fx:id="purchase_date"/> <TextField GridPane.rowIndex="10" GridPane.columnIndex="1" fx:id="acc_no"/> <!-- Grid Pane in HBox --> <HBox GridPane.rowIndex ="7" GridPane.columnIndex="1"> <fx:define> <ToggleGroup fx:id="ToggleGroup"/> </fx:define> <RadioButton text="GAME" toggleGroup="$ToggleGroup" prefWidth="120"/> <RadioButton text="PRODUCTIVITY" toggleGroup="$ToggleGroup" prefWidth="120"/> <RadioButton text="EDUCATION" toggleGroup="$ToggleGroup" prefWidth="120"/> </HBox> <HBox GridPane.rowIndex="5" GridPane.columnIndex="1"> <CheckBox fx:id ="appButton" text="APP" prefWidth="175" /> <CheckBox fx:id="musicButton" text="MUSIC" prefWidth="175" /> </HBox> <!-- Combo box--> <ComboBox fx:id="chooseOne" GridPane.rowIndex="6" GridPane.columnIndex ="1" > <items> <FXCollections fx:factory="observableArrayList"> <String fx:value="CHOOSE ONE"/> <String fx:value="My very first favorite kind of music are R n B and Pop Ballad"/> <String fx:value="My very second favorite kind if music is Rock n roll and Rap"/> </FXCollections> </items> <value> <String fx:value="CHOOSE ONE"/> </value> </ComboBox> </GridPane>
Controller.java
package sample; // importing required packages and classes import javafx.application.Platform; import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.control.Alert.AlertType; import java.io.BufferedWriter; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; public class Controller { @FXML public TextField name; @FXML public TextField street; @FXML public TextField city; @FXML public TextField state; @FXML public TextField zip; @FXML public TextField title; @FXML public TextField purchase_date; @FXML public TextField acc_no; @FXML public CheckBox appButton; @FXML public CheckBox musicButton; @FXML public ComboBox chooseOne; @FXML ToggleGroup ToggleGroup; String n,s,c,st,z,choose_one,app_btn,m_btn,t,p_date,ac_no; // creating new alert object Alert alert = new Alert(Alert.AlertType.NONE); // for file to create String file_name; // to exit the application public void exit() { Platform.exit(); System.exit(0); } public void dataProcess() { String[] customer = new String[11]; // creating customer array // get text from name field store it to n n= name.getText(); // get text from street field store it to s s= street.getText(); // get text from city field store it to c c= city.getText(); // get text from state field store it to st st= state.getText(); // get text from zip field store it to z z= zip.getText(); // get value from appButton checkbox store it to app_btn app_btn = appButton.getText(); // get value from musicButton checkbox store it to m_btn m_btn = musicButton.getText(); // get value from Choose one combo box store it to choose_one choose_one = chooseOne.getValue().toString(); // get radio button from toggle group and store it to radiobutton RadioButton radioButton = (RadioButton) ToggleGroup.getSelectedToggle(); // get text from title field store it to t t= title.getText(); // get text from purchase_date field store it to p_date p_date= purchase_date.getText(); // get text from acc_no field store it to ac_no ac_no= acc_no.getText(); // checking name is empty or not "you can use regex for more valid input" if(n.isEmpty()) { showAlert("Enter your name!!"); //showing alert name.requestFocus(); // } else if(s.isEmpty()) {// checking street is empty or not showAlert("Enter your street!!"); //showing alert street.requestFocus(); // returning focus to the current field } else if(c.isEmpty()) {// checking city is empty or not showAlert("Enter your city!!"); //showing alert city.requestFocus(); // returning focus to the current field } else if(st.isEmpty()) {// checking state is empty or not showAlert("Enter your state!!"); //showing alert state.requestFocus(); // returning focus to the current field } else if(z.isEmpty()) {// checking zip is empty or not showAlert("Enter your zip!!"); //showing alert zip.requestFocus(); // returning focus to the current field } else if(!appButton.isSelected() && !musicButton.isSelected()) { // checking both checkbox is not selected or not showAlert("Select Choose One Music or App"); //showing alert appButton.requestFocus(); // returning focus to the current field } else if(appButton.isSelected() && musicButton.isSelected()) {// checking both checkbox is selected or not showAlert("Select Choose One Music or App"); //showing alert appButton.requestFocus(); // returning focus to the current field } else if(choose_one.equals("CHOOSE ONE")) { // checking selected first item is "CHOOSE ONE" or not showAlert("Select valid option"); //showing alert chooseOne.requestFocus(); // returning focus to the current field } else if(radioButton== null) // checking radio button is null { showAlert("Select Type of app"); //showing alert } else if(t.isEmpty()) { // checking title is empty or not showAlert("Enter your Title!!"); //showing alert title.requestFocus(); // returning focus to the current field } else if(p_date.isEmpty()) { // checking purchase date is empty or not showAlert("Enter your Purchase Date!!"); //showing alert purchase_date.requestFocus(); // returning focus to the current field } else if(ac_no.isEmpty()) { // checking account no is empty or not showAlert("Enter your Accoutn no!!"); //showing alert acc_no.requestFocus(); // returning focus to the current field } else { // checking which check box is selected if(appButton.isSelected()) { // if appButton is selected then customer[6]=app_btn; file_name="app.txt"; }else if(musicButton.isSelected()) { // if musicButton is selected then customer[6]=m_btn; file_name="music.txt"; } // assigning fields value in customer array with index based customer[0]=n; // name customer[1]=s; // street customer[2]=c; // city customer[3]=st; // state customer[4]=z; // zip customer[5]=choose_one; // CHOOSE ONE customer[7]=radioButton.getText(); // Type of app customer[8]=t; // title customer[9]=p_date; // purchase date customer[10]=ac_no; // account no createFile(customer); // creating file } } private void createFile(String[] customer) { // assigning path name with file name Path path = Paths.get(file_name); StringBuilder stringBuilder = new StringBuilder(); // appending customer array in one line with space "You can replace with \t with your requirement" for(int i=0;i<11;i++) stringBuilder.append(customer[i]+"\t\t"); stringBuilder.append("\n"); try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8, StandardOpenOption.APPEND, StandardOpenOption.CREATE)) { writer.write(stringBuilder.toString()); } catch (IOException e) { e.printStackTrace(); } // clearing all fields clearFields(); name.requestFocus(); // Returning focus to name field } // This function will show alert public void showAlert(String text){ // type of error alert.setAlertType(AlertType.ERROR); // error text alert.setContentText(text); alert.show(); } // resetting all fields public void clearFields(){ name.clear(); // name field clear street.clear(); // street field clear city.clear(); // city field clear state.clear(); // state field clear zip.clear(); // zip field clear appButton.setSelected(false); musicButton.setSelected(false); chooseOne.getSelectionModel().select(0); ToggleGroup.getSelectedToggle().setSelected(false); title.clear(); // title field clear purchase_date.clear(); // purchase date field clear acc_no.clear(); // account no field clear } }
Output
error..
complete data
code output
main.java
smaple.fxml
Controller.java