diff --git a/src/main/java/de/itstall/App.java b/src/main/java/de/itstall/App.java index 7419bb27e159dadf463ef9221b469bfd073cb669..8ff5a51f95ce7467cbd1df26b3c232437bba8e68 100644 --- a/src/main/java/de/itstall/App.java +++ b/src/main/java/de/itstall/App.java @@ -6,9 +6,7 @@ import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; - import java.io.IOException; -import java.util.ArrayList; import java.util.TreeMap; /** @@ -21,7 +19,18 @@ public class App extends Application { @Override public void start(Stage stage) throws IOException { - scene = new Scene(loadFXML("Telefonbuch")); + + Kontakt kontakt = new Kontakt(); + kontakt.setTelefon("111"); + eintraege.put("111", kontakt); + kontakt = new Kontakt(); + kontakt.setTelefon("222"); + eintraege.put("222", kontakt); + kontakt = new Kontakt(); + kontakt.setTelefon("333"); + eintraege.put("333", kontakt); + + scene = new Scene(loadFXML("Telefonbuch")); stage.setScene(scene); stage.show(); } diff --git a/src/main/java/de/itstall/TelefonbuchController.java b/src/main/java/de/itstall/TelefonbuchController.java index 8308ba8d920d914c3e590d7e47343d15b8d47cbd..bc8c4c97b03b04d0dea7296f073c09b16853b7a2 100644 --- a/src/main/java/de/itstall/TelefonbuchController.java +++ b/src/main/java/de/itstall/TelefonbuchController.java @@ -6,192 +6,285 @@ import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.TextField; +import java.util.ArrayList; + public class TelefonbuchController { - private Kontakt kontakt = new Kontakt(); - - @FXML - private TextField txtVorname; - - @FXML - private TextField txtNachname; - - @FXML - private TextField txtStrasse; - - @FXML - private TextField txtHNr; - - @FXML - private TextField txtPlz; - - @FXML - private TextField txtOrt; - - @FXML - private TextField txtTelefon; - - @FXML - private Button btnNaviLinks; - - @FXML - private Button btnNaviRechts; - - @FXML - private Button btnNeuerEintrag; - - @FXML - private Button btnLoeschen; - - @FXML - void loeschen(ActionEvent event) { - deleteKontakt(); - } - - @FXML - void navWeiter(ActionEvent event) { - //kontakt = App.eintraege.get(App.eintraege.n) - } - - @FXML - void navZurueck(ActionEvent event) { - - } - - @FXML - void neuerEintrag(ActionEvent event) { - kontakt = new Kontakt(); - txtVorname.setText(""); - txtNachname.setText(""); - txtStrasse.setText(""); - txtHNr.setText(""); - txtPlz.setText(""); - txtOrt.setText(""); - txtTelefon.setText(""); - } - - @FXML - void initialize() { - assert txtVorname != null : "fx:id=\"txtVorname\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert txtNachname != null : "fx:id=\"txtNachname\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert txtStrasse != null : "fx:id=\"txtStrasse\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert txtHNr != null : "fx:id=\"txtHNr\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert txtPlz != null : "fx:id=\"txtPlz\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert txtOrt != null : "fx:id=\"txtOrt\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert txtTelefon != null : "fx:id=\"txtTelefon\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert btnNaviLinks != null : "fx:id=\"btnNaviLinks\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert btnNaviRechts != null : "fx:id=\"btnNaviRechts\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert btnNeuerEintrag != null : "fx:id=\"btnNeuerEintrag\" was not injected: check your FXML file 'telefonbuch.fxml'."; - assert btnLoeschen != null : "fx:id=\"btnLoeschen\" was not injected: check your FXML file 'telefonbuch.fxml'."; - - txtVorname.focusedProperty().addListener((observableValue, aBoolean, t1) -> { - if(!t1) { - if(!kontakt.setVorname(txtVorname.getText())) { - setFieldError(txtVorname, true); - } else { - saveKontakt(); - setFieldError(txtVorname, false); - } - } - }); - - txtNachname.focusedProperty().addListener((observableValue, aBoolean, t1) -> { - if(!t1) { - if(!kontakt.setNachname(txtNachname.getText())) { - setFieldError(txtNachname, true); - } else { - saveKontakt(); - setFieldError(txtNachname, false); - } - } - }); - - txtStrasse.focusedProperty().addListener((observableValue, aBoolean, t1) -> { - if(!t1) { - if(!kontakt.setStrasse(txtStrasse.getText())) { - setFieldError(txtStrasse, true); - } else { - saveKontakt(); - setFieldError(txtStrasse, false); - } - } - }); - - txtHNr.focusedProperty().addListener((observableValue, aBoolean, t1) -> { - if(!t1) { - if(!kontakt.setHausnummer(txtHNr.getText())) { - setFieldError(txtHNr, true); - } else { - saveKontakt(); - setFieldError(txtHNr, false); - } - } - }); - - txtPlz.focusedProperty().addListener((observableValue, aBoolean, t1) -> { - if(!t1) { - if(!kontakt.setPlz(txtPlz.getText())) { - setFieldError(txtPlz, true); - } else { - saveKontakt(); - setFieldError(txtPlz, false); - } - } - }); - - txtOrt.focusedProperty().addListener((observableValue, aBoolean, t1) -> { - if(!t1) { - if(!kontakt.setOrt(txtOrt.getText())) { - setFieldError(txtOrt, true); - } else { - saveKontakt(); - setFieldError(txtOrt, false); - } - } - }); - - txtTelefon.focusedProperty().addListener((observableValue, aBoolean, t1) -> { - if(!t1) { - if(txtTelefon.getText() != kontakt.getTelefon()) { - deleteKontakt(); - saveKontakt(); - } - if(!kontakt.setTelefon(txtTelefon.getText())) { - setFieldError(txtTelefon, true); - } else { - saveKontakt(); - setFieldError(txtTelefon, false); - } - } - }); - } + private Kontakt kontakt = new Kontakt(); + + @FXML + private TextField txtVorname; + + @FXML + private TextField txtNachname; + + @FXML + private TextField txtStrasse; + + @FXML + private TextField txtHNr; + + @FXML + private TextField txtPlz; + + @FXML + private TextField txtOrt; + + @FXML + private TextField txtTelefon; + + @FXML + private Button btnNaviLinks; + + @FXML + private Button btnNaviRechts; + + @FXML + private Button btnNeuerEintrag; + + @FXML + private Button btnLoeschen; + + @FXML + void loeschen(ActionEvent event) { + deleteKontakt(); + } + + @FXML + void navWeiter(ActionEvent event) { + kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[1]); + setForm(kontakt); + } + + @FXML + void navZurueck(ActionEvent event) { + kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[0]); + setForm(kontakt); + } + + @FXML + void neuerEintrag(ActionEvent event) { + neuenKontaktAnlegen(); + } + + @FXML + void initialize() { + assert txtVorname != null : "fx:id=\"txtVorname\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert txtNachname != null : "fx:id=\"txtNachname\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert txtStrasse != null : "fx:id=\"txtStrasse\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert txtHNr != null : "fx:id=\"txtHNr\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert txtPlz != null : "fx:id=\"txtPlz\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert txtOrt != null : "fx:id=\"txtOrt\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert txtTelefon != null : "fx:id=\"txtTelefon\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert btnNaviLinks != null : "fx:id=\"btnNaviLinks\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert btnNaviRechts != null : "fx:id=\"btnNaviRechts\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert btnNeuerEintrag != null : "fx:id=\"btnNeuerEintrag\" was not injected: check your FXML file 'telefonbuch.fxml'."; + assert btnLoeschen != null : "fx:id=\"btnLoeschen\" was not injected: check your FXML file 'telefonbuch.fxml'."; + + txtVorname.focusedProperty().addListener((observableValue, aBoolean, t1) -> { + if (!t1) { + if (!kontakt.setVorname(txtVorname.getText())) { + setFieldError(txtVorname, true); + } else { + saveKontakt(); + setFieldError(txtVorname, false); + } + } + }); + + txtNachname.focusedProperty().addListener((observableValue, aBoolean, t1) -> { + if (!t1) { + if (!kontakt.setNachname(txtNachname.getText())) { + setFieldError(txtNachname, true); + } else { + saveKontakt(); + setFieldError(txtNachname, false); + } + } + }); + + txtStrasse.focusedProperty().addListener((observableValue, aBoolean, t1) -> { + if (!t1) { + if (!kontakt.setStrasse(txtStrasse.getText())) { + setFieldError(txtStrasse, true); + } else { + saveKontakt(); + setFieldError(txtStrasse, false); + } + } + }); + + txtHNr.focusedProperty().addListener((observableValue, aBoolean, t1) -> { + if (!t1) { + if (!kontakt.setHausnummer(txtHNr.getText())) { + setFieldError(txtHNr, true); + } else { + saveKontakt(); + setFieldError(txtHNr, false); + } + } + }); + + txtPlz.focusedProperty().addListener((observableValue, aBoolean, t1) -> { + if (!t1) { + if (!kontakt.setPlz(txtPlz.getText())) { + setFieldError(txtPlz, true); + } else { + saveKontakt(); + setFieldError(txtPlz, false); + } + } + }); + + txtOrt.focusedProperty().addListener((observableValue, aBoolean, t1) -> { + if (!t1) { + if (!kontakt.setOrt(txtOrt.getText())) { + setFieldError(txtOrt, true); + } else { + saveKontakt(); + setFieldError(txtOrt, false); + } + } + }); + + txtTelefon.focusedProperty().addListener((observableValue, aBoolean, t1) -> { + if (!t1) { + if (txtTelefon.getText() != kontakt.getTelefon()) { + deleteKontakt(); + saveKontakt(); + } + if (!kontakt.setTelefon(txtTelefon.getText())) { + setFieldError(txtTelefon, true); + } else { + saveKontakt(); + setFieldError(txtTelefon, false); + } + } + }); + } + + /** + * Legt ein neues Kontakt Object an + */ + private void neuenKontaktAnlegen() { + resetForm(); + } /** * Kontakt aus Treemap loeschen */ public void deleteKontakt() { - App.eintraege.remove(txtTelefon.getText()); - } + App.eintraege.remove(txtTelefon.getText()); + resetForm(); + } /** * Kontakt in die Treemap speichern */ public void saveKontakt() { - if(!kontakt.getTelefon().isEmpty()) { - App.eintraege.put(kontakt.getTelefon(), kontakt); - } - } + if (kontakt.getTelefon() != "") { + App.eintraege.put(kontakt.getTelefon(), kontakt); + } + } /** * Background der Felder setzen im Fehler Fall + * * @param field : Textfeld Object - * @param set : true:Fehler false:Kein Fehler + * @param set : true:Fehler false:Kein Fehler */ public void setFieldError(TextField field, boolean set) { - if(set) { - field.setStyle("-fx-control-inner-background: #ff000040;"); - } else { - field.setStyle("-fx-control-inner-background: WHITE;"); - } - } + if (set) { + field.setStyle("-fx-control-inner-background: #ff000040;"); + } else { + field.setStyle("-fx-control-inner-background: WHITE;"); + } + } + + /** + * Suche die naechste und die letzte Nummer aus der Treemap + * + * @param telefon : String : Gesuchte Telefonnummer + * @return + */ + public String[] sucheEintrag(String telefon) { + /** Initialisieren des Rueckgabe Arrays */ + String rueckgabe[] = new String[2]; + + /** Arraylist als temporaeren Speicher anlegen */ + ArrayList<String> telefonbuch = new ArrayList<>(); + + /** Kopiert die Keys (Telefonnummern) der Treemap in eine Arraylist zum einfacheren durchsuchen */ + for (String tnr : App.eintraege.keySet()) { + telefonbuch.add(tnr); + } + + /** + * Uebergebene Telefonnummer ist nicht gesetzt (Leeres Formular) oder existiert nicht + * Zurueck = letzter Eintrag | Weiter = erster Eintrag + */ + if (telefon.equals("") || telefon == null || !telefonbuch.contains(telefon)) { + /** Pruefung ob mehr als ein Eintrag vorhanden */ + if (telefonbuch.size() > 1) { + rueckgabe[0] = telefonbuch.get(telefonbuch.size() - 1); + rueckgabe[1] = telefonbuch.get(0); + } + /** Nur ein Eintrag vorhanden also diesen Eintrag als zurueck/weiter zurueck geben */ + else { + rueckgabe[0] = rueckgabe[1] = telefonbuch.get(0); + } + } else { + /** Das Telefonbuch hat nur einen Eintrag */ + if (telefonbuch.size() == 1) { + rueckgabe[0] = telefonbuch.get(0); + rueckgabe[1] = telefonbuch.get(0); + } + /** Gesuchte Nummer ist an Index 0 */ + else if (telefonbuch.indexOf(telefon) == 0) { + rueckgabe[0] = telefonbuch.get(telefonbuch.size() - 1); + rueckgabe[1] = telefonbuch.get(telefonbuch.indexOf(telefon) + 1); + } + /** Gesuchte Nummer ist am letzten Index */ + else if (telefonbuch.indexOf(telefon) == telefonbuch.size() - 1) { + rueckgabe[0] = telefonbuch.get(telefonbuch.indexOf(telefon) - 1); + rueckgabe[1] = telefonbuch.get(0); + } + /** Gesuchte Nummer befindet sich irgendwo im Array und nicht am ersten/letzten Index */ + else { + rueckgabe[0] = telefonbuch.get(telefonbuch.indexOf(telefon) - 1); + rueckgabe[1] = telefonbuch.get(telefonbuch.indexOf(telefon) + 1); + } + } + + return rueckgabe; + } + + /** + * Loescht das Formular und erstellt ein neues Kontakt Objekt + */ + public void resetForm() { + kontakt = new Kontakt(); + txtVorname.setText(""); + txtNachname.setText(""); + txtStrasse.setText(""); + txtHNr.setText(""); + txtPlz.setText(""); + txtOrt.setText(""); + txtTelefon.setText(""); + } + + /** + * Setzt alle Formular Felder auf die Daten des Objektes + * + * @param kontakt + */ + public void setForm(Kontakt kontakt) { + txtVorname.setText(kontakt.getVorname()); + txtNachname.setText(kontakt.getNachname()); + txtStrasse.setText(kontakt.getStrasse()); + txtHNr.setText(kontakt.getHausnummer()); + txtPlz.setText(kontakt.getPlz()); + txtOrt.setText(kontakt.getOrt()); + txtTelefon.setText(kontakt.getTelefon()); + } } diff --git a/src/main/java/de/itstall/model/Kontakt.java b/src/main/java/de/itstall/model/Kontakt.java index 1e88b06806dac9eccd54e3312723189d564d84c5..92851212ed855e0dc5a1639a63b5e5f6041448e0 100644 --- a/src/main/java/de/itstall/model/Kontakt.java +++ b/src/main/java/de/itstall/model/Kontakt.java @@ -2,7 +2,7 @@ package de.itstall.model; public class Kontakt { // region 0 Variables - private String vorname, nachname, strasse, hausnummer, plz, ort, telefon; + private String vorname, nachname, strasse, hausnummer, plz, ort, telefon = ""; //endregion // region 1 Setter @@ -25,7 +25,7 @@ public class Kontakt { } public boolean setStrasse(String strasse) { - if (nachname.length() <= 50) { + if (strasse.length() <= 50) { this.strasse = strasse; return true; } else { @@ -52,7 +52,7 @@ public class Kontakt { } public boolean setOrt(String ort) { - if (nachname.length() <= 50) { + if (ort.length() <= 50) { this.ort = ort; return true; } else {