I created my first java application for a college assignment. I tried my best to design my application using best practices of MVC design patterns. I have read about it on Stack Overflow and other sites. My question basically is: Do I follow the best practices? Every feedback is much appreciated. Below is my code.
View
I have two views, one for the main view and one for updating the credentials.
Main View
package wolffsoft.addressmanagermvcjavafxview.ui;
wolffsoft.addressmanagermvcjavafx.ui.listeners.MainWindowEventHandlerAddMVCJavaFZView;
import wolffsoft.addressmanagermvcjavafx.ui.listeners.MainWindowEventHandlerClearSearchMVCJavaFXView;
import wolffsoft.addressmanagermvcjavafx.ui.listeners.MainWindowEventHandlerOpenUpdateMVCJavaFXView;
import wolffsoft.addressmanagermvcjavafx.ui.listeners.MainWindowEventHandlerRemoveMVCJavaFXView;
import wolffsoft.addressmanagermvcjavafx.ui.listeners.MainWindowEventHandlerSearchMVCJavaFXView;
public class AddressManagerMVCJavaFXView {
//private final AddressManagerMVCJavaFXModel model = new AddressManagerMVCJavaFXModel();
private final AddressManagerMVCUpdateJavaFXView setUpdateV = new AddressManagerMVCUpdateJavaFXView();
private final Button add = new Button("Add Credentails");
private final Button search = new Button("Search Credentails");
private final Button delete = new Button("Delete Credentails");
private final Button clearSearch = new Button("Clear Credentails");
private final Button updateView = new Button("Update Credentails");
private final Label inputFields = new Label("Wolff Address Manager Input Credentials");
private final Label wolffAddressManager = new Label("Wolff Address Manager Show Credentials");
private final Label companyNameLabel = new Label("Company Name:");
private final Label firstNameLabel = new Label("First Name:");
private final Label lastNameLabel = new Label("Last Name:");
private final Label emailAddressLabel = new Label("Email Address:");
private final Label reTypeEmailAddressLabel = new Label("Re-type Email Address:");
private final Label streetNumberLabel = new Label("Street / Number / Add:");
private final Label zipcodeCityLabel = new Label("ZipCide / City:");
private final Label searchEmailAddressLabel = new Label("Email Address:");
private final Label deleteEmailAddressLabel = new Label("Email Address:");
private final TextField companyNameTextField = new TextField();
private final TextField firstNameTextField = new TextField();
private final TextField lastNameTextField = new TextField();
private final TextField emailAddressTextField = new TextField();
private final TextField reTypeEmailAddressTextField = new TextField();
private final TextField streetTextField = new TextField();
private final TextField numberTextField = new TextField();
private final TextField additiveTextField = new TextField();
private final TextField zipCodeTextField = new TextField();
private final TextField cityTextField = new TextField();
private final TextField searchEmailAddressTextField = new TextField();
private final TextField deleteEmailAddressTextField = new TextField();
private final TextArea textArea = new TextArea();
private final Pane rootPane = new Pane();
private final Pane pane1 = new Pane();
private final Pane pane2 = new Pane();
public void start(Stage primaryStage) {
AddressManagerMVCJavaFXModel model = new AddressManagerMVCJavaFXModel();
// buttons for pane1
add.setPrefSize(380, 20);
add.setLayoutX(10.0);
add.setLayoutY(240.0);
add.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
EventHandler addCredentails = new MainWindowEventHandlerAddMVCJavaFZView(this, companyNameTextField, firstNameTextField, lastNameTextField, emailAddressTextField, reTypeEmailAddressTextField, streetTextField, numberTextField, additiveTextField, zipCodeTextField, cityTextField);
add.setOnAction(addCredentails);
search.setPrefSize(380, 20);
search.setLayoutX(10.0);
search.setLayoutY(330.0);
search.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
EventHandler searchCredentials = new MainWindowEventHandlerSearchMVCJavaFXView(this, searchEmailAddressTextField);
search.setOnAction(searchCredentials);
delete.setPrefSize(380, 20);
delete.setLayoutX(10.0);
delete.setLayoutY(410.0);
delete.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
EventHandler deleteCredentials = new MainWindowEventHandlerRemoveMVCJavaFXView(deleteEmailAddressTextField);
delete.setOnAction(deleteCredentials);
clearSearch.setPrefSize(380, 20);
clearSearch.setLayoutX(10.0);
clearSearch.setLayoutY(470.0);
clearSearch.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
EventHandler clear = new MainWindowEventHandlerClearSearchMVCJavaFXView(this);
clearSearch.setOnAction(clear);
updateView.setPrefSize(380, 20);
updateView.setLayoutX(10.0);
updateView.setLayoutY(530.0);
updateView.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
EventHandler setUpdateView = new MainWindowEventHandlerOpenUpdateMVCJavaFXView(setUpdateV);
updateView.setOnAction(setUpdateView);
// Labels for pane1
companyNameLabel.setPrefSize(100, 30);
companyNameLabel.setLayoutX(10.0);
companyNameLabel.setLayoutY(20.0);
firstNameLabel.setPrefSize(100, 30);
firstNameLabel.setLayoutX(10.0);
firstNameLabel.setLayoutY(50.0);
lastNameLabel.setPrefSize(100, 30);
lastNameLabel.setLayoutX(10.0);
lastNameLabel.setLayoutY(80.0);
emailAddressLabel.setPrefSize(100, 30);
emailAddressLabel.setLayoutX(10.0);
emailAddressLabel.setLayoutY(110.0);
reTypeEmailAddressLabel.setPrefSize(140, 30);
reTypeEmailAddressLabel.setLayoutX(10.0);
reTypeEmailAddressLabel.setLayoutY(140.0);
streetNumberLabel.setPrefSize(140, 30);
streetNumberLabel.setLayoutX(10.0);
streetNumberLabel.setLayoutY(170.0);
zipcodeCityLabel.setPrefSize(100, 30);
zipcodeCityLabel.setLayoutX(10.0);
zipcodeCityLabel.setLayoutY(200.0);
searchEmailAddressLabel.setPrefSize(100, 30);
searchEmailAddressLabel.setLayoutX(10.0);
searchEmailAddressLabel.setLayoutY(290.0);
deleteEmailAddressLabel.setPrefSize(100, 30);
deleteEmailAddressLabel.setLayoutX(10.0);
deleteEmailAddressLabel.setLayoutY(370.0);
// TextFields for pane1
companyNameTextField.setPrefSize(245, 20);
companyNameTextField.setLayoutX(145);
companyNameTextField.setLayoutY(20.0);
companyNameTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
firstNameTextField.setPrefSize(245, 20);
firstNameTextField.setLayoutX(145.0);
firstNameTextField.setLayoutY(50.0);
firstNameTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
lastNameTextField.setPrefSize(245, 20.0);
lastNameTextField.setLayoutX(145.0);
lastNameTextField.setLayoutY(80.0);
lastNameTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
emailAddressTextField.setPrefSize(245, 20.0);
emailAddressTextField.setLayoutX(145.0);
emailAddressTextField.setLayoutY(110.0);
emailAddressTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
reTypeEmailAddressTextField.setPrefSize(245, 20);
reTypeEmailAddressTextField.setLayoutX(145.0);
reTypeEmailAddressTextField.setLayoutY(140.0);
reTypeEmailAddressTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
streetTextField.setPrefSize(142.5, 20);
streetTextField.setLayoutX(145.0);
streetTextField.setLayoutY(170.0);
streetTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
numberTextField.setPrefSize(43, 20);
numberTextField.setLayoutX(297.5);
numberTextField.setLayoutY(170.0);
numberTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
additiveTextField.setPrefSize(40, 20);
additiveTextField.setLayoutX(350.5);
additiveTextField.setLayoutY(170.0);
additiveTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
zipCodeTextField.setPrefSize(117.5, 20);
zipCodeTextField.setLayoutX(145.0);
zipCodeTextField.setLayoutY(200.0);
zipCodeTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
cityTextField.setPrefSize(117.5, 20);
cityTextField.setLayoutX(272.5);
cityTextField.setLayoutY(200.0);
cityTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
searchEmailAddressTextField.setPrefSize(245, 20);
searchEmailAddressTextField.setLayoutX(145.0);
searchEmailAddressTextField.setLayoutY(290.0);
searchEmailAddressTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
deleteEmailAddressTextField.setPrefSize(245, 20);
deleteEmailAddressTextField.setLayoutX(145.0);
deleteEmailAddressTextField.setLayoutY(370.0);
deleteEmailAddressTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
// set pane1 lay-out
pane1.setLayoutX(10.0);
pane1.setLayoutY(20.0);
pane1.setPrefSize(400, 635);
pane1.setPadding(new Insets(20.0, 20.0, 20.0, 20.0));
pane1.setStyle("-fx-background-color: lightgrey; -fx-background-radius: 10px; -fx-effect: innershadow(two-pass-box, gray, 5, 0.5, 1, 1);");
// add Labels to pane1
pane1.getChildren().add(companyNameLabel);
pane1.getChildren().add(firstNameLabel);
pane1.getChildren().add(lastNameLabel);
pane1.getChildren().add(emailAddressLabel);
pane1.getChildren().add(reTypeEmailAddressLabel);
pane1.getChildren().add(streetNumberLabel);
pane1.getChildren().add(zipcodeCityLabel);
pane1.getChildren().add(add);
pane1.getChildren().add(searchEmailAddressLabel);
pane1.getChildren().add(search);
pane1.getChildren().add(deleteEmailAddressLabel);
pane1.getChildren().add(delete);
pane1.getChildren().add(clearSearch);
pane1.getChildren().add(updateView);
// add TextFields to pane1
pane1.getChildren().add(companyNameTextField);
pane1.getChildren().add(firstNameTextField);
pane1.getChildren().add(lastNameTextField);
pane1.getChildren().add(emailAddressTextField);
pane1.getChildren().add(reTypeEmailAddressTextField);
pane1.getChildren().add(streetTextField);
pane1.getChildren().add(numberTextField);
pane1.getChildren().add(additiveTextField);
pane1.getChildren().add(zipCodeTextField);
pane1.getChildren().add(cityTextField);
pane1.getChildren().add(searchEmailAddressTextField);
pane1.getChildren().add(deleteEmailAddressTextField);
// set Pane for adding TextArea
pane2.setLayoutX(430.0);
pane2.setLayoutY(20.0);
pane2.setPrefSize(360, 635);
pane2.setStyle("-fx-background-color: lightgrey; -fx-background-radius: 10px; -fx-effect: innershadow(two-pass-box, gray, 5, 0.5, 1, 1);");
textArea.setLayoutX(10.0);
textArea.setLayoutY(15.0);
textArea.setPrefSize(340, 605);
textArea.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
pane2.getChildren().add(textArea);
//set label on rootPane for pane1, pane2
inputFields.setLayoutX(10.0);
inputFields.setLayoutY(0.0);
wolffAddressManager.setLayoutX(430.0);
wolffAddressManager.setLayoutY(0.0);
// rootPane for adding 2 panes
rootPane.setStyle("-fx-background-color: lightgrey;");
// add panes, nodes to rootPane
rootPane.getChildren().addAll(pane1, pane2, wolffAddressManager, inputFields);
model.setRootPane(rootPane);
model.setScene(new Scene(model.getRootPane(), 800, 675));
rootPane.getChildren().removeAll();
primaryStage.setTitle("Wolff Address Manager");
primaryStage.setScene(model.getScene());
primaryStage.show();
}
public void setTextArea(String text) {
textArea.setText(text);
}
public String getTextArea() {
return textArea.getText();
}
}
Update Credentials View
package wolffsoft.addressmanagermvcjavafxview.ui;
public class AddressManagerMVCUpdateJavaFXView extends Stage {
private final AddressManagerMVCJavaFXModel model = new AddressManagerMVCJavaFXModel();
private final Button clearTextArea = new Button("Clear TextView");
private final Button updateCredentails = new Button("Update Credentails");
private final Label inputFields = new Label("Wolff Address Manager Input Credentials");
private final Label wolffAddressManager = new Label("Wolff Address Manager Show Credentials");
private final Label emailCheckUpdateLabel = new Label("Email for Update:");
private final Label companyNameLabel = new Label("Company Name:");
private final Label firstNameLabel = new Label("First Name:");
private final Label lastNameLabel = new Label("Last Name:");
private final Label emailAddressLabel = new Label("Email Address:");
private final Label streetNumberLabel = new Label("Street / Number / Add:");
private final Label zipcodeCityLabel = new Label("ZipCide / City:");
private final TextField emailCheckUpdateTextField = new TextField();
private final TextField companyNameTextField = new TextField();
private final TextField firstNameTextField = new TextField();
private final TextField lastNameTextField = new TextField();
private final TextField emailAddressTextField = new TextField();
private final TextField streetTextField = new TextField();
private final TextField numberTextField = new TextField();
private final TextField additiveTextField = new TextField();
private final TextField zipCodeTextField = new TextField();
private final TextField cityTextField = new TextField();
private final TextArea textArea = new TextArea();
private final Pane paneUpdate = new Pane();
private final Pane paneUpdate1 = new Pane();
private final Pane paneUpdate2 = new Pane();
public Scene createScene() {
// buttons for paneUpdate1
updateCredentails.setPrefSize(380, 20);
updateCredentails.setLayoutX(10.0);
updateCredentails.setLayoutY(250.0);
updateCredentails.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
EventHandler updateCredentials = new UpdateWindowEventHandlerUpdateMVCJavaFXView(this, emailCheckUpdateTextField, companyNameTextField, firstNameTextField, lastNameTextField, emailAddressTextField, streetTextField, numberTextField, additiveTextField, zipCodeTextField, cityTextField);
updateCredentails.setOnAction(updateCredentials);
clearTextArea.setPrefSize(380, 20);
clearTextArea.setLayoutX(10.0);
clearTextArea.setLayoutY(290.0);
clearTextArea.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
EventHandler clear = new UpdateViewEventHandlerClearSearchMVCJavaFXView(this);
clearTextArea.setOnAction(clear);
// Labels paneUpdate1
emailCheckUpdateLabel.setPrefSize(140, 30);
emailCheckUpdateLabel.setLayoutX(10.0);
emailCheckUpdateLabel.setLayoutY(20.0);
companyNameLabel.setPrefSize(100, 30);
companyNameLabel.setLayoutX(10.0);
companyNameLabel.setLayoutY(50.0);
firstNameLabel.setPrefSize(100, 30);
firstNameLabel.setLayoutX(10.0);
firstNameLabel.setLayoutY(80.0);
lastNameLabel.setPrefSize(100, 30);
lastNameLabel.setLayoutX(10.0);
lastNameLabel.setLayoutY(110.0);
emailAddressLabel.setPrefSize(100, 30);
emailAddressLabel.setLayoutX(10.0);
emailAddressLabel.setLayoutY(140.0);
streetNumberLabel.setPrefSize(140, 30);
streetNumberLabel.setLayoutX(10.0);
streetNumberLabel.setLayoutY(170.0);
zipcodeCityLabel.setPrefSize(100, 30);
zipcodeCityLabel.setLayoutX(10.0);
zipcodeCityLabel.setLayoutY(200.0);
// TextFields paneUpdate1
emailCheckUpdateTextField.setPrefSize(245, 20);
emailCheckUpdateTextField.setLayoutX(145.0);
emailCheckUpdateTextField.setLayoutY(20.0);
emailCheckUpdateTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
companyNameTextField.setPrefSize(245, 20);
companyNameTextField.setLayoutX(145);
companyNameTextField.setLayoutY(50.0);
companyNameTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
firstNameTextField.setPrefSize(245, 20);
firstNameTextField.setLayoutX(145.0);
firstNameTextField.setLayoutY(80.0);
firstNameTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
lastNameTextField.setPrefSize(245, 20.0);
lastNameTextField.setLayoutX(145.0);
lastNameTextField.setLayoutY(110.0);
lastNameTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
emailAddressTextField.setPrefSize(245, 20.0);
emailAddressTextField.setLayoutX(145.0);
emailAddressTextField.setLayoutY(140.0);
emailAddressTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
streetTextField.setPrefSize(142.5, 20);
streetTextField.setLayoutX(145.0);
streetTextField.setLayoutY(170.0);
streetTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
numberTextField.setPrefSize(43, 20);
numberTextField.setLayoutX(297.5);
numberTextField.setLayoutY(170.0);
numberTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
additiveTextField.setPrefSize(40, 20);
additiveTextField.setLayoutX(350.5);
additiveTextField.setLayoutY(170.0);
additiveTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
zipCodeTextField.setPrefSize(117.5, 20);
zipCodeTextField.setLayoutX(145.0);
zipCodeTextField.setLayoutY(200.0);
zipCodeTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
cityTextField.setPrefSize(117.5, 20);
cityTextField.setLayoutX(272.5);
cityTextField.setLayoutY(200.0);
cityTextField.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
// set paneUpdate1 lay-out
paneUpdate1.setLayoutX(10.0);
paneUpdate1.setLayoutY(20.0);
paneUpdate1.setPrefSize(400, 635);
paneUpdate1.setPadding(new Insets(20.0, 20.0, 20.0, 20.0));
paneUpdate1.setStyle("-fx-background-color: lightgrey; -fx-background-radius: 10px; -fx-effect: innershadow(two-pass-box, gray, 5, 0.5, 1, 1);");
// add Buttons To paneUpdate1
paneUpdate1.getChildren().add(updateCredentails);
paneUpdate1.getChildren().add(clearTextArea);
// add Labels to paneUpdate1
paneUpdate1.getChildren().add(emailCheckUpdateLabel);
paneUpdate1.getChildren().add(companyNameLabel);
paneUpdate1.getChildren().add(firstNameLabel);
paneUpdate1.getChildren().add(lastNameLabel);
paneUpdate1.getChildren().add(emailAddressLabel);
paneUpdate1.getChildren().add(streetNumberLabel);
paneUpdate1.getChildren().add(zipcodeCityLabel);
// add TextFields to pane1
paneUpdate1.getChildren().add(emailCheckUpdateTextField);
paneUpdate1.getChildren().add(companyNameTextField);
paneUpdate1.getChildren().add(firstNameTextField);
paneUpdate1.getChildren().add(lastNameTextField);
paneUpdate1.getChildren().add(emailAddressTextField);
paneUpdate1.getChildren().add(streetTextField);
paneUpdate1.getChildren().add(numberTextField);
paneUpdate1.getChildren().add(additiveTextField);
paneUpdate1.getChildren().add(zipCodeTextField);
paneUpdate1.getChildren().add(cityTextField);
// set Pane for adding TextArea
paneUpdate2.setLayoutX(430.0);
paneUpdate2.setLayoutY(20.0);
paneUpdate2.setPrefSize(360, 635);
paneUpdate2.setStyle("-fx-background-color: lightgrey; -fx-background-radius: 10px; -fx-effect: innershadow(two-pass-box, gray, 5, 0.5, 1, 1);");
textArea.setLayoutX(10.0);
textArea.setLayoutY(15.0);
textArea.setPrefSize(340, 605);
textArea.setStyle("-fx-effect: innershadow(two-pass-box, gray, 5, 0.3, 1, 1);");
paneUpdate2.getChildren().add(textArea);
// set label on paneUpdate for paneUpdate1, paneUpdate2
inputFields.setLayoutX(10.0);
inputFields.setLayoutY(0.0);
wolffAddressManager.setLayoutX(430.0);
wolffAddressManager.setLayoutY(0.0);
// paneUpdate for adding 2 panes
paneUpdate.setStyle("-fx-background-color: lightgrey;");
// add panes, nodes to paneUpdate
paneUpdate.getChildren().addAll(paneUpdate1, paneUpdate2, wolffAddressManager, inputFields);
model.setPaneUpdate(paneUpdate);
model.setSceneUpdate(new Scene(model.getPaneUpdate(), 800, 675));
return model.getSceneUpdate();
}
public void setTextArea(String text) {
textArea.setText(text);
}
public String getTextArea() {
return textArea.getText();
}
}
Then there is my Model I use for both VIEWS
Model
public class AddressManagerMVCJavaFXModel {
private String updateEmailAddress;
private String companyName;
private String firstName;
private String lastName;
private String emailAddress;
private String reTypeEmailAddress;
private String street;
private String number;
private String additive;
private String zipCode;
private String city;
private TextField TextFieldUpdateEmailAddress;
private TextField TextFieldCompanyName;
private TextField TextFieldFirstName;
private TextField TextFieldLastName;
private TextField TextFieldEmailAddress;
private TextField TextFieldReTypeEmailAddress;
private TextField TextFieldStreetName;
private TextField TextFieldHouseNumber;
private TextField TextFieldAdditive;
private TextField TextFieldZipCode;
private TextField TextFieldCityName;
private TextField TextFieldSearchEmailAddress;
private TextField TextFieldRemoveEmailAddress;
private ArrayList<String> searchResultArray = null;
private ArrayList<String> updateResultArray = null;
private Scene scene;
private Scene sceneUpdate;
private Pane rootPane;
private Pane paneUpdate;
// updateView Model
public Scene getSceneUpdate() {
return sceneUpdate;
}
public void setSceneUpdate(Scene sceneUpdate) {
this.sceneUpdate = sceneUpdate;
}
public Pane getPaneUpdate() {
return paneUpdate;
}
public void setPaneUpdate(Pane paneUpdate) {
this.paneUpdate = paneUpdate;
}
// Main view Model
public Pane getRootPane() {
return rootPane;
}
public void setRootPane(Pane rootPane) {
this.rootPane = rootPane;
}
public Scene getScene() {
return scene;
}
public void setScene(Scene scene) {
this.scene = scene;
}
public String getUpdateEmailAddress() {
return updateEmailAddress;
}
public void setUpdateEmailAddress(String updateEmailAddress) {
this.updateEmailAddress = updateEmailAddress;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public String getReTypeEmailAddress() {
return reTypeEmailAddress;
}
public void setReTypeEmailAddress(String reTypeEmailAddress) {
this.reTypeEmailAddress = reTypeEmailAddress;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getAdditive() {
return additive;
}
public void setAdditive(String additive) {
this.additive = additive;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public TextField getTextFieldUpdateEmailAddress() {
return TextFieldUpdateEmailAddress;
}
public void setTextFieldUpdateEmailAddress(TextField updateEmailAddress) {
this.TextFieldUpdateEmailAddress = updateEmailAddress;
}
public TextField getTextFieldCompanyName() {
return TextFieldCompanyName;
}
public void setTextFieldCompanyName(TextField companyName) {
this.TextFieldCompanyName = companyName;
}
public TextField getTextFieldFirstName() {
return TextFieldFirstName;
}
public void setTextFieldFirstName(TextField fName) {
this.TextFieldFirstName = fName;
}
public TextField getTextFieldLastName() {
return TextFieldLastName;
}
public void setTextFieldLastName(TextField lastName) {
this.TextFieldLastName = lastName;
}
public TextField getTextFieldEmailAddress() {
return TextFieldEmailAddress;
}
public void setTextFieldEmailAddress(TextField emailAddress) {
this.TextFieldEmailAddress = emailAddress;
}
public TextField getTextFieldReTypeEmailAddress() {
return TextFieldReTypeEmailAddress;
}
public void setTextFieldReTypeEmailAddress(TextField reTypeEmailAddress) {
this.TextFieldReTypeEmailAddress = reTypeEmailAddress;
}
public TextField getTextFieldStreet() {
return TextFieldStreetName;
}
public void setTextFieldStreet(TextField streetName) {
this.TextFieldStreetName = streetName;
}
public TextField getTextFieldHouseNumber() {
return TextFieldHouseNumber;
}
public void setTextFieldHouseNumber(TextField houseNumber) {
this.TextFieldHouseNumber = houseNumber;
}
public TextField getTextfieldAdditive() {
return TextFieldAdditive;
}
public void setTextFieldAdditive(TextField additive) {
this.TextFieldAdditive = additive;
}
public TextField getTextFieldZipCode() {
return TextFieldZipCode;
}
public void setTexFieldZipCode(TextField zipCode) {
this.TextFieldZipCode = zipCode;
}
public TextField getTextFieldCity() {
return TextFieldCityName;
}
public void setTextFieldCity(TextField cityName){
this.TextFieldCityName = cityName;
}
public TextField getTextFieldSearchEmailAddress(){
return TextFieldSearchEmailAddress;
}
public void setTextFieldSearchEmailAddress(TextField searchEmailAddress) {
this.TextFieldSearchEmailAddress = searchEmailAddress;
}
public TextField getTextFieldRemoveEmailAddress(){
return TextFieldRemoveEmailAddress;
}
public void setTextFieldRemoveEmailAddress(TextField removeEAddress){
this.TextFieldRemoveEmailAddress = removeEAddress;
}
public ArrayList<String> getSearchResultArray() {
return searchResultArray;
}
public void setSearchResultArray(ArrayList searchResultArray) {
this.searchResultArray = searchResultArray;
}
public ArrayList<String> getUpdateResultArray() {
return updateResultArray;
}
public void setUpdateResultArray(ArrayList searchResultArray) {
this.updateResultArray = searchResultArray;
}
}
Next is my controller class. But I'm not so sure if I have put the right things in the controller
Controller
public class AddressManagerMVCJavaFXController {
private final AddressManagerMVCJavaFXModel model;
private final WolffAddressManagerQueriesMVCSERVICES query;
private final AddressManagerMVCJavaFXView view = new AddressManagerMVCJavaFXView();
//private AddressManagerMVCUpdateJavaFXView updateView = new AddressManagerMVCUpdateJavaFXView();
public AddressManagerMVCJavaFXController(AddressManagerMVCJavaFXModel model) {
this.query = new WolffAddressManagerQueriesMVCSERVICES();
this.model = model;
}
public void buildView1(Stage primaryStage) throws Exception {
view.start(primaryStage);
}
public void buildView2() throws Exception {
Stage stage = new Stage();
stage.setTitle("WolffAddressManagerUpdateView");
stage.setScene(new AddressManagerMVCUpdateJavaFXView().createScene());
stage.show();
}
public void addCredentials(AddressManagerMVCJavaFXView view , AddressManagerMVCJavaFXModel model) throws Exception {
if(model.getEmailAddress().equals(model.getReTypeEmailAddress())) {
if(query.saveAddressToDataBase(view, model) == true) {
showCredentials(view);
}
else {
view.setTextArea(view.getTextArea() + "EMAIL ALREADY EXISTS\n\n");
}
} else {
JOptionPane.showMessageDialog(null, "Emailaddresses are not the same", "InfoBox: " + "Error", JOptionPane.INFORMATION_MESSAGE);
}
}
private void showCredentials(AddressManagerMVCJavaFXView view) throws Exception {
DefaultListModel<String> jList = new DefaultListModel();
JList<String> list = new JList(jList);
model.setSearchResultArray(searchCredentials(model));
for(int i = 0; i < model.getSearchResultArray().size(); i++) {
jList.addElement(model.getSearchResultArray().get(i));
}
list.setModel(jList);
int size = list.getModel().getSize();
StringBuilder credentials = new StringBuilder();
for(int i = 0; i < size; i++) {
credentials.append(list.getModel().getElementAt(i)).append("\n");
}
view.setTextArea(view.getTextArea() + credentials.toString()+ "CREDENTIALS ADDED\n\n");
}
public void removeCredentials() throws Exception {
query.removeAddress(model.getEmailAddress());
}
public ArrayList<String> searchCredentials(AddressManagerMVCJavaFXModel model) throws Exception {
return query.searchAddress(model.getEmailAddress());
}
public void showSearchResult(AddressManagerMVCJavaFXView view, AddressManagerMVCJavaFXModel model) {
DefaultListModel<String> jList = new DefaultListModel();
JList<String> list = new JList(jList);
try {
model.setSearchResultArray(searchCredentials(model));
} catch (Exception e) {
Logger.getLogger(MainWindowEventHandlerSearchMVCJavaFXView.class.getName()).log(Level.SEVERE, null, e);
}
for(int i = 0; i < model.getSearchResultArray().size(); i++) {
jList.addElement(model.getSearchResultArray().get(i));
}
list.setModel(jList);
int size = list.getModel().getSize();
StringBuilder credentials = new StringBuilder();
for(int i = 0; i < size; i++) {
credentials.append(list.getModel().getElementAt(i)).append("\n");
}
view.setTextArea(view.getTextArea() + credentials.toString());
}
private void showUpdateResult(AddressManagerMVCUpdateJavaFXView view, AddressManagerMVCJavaFXModel model) {
DefaultListModel<String> jList = new DefaultListModel();
JList<String> list = new JList(jList);
try {
model.getUpdateResultArray();
} catch (Exception e) {
Logger.getLogger(MainWindowEventHandlerSearchMVCJavaFXView.class.getName()).log(Level.SEVERE, null, e);
}
for(int i = 0; i < model.getUpdateResultArray().size(); i++) {
jList.addElement(model.getUpdateResultArray().get(i));
}
list.setModel(jList);
int size = list.getModel().getSize();
StringBuilder credentials = new StringBuilder();
for(int i = 0; i < size; i++) {
credentials.append(list.getModel().getElementAt(i)).append("\n");
}
view.setTextArea(credentials.toString());
}
public void updateCredentials(AddressManagerMVCUpdateJavaFXView view,AddressManagerMVCJavaFXModel model) throws Exception {
if(query.updateAddress(view, model) == true) {
showUpdateResult(view,model);
}
}
}
For each button I created a different Action Event Class. Which I think still belongs to the VIEW. I'll post one of them.
EventHandler
public class MainWindowEventHandlerAddMVCJavaFZView implements EventHandler {
AddressManagerMVCJavaFXModel model = new AddressManagerMVCJavaFXModel();
AddressManagerMVCJavaFXView view;
AddressManagerMVCJavaFXController controller = new AddressManagerMVCJavaFXController(model);
public MainWindowEventHandlerAddMVCJavaFZView(AddressManagerMVCJavaFXView view, TextField companyName, TextField firstName, TextField lastName, TextField emailAddress, TextField reTypeEmailAddress, TextField streetName, TextField houseNumber, TextField additive, TextField zipCode, TextField cityName) {
this.view = view;
this.model.setTextFieldCompanyName(companyName);
this.model.setTextFieldFirstName(firstName);
this.model.setTextFieldLastName(lastName);
this.model.setTextFieldEmailAddress(emailAddress);
this.model.setTextFieldReTypeEmailAddress(reTypeEmailAddress);
this.model.setTextFieldStreet(streetName);
this.model.setTextFieldHouseNumber(houseNumber);
this.model.setTextFieldAdditive(additive);
this.model.setTexFieldZipCode(zipCode);
this.model.setTextFieldCity(cityName);
this.model.setTextFieldSearchEmailAddress(companyName);
}
@Override
public void handle(Event event) {
model.setCompanyName(model.getTextFieldCompanyName().getText());
model.setFirstName(model.getTextFieldFirstName().getText());
model.setLastName(model.getTextFieldLastName().getText());
model.setEmailAddress(model.getTextFieldEmailAddress().getText());
model.setReTypeEmailAddress(model.getTextFieldReTypeEmailAddress().getText());
model.setStreet(model.getTextFieldStreet().getText());
model.setNumber(model.getTextFieldHouseNumber().getText());
model.setAdditive(model.getTextfieldAdditive().getText());
model.setZipCode(model.getTextFieldZipCode().getText());
model.setCity(model.getTextFieldCity().getText());
try {
controller.addCredentials(view, model);
} catch (Exception ex) {
Logger.getLogger(MainWindowEventHandlerAddMVCJavaFZView.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
I also have a seperate class for the queries
Queries
public class AddressManagerQueriesMVCJavaFXServices {
private Connection connect = null;
private final Statement statement = null;
private PreparedStatement preparedStatement = null;
private ResultSet resultSet = null;
public boolean updateAddress(AddressManagerMVCUpdateJavaFXView view, AddressManagerMVCJavaFXModel model) throws Exception {
boolean updateAddress = true;
ArrayList<String> updateAddressArray = new ArrayList();
int count = 0;
try {
// This will load the MySQL driver, each DB has its own driver
Class.forName("com.mysql.jdbc.Driver");
// Setup the connection with the DB
connect = DriverManager.getConnection("jdbc:mysql://localhost/dev?" + "user=root&password=somePassword");
preparedStatement = connect.prepareStatement("SELECT * FROM dev.addresses WHERE emailaddress= '" + model.getUpdateEmailAddress() + "'");
resultSet = preparedStatement.executeQuery();
if(resultSet.next()) {
Object[] options = { "YES", "NO" };
int reply = JOptionPane.showOptionDialog(null, "Are you sure you want to update the crendentials of: " + resultSet.getString("firstname") + " " + resultSet.getString("lastname"), "WARNING.", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]);
if(reply == JOptionPane.YES_OPTION) {
preparedStatement = connect.prepareStatement("UPDATE dev.addresses SET companyname = ?, firstname = ?, lastname = ?, emailaddress = ?, retype_emailaddress = ?, street = ?, housenumber = ?, additive = ?, zipcode = ?, city = ? WHERE id = " + resultSet.getString("id"));
if(!model.getCompanyName().equals("")) {
count++;
updateAddressArray.add("Updated Company Name: " + model.getCompanyName());
preparedStatement.setString(1, model.getCompanyName());
} else {
preparedStatement.setString(1, resultSet.getString("companyname"));
}
if(!model.getFirstName().equals("")) {
count++;
updateAddressArray.add("Updated First Name: " + model.getFirstName());
preparedStatement.setString(2, model.getFirstName());
} else {
preparedStatement.setString(2, resultSet.getString("firstname"));
}
if(!model.getLastName().equals("")) {
count++;
updateAddressArray.add("Updated Last Name: " + model.getLastName());
preparedStatement.setString(3, model.getLastName());
} else {
preparedStatement.setString(3, resultSet.getString("lastname"));
}
if(!model.getEmailAddress().equals("")) {
count++;
updateAddressArray.add("Updated Email Address: " + model.getEmailAddress());
preparedStatement.setString(4, model.getEmailAddress());
} else {
preparedStatement.setString(4, resultSet.getString("emailaddress"));
}
if(!model.getReTypeEmailAddress().equals("")) {
count++;
preparedStatement.setString(5, model.getEmailAddress());
} else {
preparedStatement.setString(5, resultSet.getString("retype_emailaddress"));
}
if(!model.getStreet().equals("")) {
count++;
updateAddressArray.add("Updated Street: " + model.getStreet());
preparedStatement.setString(6, model.getStreet());
} else {
preparedStatement.setString(6, resultSet.getString("street"));
}
if(!model.getNumber().equals("")) {
count++;
updateAddressArray.add("Updated Number: " + model.getNumber());
preparedStatement.setString(7, model.getNumber());
} else {
preparedStatement.setString(7, resultSet.getString("housenumber"));
}
if(!model.getAdditive().equals("")) {
count++;
updateAddressArray.add("Updated Additive: " + model.getAdditive());
preparedStatement.setString(8, model.getAdditive());
} else {
preparedStatement.setString(8, resultSet.getString("additive"));
}
if(!model.getZipCode().equals("")) {
count++;
updateAddressArray.add("Updated Zipcode: " + model.getZipCode());
preparedStatement.setString(9, model.getZipCode());
} else {
preparedStatement.setString(9, resultSet.getString("zipcode"));
}
if(!model.getCity().equals("")) {
count++;
updateAddressArray.add("Updated City: " + model.getCity() + "\n");
preparedStatement.setString(10, model.getCity());
} else {
preparedStatement.setString(10, resultSet.getString("city"));
}
updateAddressArray.add("\n\n" + count + " UPDATED FIELDS\n\n");
model.setUpdateResultArray(updateAddressArray);
preparedStatement.executeUpdate();
JOptionPane.showMessageDialog(null, "Credentails of: " + resultSet.getString("firstname") + " " + resultSet.getString("lastname") + " is updated", "InfoBox: " + "Updated", JOptionPane.INFORMATION_MESSAGE);
}
} else {
updateAddress = false;
JOptionPane.showMessageDialog(null, "Emailaddress: " + model.getUpdateEmailAddress()+ " doesn't exist", "InfoBox: " + "Error", JOptionPane.INFORMATION_MESSAGE);
}
} catch (ClassNotFoundException | SQLException | HeadlessException e) {
throw e;
} finally {
close();
}
return updateAddress;
}
public boolean saveAddressToDataBase(AddressManagerMVCJavaFXView view, AddressManagerMVCJavaFXModel model) throws Exception {
boolean test = false;
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://localhost/dev?" + "user=root&password=somePassword");
preparedStatement = connect.prepareStatement("SELECT emailaddress FROM dev.addresses WHERE emailaddress= '" + model.getEmailAddress() + "'");
resultSet = preparedStatement.executeQuery();
if(resultSet.next()) {
JOptionPane.showMessageDialog(null, "Emailaddress: " + model.getEmailAddress()+ " already exist", "InfoBox: " + "Error", JOptionPane.INFORMATION_MESSAGE);
} else {
preparedStatement = connect.prepareStatement("INSERT INTO dev.addresses (companyname, firstname, lastname, emailaddress, retype_emailaddress, street, housenumber, additive, zipcode, city) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
preparedStatement.setString(1, model.getCompanyName());
preparedStatement.setString(2, model.getFirstName());
preparedStatement.setString(3, model.getLastName());
preparedStatement.setString(4, model.getEmailAddress());
preparedStatement.setString(5, model.getReTypeEmailAddress());
preparedStatement.setString(6, model.getStreet());
preparedStatement.setString(7, model.getNumber());
preparedStatement.setString(8, model.getAdditive());
preparedStatement.setString(9, model.getZipCode());
preparedStatement.setString(10, model.getCity());
preparedStatement.executeUpdate();
test = true;
}
} catch (ClassNotFoundException | SQLException | HeadlessException e) {
throw e;
} finally {
close();
}
return test;
}
public ArrayList<String> searchAddress(String emailAddress) throws Exception {
ArrayList<String> queryResultSet = new ArrayList();
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://localhost/dev?" + "user=root&password=somePassword");
preparedStatement = connect.prepareStatement("SELECT * FROM dev.addresses WHERE emailaddress= '" + emailAddress + "'");
resultSet = preparedStatement.executeQuery();
if(resultSet.next()) {
queryResultSet.add("CREDENTIALS OF: " + resultSet.getString("firstname").toUpperCase() + " " + resultSet.getString("lastname").toUpperCase() + "\n");
queryResultSet.add("Company Name: " + resultSet.getString("companyname"));
queryResultSet.add("First Name: " + resultSet.getString("firstname"));
queryResultSet.add("Last Name: " + resultSet.getString("lastname"));
queryResultSet.add("Email: " + resultSet.getString("emailaddress"));
queryResultSet.add("Street Name: " + resultSet.getString("street"));
queryResultSet.add("House Number: " + resultSet.getString("housenumber"));
queryResultSet.add("Additive: " + resultSet.getString("additive"));
queryResultSet.add("Zipcode: " + resultSet.getString("zipcode"));
queryResultSet.add("City: " + resultSet.getString("city") + "\n");
} else {
JOptionPane.showMessageDialog(null, emailAddress + " doesn't exist", "INVALID INPUT.", JOptionPane.INFORMATION_MESSAGE);
}
} catch (ClassNotFoundException | SQLException | HeadlessException e) {
throw e;
} finally {
close();
}
return queryResultSet;
}
public void removeAddress(String emailAddress) throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://localhost/dev?" + "user=root&password=somePassword");
preparedStatement = connect.prepareStatement("SELECT * FROM dev.addresses WHERE emailaddress= '" + emailAddress + "'");
resultSet = preparedStatement.executeQuery();
if(resultSet.next()) {
Object[] options = { "YES", "NO" };
int reply = JOptionPane.showOptionDialog(null, "Are you sure you want to delete the crendentials of: " + resultSet.getString("firstname") + " " + resultSet.getString("lastname"), "WARNING.", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]);
if(reply == JOptionPane.YES_OPTION) {
preparedStatement = connect.prepareStatement("DELETE FROM dev.addresses WHERE emailaddress = '" + emailAddress + "'");
preparedStatement.executeUpdate();
}
} else {
JOptionPane.showMessageDialog(null,"Emailaddress: " + "\"" + emailAddress + "\"" + " Doesn't exist", "INVALID INPUT.", JOptionPane.INFORMATION_MESSAGE);
}
} catch (ClassNotFoundException | SQLException | HeadlessException e) {
throw e;
} finally {
close();
}
}
// Close the resultSet
private void close() {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connect != null) {
connect.close();
}
} catch (Exception e) {
}
}
}
I created this application mainly on what I read on the Internet but mostly on Stack Overflow. I just would like to know from other programmers if I'm on the right track.