diff --git a/README.md b/README.md index 940811b4b2353806bb59821548107f72c24fbc36..163ab611cc322893c21892be580514f5eeba300a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ [](https://www.gitrepo.de/alfatrainingkurse/java/enigma/commits/master) +[](https://www.gitrepo.de/alfatrainingkurse/java/enigma/commits/master) Link zum [Wiki](https://www.gitrepo.de/alfatrainingkurse/java/enigma/wikis/home) \ No newline at end of file diff --git a/src/main/java/Enigma/GuiController.java b/src/main/java/Enigma/GuiController.java index 7e444ce2d9d8ea92ab29b90f1a76c37f048901a6..3bfb5056ad2d8ed737f883004b0f7747c0ed5dea 100644 --- a/src/main/java/Enigma/GuiController.java +++ b/src/main/java/Enigma/GuiController.java @@ -1,225 +1,250 @@ package Enigma; import javafx.fxml.FXML; -import javafx.scene.control.Label; -import javafx.scene.control.MenuButton; -import javafx.scene.control.MenuItem; +import javafx.scene.control.*; + import java.awt.event.ActionEvent; import java.util.ArrayList; -import java.util.List; public class GuiController { + ArrayList<MenuItem> mItem; + private final static String[] str= {"I", "II", "III", "IV", "V"}; + private final static String[] num ={"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26"}; + private final static String[] bs ={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; + @FXML - private MenuButton w1; -// -// @FXML -// private MenuItem w1I; -// -// @FXML -// private MenuItem w1II; -// -// @FXML -// private MenuItem w1III; -// @FXML -// private MenuItem w1IV; -// -// @FXML -// private MenuItem w1V; + private Button btnL; @FXML - private MenuButton w2; + private Button btnP; + @FXML - private MenuItem w2I; + private Button btnY; @FXML - private MenuItem w2II; + private Button btnX; @FXML - private MenuItem w2III; + private Button btnC; @FXML - private MenuItem w2IV; + private Button btnV; @FXML - private MenuItem w2V; + private Button btnB; @FXML - private MenuButton w3; + private Button btnN; @FXML - private MenuItem w3I; + private Button btnM; @FXML - private MenuItem w3II; + private Button btnA; @FXML - private MenuItem w3III; + private Button btnS; + @FXML - private MenuItem w3IV; + private Button btnD; @FXML - private MenuItem w3V; + private Button btnF; + @FXML + private Button btnG; @FXML - void w3I(ActionEvent event) { - } + private Button btnH; @FXML - void w3II(ActionEvent event) { - } + private Button btnJ; @FXML - void w3III(ActionEvent event) { - } + private Button btnK; + @FXML - void w3IV(ActionEvent event) { - } + private Button btnQ; + @FXML - void w3V(ActionEvent event) { - } + private Button btnW; @FXML - void btnsenden(ActionEvent event) { - } - public void btnsenden(){ + private Button btnE; - } -// @FXML -// void w1I(ActionEvent event) { -// } -// @FXML -// void w1II(ActionEvent event) { -// } -// @FXML -// void w1III(ActionEvent event) { -// } -// @FXML -// void w1IV(ActionEvent event) { -// } -// @FXML -// void w1V(ActionEvent event) { -// } + @FXML + private Button btnR; @FXML - void w2I(ActionEvent event) { - } + private Button btnT; + @FXML - void w2II(ActionEvent event) { - } + private Button btnZ; + @FXML - void w2III(ActionEvent event) { - } + private Button btnU; + @FXML - void w2IV(ActionEvent event) { - } + private Button btnI; + @FXML - void w2V(ActionEvent event) { - } + private Button btnO; -// // Action Listener für erste Walze -// public void w1I(){ -// w1.setText(w1I.getText()); -// } -// public void w1II(){ -// w1.setText(w1II.getText()); -// } -// public void w1III(){ -// w1.setText(w1III.getText()); -// } -// public void w1IV(){ -// w1.setText(w1IV.getText()); -// } -// public void w1V(){ -// w1.setText(w1V.getText()); -// } - // Action Listener für zweite Walze - public void w2I(){ - w2.setText(w2I.getText()); - } - public void w2II(){ - w2.setText(w2II.getText()); - } - public void w2III(){ - w2.setText(w2III.getText()); - } - public void w2IV(){ - w2.setText(w2IV.getText()); - } - public void w2V(){ - w2.setText(w2V.getText()); - } - // Action Listener für dritte Walze - public void w3I(){ - w3.setText(w3I.getText()); - } - public void w3II(){ - w3.setText(w3II.getText()); - } - public void w3III(){ - w3.setText(w3III.getText()); - } - public void w3IV(){ - w3.setText(w3IV.getText()); - } - public void w3V(){ - w3.setText(w3V.getText()); - } + @FXML + private Button btnLöschen; - public void listener(MenuButton mb, MenuItem mi){ - mb.setText(mi.getText()); - } -// -// public void walzenListener(){ -// MenuItem[] buttons = {w1I,w1II,w1II,w1IV,w1V}; -// for (int i =0; i<6; i++) { -// listener(w1, buttons[i]); -// } -// } + @FXML + private MenuButton mBtnWalzPos1; + @FXML + private MenuButton mBtnWalzPos3; + @FXML + private MenuButton mBtnWalzPos2; @FXML - void initialize() { + private MenuButton mBtnNotchPos3; -// for (int i =0; i<6; i++) { -// -// mi.add(new MenuItem("W"+i)); -// } + @FXML + private MenuButton mBtnNotchPos2; + + @FXML + private MenuButton mBtnStartPos1; - ArrayList<MenuItem> mi; + @FXML + private MenuButton mBtnStartPos3; - for (int i =0; i<6; i++) { - String[] str={"I","II","III","IV","V"}; - MenuItem mb2 = new MenuItem("W"+i); - w1.getItems().add(mb2); - // listener(w1,mb2); - } - // listener(w1,); - - - // walzenListener(); - - assert w1 != null : "fx:id=\"w1\" was not injected: check your FXML file 'primary.fxml'."; -// assert w1I != null : "fx:id=\"w1I\" was not injected: check your FXML file 'primary.fxml'."; -// assert w1II != null : "fx:id=\"w1II\" was not injected: check your FXML file 'primary.fxml'."; -// assert w1III != null : "fx:id=\"w1III\" was not injected: check your FXML file 'primary.fxml'."; -// assert w1IV != null : "fx:id=\"w1IV\" was not injected: check your FXML file 'primary.fxml'."; -// assert w1V != null : "fx:id=\"w1V\" was not injected: check your FXML file 'primary.fxml'."; - assert w3 != null : "fx:id=\"w3\" was not injected: check your FXML file 'primary.fxml'."; - assert w3I != null : "fx:id=\"w3I\" was not injected: check your FXML file 'primary.fxml'."; - assert w3II != null : "fx:id=\"w3II\" was not injected: check your FXML file 'primary.fxml'."; - assert w3III != null : "fx:id=\"w3III\" was not injected: check your FXML file 'primary.fxml'."; - assert w3IV != null : "fx:id=\"w3IV\" was not injected: check your FXML file 'primary.fxml'."; - assert w3V != null : "fx:id=\"w3V\" was not injected: check your FXML file 'primary.fxml'."; - assert w2 != null : "fx:id=\"w2\" was not injected: check your FXML file 'primary.fxml'."; - assert w2I != null : "fx:id=\"w2I\" was not injected: check your FXML file 'primary.fxml'."; - assert w2II != null : "fx:id=\"w2II\" was not injected: check your FXML file 'primary.fxml'."; - assert w2III != null : "fx:id=\"w2III\" was not injected: check your FXML file 'primary.fxml'."; - assert w2IV != null : "fx:id=\"w2IV\" was not injected: check your FXML file 'primary.fxml'."; - assert w2V != null : "fx:id=\"w2V\" was not injected: check your FXML file 'primary.fxml'."; + @FXML + private MenuButton mBtnStartPos2; + + @FXML + private TextField tfrein; + + @FXML + private TextField tfcodiert; + + @FXML + private TextField tfKenngruppe; + + @FXML + private MenuButton mBtnNotchPos1; + + @FXML + void gedrueckteTaste() { + } + + @FXML + void btnempfangen() { + } + + @FXML + void btnsenden() { } + /** + * Methode zum setzen des menuButton Textes auf das ausgewählte MenuItem + * @param mb : MenuButton der Walze + * @param mi : MenuItem + */ + private void listener(MenuButton mb, MenuItem mi){ + mb.setText(mi.getText()); + } + + /** + * Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs + * @param button : Button für die die Einträge erstellt werden sollen + */ + private void menu(MenuButton button, String[] str) { + mItem = new ArrayList<>(); + for (int i = 0; i < str.length; i++) { + //Eintrag aus str der Arraylist mi hinzufügen + mItem.add(new MenuItem(str[i])); + //MenuItem mi dem Button button hinzufügen + button.getItems().add(mItem.get(i)); + int finalI = i; + //Listener für die einzelnen Einträge + ArrayList<MenuItem> finalMi = mItem; + mItem.get(i).setOnAction(e -> { + listener(button, finalMi.get(finalI)); + }); + } + } + @FXML + void initialize() { + //Einträge für Walzen + menu(mBtnWalzPos1, str); + menu(mBtnWalzPos2, str); + menu(mBtnWalzPos3, str); + //Einträge für die Ringe + menu(mBtnNotchPos1, num); + menu(mBtnNotchPos2, num); + menu(mBtnNotchPos3, num); + //Einträge für die Startpositionen + menu(mBtnStartPos1, bs); + menu(mBtnStartPos3, bs); + menu(mBtnStartPos2, bs); + + assert btnL != null : "fx:id=\"btnL\" was not injected: check your FXML file 'gui.fxml'."; + assert btnP != null : "fx:id=\"btnP\" was not injected: check your FXML file 'gui.fxml'."; + assert btnY != null : "fx:id=\"btnY\" was not injected: check your FXML file 'gui.fxml'."; + assert btnX != null : "fx:id=\"btnX\" was not injected: check your FXML file 'gui.fxml'."; + assert btnC != null : "fx:id=\"btnC\" was not injected: check your FXML file 'gui.fxml'."; + assert btnV != null : "fx:id=\"btnV\" was not injected: check your FXML file 'gui.fxml'."; + assert btnB != null : "fx:id=\"btnB\" was not injected: check your FXML file 'gui.fxml'."; + assert btnN != null : "fx:id=\"btnN\" was not injected: check your FXML file 'gui.fxml'."; + assert btnM != null : "fx:id=\"btnM\" was not injected: check your FXML file 'gui.fxml'."; + assert btnA != null : "fx:id=\"btnA\" was not injected: check your FXML file 'gui.fxml'."; + assert btnS != null : "fx:id=\"btnS\" was not injected: check your FXML file 'gui.fxml'."; + assert btnD != null : "fx:id=\"btnD\" was not injected: check your FXML file 'gui.fxml'."; + assert btnF != null : "fx:id=\"btnF\" was not injected: check your FXML file 'gui.fxml'."; + assert btnG != null : "fx:id=\"btnG\" was not injected: check your FXML file 'gui.fxml'."; + assert btnH != null : "fx:id=\"btnH\" was not injected: check your FXML file 'gui.fxml'."; + assert btnJ != null : "fx:id=\"btnJ\" was not injected: check your FXML file 'gui.fxml'."; + assert btnK != null : "fx:id=\"btnK\" was not injected: check your FXML file 'gui.fxml'."; + assert btnQ != null : "fx:id=\"btnQ\" was not injected: check your FXML file 'gui.fxml'."; + assert btnW != null : "fx:id=\"btnW\" was not injected: check your FXML file 'gui.fxml'."; + assert btnE != null : "fx:id=\"btnE\" was not injected: check your FXML file 'gui.fxml'."; + assert btnR != null : "fx:id=\"btnR\" was not injected: check your FXML file 'gui.fxml'."; + assert btnT != null : "fx:id=\"btnT\" was not injected: check your FXML file 'gui.fxml'."; + assert btnZ != null : "fx:id=\"btnZ\" was not injected: check your FXML file 'gui.fxml'."; + assert btnU != null : "fx:id=\"btnU\" was not injected: check your FXML file 'gui.fxml'."; + assert btnI != null : "fx:id=\"btnI\" was not injected: check your FXML file 'gui.fxml'."; + assert btnO != null : "fx:id=\"btnO\" was not injected: check your FXML file 'gui.fxml'."; + assert btnLöschen != null : "fx:id=\"btnLöschen\" was not injected: check your FXML file 'gui.fxml'."; + assert mBtnWalzPos1 != null : "fx:id=\"mBtnWalzPos1\" was not injected: check your FXML file 'gui.fxml'."; + assert mBtnWalzPos3 != null : "fx:id=\"mBtnWalzPos3\" was not injected: check your FXML file 'gui.fxml'."; + assert mBtnWalzPos2 != null : "fx:id=\"mBtnWalzPos2\" was not injected: check your FXML file 'gui.fxml'."; + assert mBtnNotchPos3 != null : "fx:id=\"mBtnNotchPos3\" was not injected: check your FXML file 'gui.fxml'."; + assert mBtnNotchPos2 != null : "fx:id=\"mBtnNotchPos2\" was not injected: check your FXML file 'gui.fxml'."; + assert mBtnStartPos1 != null : "fx:id=\"mBtnStartPos1\" was not injected: check your FXML file 'gui.fxml'."; + assert mBtnStartPos3 != null : "fx:id=\"mBtnStartPos3\" was not injected: check your FXML file 'gui.fxml'."; + assert mBtnStartPos2 != null : "fx:id=\"mBtnStartPos2\" was not injected: check your FXML file 'gui.fxml'."; + assert tfrein != null : "fx:id=\"tfrein\" was not injected: check your FXML file 'gui.fxml'."; + assert tfcodiert != null : "fx:id=\"tfcodiert\" was not injected: check your FXML file 'gui.fxml'."; + assert tfKenngruppe != null : "fx:id=\"tfKenngruppe\" was not injected: check your FXML file 'gui.fxml'."; + assert mBtnNotchPos1 != null : "fx:id=\"mBtnNotchPos1\" was not injected: check your FXML file 'gui.fxml'."; + + } + +// /** +// * Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze +// * +// * @param walze => gibt die Walzennummer an (entspricht +// * @param position => gibt die Position der Walze (entspricht +// */ +// public void setzeWalze(int walze, int position){ +// switch (position){ +// case 1: +// // mBtnWalzPos1.setText(); +// break; +// case 2: +// break; +// case 3: +// break; +// } +// +// +// } } diff --git a/src/main/java/Enigma/Main.java b/src/main/java/Enigma/Main.java index 2bfc594ce53b57275c180938447de3ea3a866f17..4f2fece9c79475a0e712dcdf5f8c80ff91641626 100644 --- a/src/main/java/Enigma/Main.java +++ b/src/main/java/Enigma/Main.java @@ -1,8 +1,5 @@ package Enigma; -import Enigma.model.Codebuch; -import Enigma.model.DatenbankSqlite; -import Enigma.model.Morsecode; import java.sql.SQLException; diff --git a/src/main/java/Enigma/model/Reflektor.java b/src/main/java/Enigma/model/Reflektor.java index cc7c69dc5d6291056189ae515715aa2ddb1356a1..a3069b863341a420aa9e30cd70620d8d043706c6 100644 --- a/src/main/java/Enigma/model/Reflektor.java +++ b/src/main/java/Enigma/model/Reflektor.java @@ -2,10 +2,10 @@ package Enigma.model; /** * Klasse Reflektor - * + * <p> * Der Reflektor nimmt einen Buchstaben der Klasse Walze entgegen und und kodiert diesen. * Der kodierte Buchstabe wird an die Klasse Walze wieder zurückgegeben. - * + * <p> * Prinzipiell verhält sich die Klasse Refelktor wie die Klasse Walze, außer das sie sich * nach Betätigung einer Taste nicht dreht (starr montiert) und sie gibt keine Signale * an andere Walzen zum drehen. @@ -14,70 +14,38 @@ public class Reflektor { /** * Konstanten und Variablen der Klasse Reflektor - * + * <p> * WALZE_ALPHABET : konstanter Char-Array mit den Werten des Alphabeths (26 Werte) * WALZE_REFLEKTOR : konstanter Char-Array mit den Werten des Reflektors (26 Werte) * reflektorBuchstabeRein : Character mit dem an die Klasse übergebenen Character * reflektorBuchstabeRaus : Character nach der Codierung in der Klasse Reflektor * iPositionReflektor : Integer mit der Positionsnummer des Characters im Array */ - private final Character[] WALZE_ALPHABET = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; - private final Character[] WALZE_REFLEKTOR= {'E', 'J', 'M', 'Z', 'A', 'L', 'Y', 'X', 'V', 'B', 'W', 'F', 'C', 'R', 'Q', 'U', 'O', 'N', 'T', 'S', 'P', 'I', 'K', 'H', 'G', 'D'}; - private Character reflektorBuchstabeRein; - private Character reflektorBuchstabeRaus; - private int iPositionReflektor; + private final Character[] WALZE_ALPHABET = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; + private final Character[] WALZE_REFLEKTOR = {'E', 'J', 'M', 'Z', 'A', 'L', 'Y', 'X', 'V', 'B', 'W', 'F', 'C', 'R', 'Q', 'U', 'O', 'N', 'T', 'S', 'P', 'I', 'K', 'H', 'G', 'D'}; /** * Funktion Codiere - * + * <p> * Durchsucht das konstante Char-Array WALZE_ALPHABET nach der Position eines bestimmten * Buchstabens und gibt den Character an der entsprechenden Position im konstanten * Char-Array WALZE_REFLEKTOR zurück. * * @return reflektorBuchstabeRaus: Character: Der kodierte Buchstabe aus dem Reflektor */ - public char codiere (){ - int index = 0; + public char codiere(Character buchstabe) { + int iPositionReflektor = 0; /*Ermittelt die Position des Buchstaben buchstabe auf der Alphabetswalze*/ - for(index = 0; index < WALZE_ALPHABET.length; index++) { - if(getReflektorBuchstabeRein().equals(WALZE_ALPHABET[index])) { + for (int index = 0; index < WALZE_ALPHABET.length; index++) { + if (buchstabe.equals(WALZE_ALPHABET[index])) { iPositionReflektor = index; break; } } /*Im Char-Array WALZE_REFLEKTOR wird der Character an der Position iPositionReflektor ausgegeben*/ - reflektorBuchstabeRaus = WALZE_REFLEKTOR[iPositionReflektor]; - return reflektorBuchstabeRaus; - } - - /** - * Getter getReflektorBuchstabeRein - * - * Gibt den Wert der Variablen reflektorBuchstabeRein zurück - * - * @return reflektorBuchstabeRein: Character: gibt den Buchstaben zurück - */ - public Character getReflektorBuchstabeRein() { - return reflektorBuchstabeRein; - } - - - /** - * Setter setReflektorBuchstabeRein - * - * Setzt den Wert der Variablen reflektorBuchstabeRein - * - * @param reflektorBuchstabeRein: Character: setzt den Wert des Buchstabens - */ - public void setReflektorBuchstabeRein(Character reflektorBuchstabeRein) { - if (Character.isLetter(reflektorBuchstabeRein)){ - this.reflektorBuchstabeRein = reflektorBuchstabeRein; - } else{ - System.err.println("Kein Buchstabe übergeben im Reflektor"); - } - + return WALZE_REFLEKTOR[iPositionReflektor]; } } diff --git a/src/main/java/Enigma/model/Steckbrett.java b/src/main/java/Enigma/model/Steckbrett.java new file mode 100644 index 0000000000000000000000000000000000000000..d4c503af76d16371f4791c3e6cdf2e6552aaa766 --- /dev/null +++ b/src/main/java/Enigma/model/Steckbrett.java @@ -0,0 +1,77 @@ +package Enigma.model; + +/** + * + */ +public class Steckbrett { + /** + * + */ + private int zaehler; + private Character[] orginalBuchstaben; + private Character[] getauschteBuchstaben; + + /** + * + */ + public Steckbrett() { + + orginalBuchstaben = new Character[10]; + getauschteBuchstaben = new Character[10]; + } + + + /** + * + * @param buchstabe1 + * @param buchstabe2 + * @return + */ + public boolean setzeVertauschung(char buchstabe1, char buchstabe2) { + + if (zaehler < orginalBuchstaben.length) { + orginalBuchstaben[zaehler] = buchstabe1; + getauschteBuchstaben[zaehler++] = buchstabe2; + } else { + System.err.println("Zu viele Vertauschungen angegeben!"); + } + + return ueberpruefeVertauschungen(); + } + + /** + * + * @return + */ + public boolean ueberpruefeVertauschungen() { + + boolean result = true; + for (int n = 0; n < orginalBuchstaben.length; n++) { + if (orginalBuchstaben.equals(orginalBuchstaben[n]) || getauschteBuchstaben.equals(orginalBuchstaben[n]) || getauschteBuchstaben.equals(getauschteBuchstaben[n])) { + System.err.println("Vertauschungen enthalten unzulässige Dopplungen"); + result = false; + } + } + + return result; + } + + /** + * + * @param buchstabe + * @return + */ + public char codiere(Character buchstabe) { + + for (int index = 0; index < getauschteBuchstaben.length; index++) { + if (buchstabe.equals(getauschteBuchstaben[index])) { + buchstabe = orginalBuchstaben[index]; + } else if (buchstabe.equals(orginalBuchstaben[index])) { + buchstabe = getauschteBuchstaben[index]; + } + } + + return buchstabe; + } + +} diff --git a/src/main/java/Enigma/model/Walze.java b/src/main/java/Enigma/model/Walze.java index 9ad536e3a3a67ec8f1f75500d4c66799aa893614..86cf8f4e1e8a76861c3aca23ea5dfef415816121 100644 --- a/src/main/java/Enigma/model/Walze.java +++ b/src/main/java/Enigma/model/Walze.java @@ -1,7 +1,31 @@ package Enigma.model; +/** + * Klasse Walze + * + * Erzeugt ein Objekt des Typs Walze mit den Eigenschaften: + * + * 1. Walzennummer (Die Walze enthält die 26 Buchstaben des Alphabeths und codiert diese. + * 5 verschiedene Walzen stehen zur Auswahl, die jeweils verschieden die Buchstaben des Alphabeths + * paarweise vertauschen) + * + * 2. Ringstellung (Umspringpunkt der Walze wird festgelegt. Der Umspringpunkt bestimmt + * den Drehzeitpunkt der linken Nachbarwalze) + * + */ public class Walze { + /** + * Konstanten und Variablen der Klasse Walze + * + * buchstabe : Bestimmt den Buchstaben + * ringstellung : Bestimmt den Umspringpunkt der Walze + * walzennr : Bestimmt die Walzennr. (also wie der Buchstabe codiert wird) + * iPositionBuchstabe : gibt die Position des Buchstabens auf dem Array der Walze wieder. + * iPositionBuchstabeRe : gibt die Position des codierten Buchstabens im Alphabet wieder. + * private Character[] walze : Character-Array der Walze + */ + private Character buchstabe; private Character ringstellung; private int walzennr; @@ -9,86 +33,21 @@ public class Walze { private int iPositionBuchstabeRe; private Character[] walze; + + /** * Gibt die Parameter der Walze mit * * @param walzennr : int : Nummer der gewaehlten Walze - * @param buchstabe : Character : Grundeinstellung der Walze * @param ringstellung : Character : Einstellung des Notch */ - public Walze(int walzennr, Character buchstabe, Character ringstellung) { + public Walze(int walzennr, Character ringstellung) { this.walze = new Character[25]; this.walzennr = walzennr; - this.buchstabe = buchstabe; + this.buchstabe = 'A'; this.ringstellung = ringstellung; } - /** - * @return buchstabe : Character : gibt den neuen Buchstaben zurueck - */ - public Character getBuchstabe() { - return buchstabe; - } - - /** - * Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen. - * Buchstaben werden automatisch in Grossbuchstaben umgewandelt. - * Im Fehlerfall wird die Grundeinstellung der Walze standardmaessig auf 'A' gesetzt. - * - * @param buchstabe : Character : Grundeinstellung der Walze - */ - public void setBuchstabe(Character buchstabe) { - - if(Character.isLetter(buchstabe)) { - this.buchstabe = Character.toUpperCase(buchstabe); - } else { - this.buchstabe = 'A'; - } - } - - /** - * @return ringstellung : Character : gibt die neue Ringstellung zurueck - */ - public Character getRingstellung() { - return ringstellung; - } - - - /** - * Gibt die Initiale Ringstellung der Walze an. - * Es sind nur Zahlen von 1 - 26 zugelassen. - * Im Fehlerfall wird die Ringstellung standardmaessig auf '1' gesetzt. - * - * @param ringstellung : Character : Punkt an dem die Walze umspringt - */ - public void setRingstellung(Character ringstellung) { - - if(Character.isDigit(ringstellung) && ringstellung > 0 && ringstellung <= 26) { - this.ringstellung = ringstellung; - } else { - this.ringstellung = '1'; - } - } - - /** - * @return walzennr : int : gibt die Walzennummer zurueck - */ - public int getWalzennr() { - return walzennr; - } - - /** - * Definiert die Walze. Es stehen fuenf Walze zur Auswahl. - * - * @param walzennr : int : setzt die Walzennummer - */ - public void setWalzennr(int walzennr) { - if(walzennr > 0 && walzennr < 6) { - this.walzennr = walzennr; - } else { - System.err.println("Keine gültige Walzennummer"); - } - } /** * Sortiert den Walzennummern das passenden Character-Array mittels switch zu. @@ -104,7 +63,7 @@ public class Walze { Character[] walzeVier = {'E', 'S', 'O', 'V', 'P', 'Z', 'J', 'A', 'Y', 'Q', 'U', 'I', 'R', 'H', 'X', 'L', 'N', 'F', 'T', 'G', 'K', 'D', 'C', 'M', 'W', 'B'}; Character[] walzeFuenf = {'V', 'Z', 'B', 'R', 'G', 'I', 'T', 'Y', 'U', 'P', 'S', 'D', 'N', 'H', 'L', 'X', 'A', 'W', 'M', 'J', 'Q', 'O', 'F', 'E', 'C', 'K'}; - switch (getWalzennr()) { + switch (walzennr) { case 1: walze = walzeEins; break; @@ -125,95 +84,163 @@ public class Walze { return walze; } - /** - * Ermittelt die Position des Buchstaben auf der Alphabetswalze, um die Position mit - * der Chiffrierung auf der gewaehlten Walze abgleichen zu koennen. - * - * @return iPositionBuchstabe : int : Position des Buchstaben im Array - */ - public int positionBuchstabe() { + + + //walzenPosition() return int => Gibt die aktuelle Position des Buchstabens zurück + public int walzenPosition() { /*Alphabetswalze*/ - Character[] walzeAlpha = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; + Character[] walzeAlphabeth = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; /*Ermittelt die Position des Buchstaben buchstabe auf der Alphabetswalze*/ - for(int index = 0; index < walzeAlpha.length; index++) { - if(getBuchstabe().equals(walzeAlpha[index])) { + for(int index = 0; index < walzeAlphabeth.length; index++) { + if(getBuchstabe().equals(walzeAlphabeth[index])) { iPositionBuchstabe = index; break; } } - return iPositionBuchstabe; } + //setzeNotch(int position) => Setze Startpunkt auf int Position des Buchstabens + // Setter für Ringstellung /** - * Chiffriert den Buchstaben an der Position aus der Methode positionBuchstabe() - * anhand der gewaehlten Walze. + * Gibt die Initiale Ringstellung der Walze an. + * Es sind nur Zahlen von 1 - 26 zugelassen. + * Im Fehlerfall wird die Ringstellung standardmaessig auf '1' gesetzt. * - * @param iPositionBuchstabe : int : Position des zu chiffrierenden Buchstabens - * @param walze : Character[] : ausgewaehlte Walze - * @return chiffrierterBuchstabe : Character : chiffrierter Buchstabe + * @param ringstellung : Character : Punkt an dem die Walze umspringt */ - public Character codiereBuchstabe(int iPositionBuchstabe, Character[] walze) { - Character codierterBuchstabe = walze[iPositionBuchstabe]; - return codierterBuchstabe; - } + public void setRingstellung(Character ringstellung) { + if(Character.isDigit(ringstellung) && ringstellung > 0 && ringstellung <= 26) { + this.ringstellung = ringstellung; + } else { + this.ringstellung = '1'; + } + } /** - * Nimmt die Startposition, die aus der Walzeneinstellung geholt wird und - * erhoeht sie um eins. - * Die Variable wird ueberschrieben und zaehlt von nun an die Position mit. - * Ab Position 25 wird wieder bei 0 angefangen. - * - * @param iPositionBuchstabe : int : alte Position der Walze - * @return iPositionBuchstabe : int : neue Position der Walze + * @return ringstellung : Character : gibt die neue Ringstellung zurueck */ - public int vorstellenDerWalze(int iPositionBuchstabe) { + public Character getRingstellung() { + return ringstellung; + } - if(iPositionBuchstabe == 25) { - iPositionBuchstabe = 0; - } else { - iPositionBuchstabe += 1; + + + //dreheWalze() return boolean => Wenn Notch erreicht, gib true zurück, ansonsten false + public boolean dreheWalze(){ + + boolean checkRing; + + if(iPositionBuchstabe == 25) { + + iPositionBuchstabe = 0; + + } else { + + iPositionBuchstabe += 1; + } + + if (iPositionBuchstabe == getRingstellung()){ + + checkRing = true; + + }else{ + + checkRing = false; } - return iPositionBuchstabe; + return checkRing; } + + //codiere(char buchstabe) return char => Gibt den verschlüsselten Buchstaben zurück /** - * Ermittelt die Position des Buchstaben auf der gewaehlten Walze, um die Position mit - * der Chiffrierung auf der AlphaWalze abgleichen zu koennen. + * Chiffriert den Buchstaben an der Position aus der Methode positionBuchstabe() + * anhand der gewaehlten Walze. * - * @param walzennr : int : gibt die gewaehlte Walze zurueck - * @return iPositionBuchstabeRe : int : Position des Buchstaben im Array + * @param + * @return chiffrierterBuchstabe : Character : chiffrierter Buchstabe */ - public int positionBuchstabeReverse(int walzennr) { - - /*Ermittelt die Position des Buchstaben buchstabe auf der Alphabetswalze*/ - for(int index = 0; index < walze.length; index++) { - if(getBuchstabe().equals(walze[index])) { - iPositionBuchstabeRe = index; - break; - } - } - return iPositionBuchstabeRe; + public Character codiere(Character buchstabe) { + setBuchstabe(buchstabe); + walzenPosition(); + Character codierterBuchstabe = walzenNummer()[iPositionBuchstabe]; + return codierterBuchstabe; } + + //codiere2(char buchstabe) => Gibt den vertauschten Buchstaben zurück (Reverse) /** * Chiffriert den Buchstaben an der Position aus der Methode positionBuchstabeReverse() * anhand der AlphaWalze. * - * @param iPositionBuchstabeRe : int : Position des zu chiffrierenden Buchstabens + * @param * @return codierterBuchstabeRe : Character : chiffrierter Buchstabe */ - public Character codierterBuchstabeReverse(int iPositionBuchstabeRe) { + public Character codiere2(char buchstabe) { + /*Alphawalze*/ Character[] walzeAlpha = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; + setBuchstabe(buchstabe); + + /*Ermittelt die Position des Buchstaben buchstabe auf der Alphabetswalze*/ + for(int index = 0; index < walzenNummer().length; index++) { + if(getBuchstabe().equals(walzenNummer()[index])) { + iPositionBuchstabeRe = index; + break; + } + } + Character codierterBuchstabeRe = walzeAlpha[iPositionBuchstabeRe]; return codierterBuchstabeRe; + + + } + +//_________________________________________________________________________________________ + + + /** + * @return buchstabe : Character : gibt den neuen Buchstaben zurueck + */ + public Character getBuchstabe() { + return buchstabe; + } + + /** + * Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen. + * Buchstaben werden automatisch in Grossbuchstaben umgewandelt. + * Im Fehlerfall wird die Grundeinstellung der Walze standardmaessig auf 'A' gesetzt. + * + * @param buchstabe : Character : Grundeinstellung der Walze + */ + public void setBuchstabe(Character buchstabe) { + + if(Character.isLetter(buchstabe)) { + this.buchstabe = Character.toUpperCase(buchstabe); + } else { + this.buchstabe = 'A'; + } + } + + + //TODO: ??? Brauchen wir Setter, wo findet Überprüfung der Walzennr. statt. + /** + * Definiert die Walze. Es stehen fuenf Walze zur Auswahl. + * + * @param walzennr : int : setzt die Walzennummer + */ + public void setWalzennr(int walzennr) { + if(walzennr > 0 && walzennr < 6) { + this.walzennr = walzennr; + } else { + System.err.println("Keine gültige Walzennummer"); + } } } diff --git a/src/main/resources/Enigma/gui.fxml b/src/main/resources/Enigma/gui.fxml index ae2b648dd67c8856ee83f5a43d166affc882a42a..e196eeb372928689afae3f8a86b530dc278f28ac 100644 --- a/src/main/resources/Enigma/gui.fxml +++ b/src/main/resources/Enigma/gui.fxml @@ -4,7 +4,6 @@ <?import javafx.scene.control.ButtonBar?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.MenuButton?> -<?import javafx.scene.control.MenuItem?> <?import javafx.scene.control.TextField?> <?import javafx.scene.layout.AnchorPane?> @@ -22,41 +21,41 @@ <TextField layoutX="693.0" layoutY="625.0" prefHeight="25.0" prefWidth="48.0" /> <ButtonBar layoutX="31.0" layoutY="570.0" prefHeight="36.0" prefWidth="860.0"> <buttons> - <Button mnemonicParsing="false" text="L" /> - <Button mnemonicParsing="false" text="P" /> - <Button mnemonicParsing="false" text="Y" /> - <Button mnemonicParsing="false" text="X" /> - <Button mnemonicParsing="false" text="C" /> - <Button mnemonicParsing="false" text="V" /> - <Button mnemonicParsing="false" text="B" /> - <Button mnemonicParsing="false" text="N" /> - <Button mnemonicParsing="false" text="M" /> + <Button fx:id="btnL" mnemonicParsing="false" onAction="#gedrueckteTaste" text="L" /> + <Button fx:id="btnP" mnemonicParsing="false" onAction="#gedrueckteTaste" text="P" /> + <Button fx:id="btnY" mnemonicParsing="false" onAction="#gedrueckteTaste" text="Y" /> + <Button fx:id="btnX" mnemonicParsing="false" onAction="#gedrueckteTaste" text="X" /> + <Button fx:id="btnC" mnemonicParsing="false" onAction="#gedrueckteTaste" text="C" /> + <Button fx:id="btnV" mnemonicParsing="false" onAction="#gedrueckteTaste" text="V" /> + <Button fx:id="btnB" mnemonicParsing="false" onAction="#gedrueckteTaste" text="B" /> + <Button fx:id="btnN" mnemonicParsing="false" onAction="#gedrueckteTaste" text="N" /> + <Button fx:id="btnM" mnemonicParsing="false" onAction="#gedrueckteTaste" text="M" /> </buttons> </ButtonBar> <ButtonBar layoutX="15.0" layoutY="534.0" prefHeight="36.0" prefWidth="860.0"> <buttons> - <Button mnemonicParsing="false" text="A" /> - <Button mnemonicParsing="false" text="S" /> - <Button mnemonicParsing="false" text="D" /> - <Button mnemonicParsing="false" text="F" /> - <Button mnemonicParsing="false" text="G" /> - <Button mnemonicParsing="false" text="H" /> - <Button mnemonicParsing="false" text="J" /> - <Button mnemonicParsing="false" text="K" /> + <Button fx:id="btnA" mnemonicParsing="false" onAction="#gedrueckteTaste" text="A" /> + <Button fx:id="btnS" mnemonicParsing="false" onAction="#gedrueckteTaste" text="S" /> + <Button fx:id="btnD" mnemonicParsing="false" onAction="#gedrueckteTaste" text="D" /> + <Button fx:id="btnF" mnemonicParsing="false" onAction="#gedrueckteTaste" text="F" /> + <Button fx:id="btnG" mnemonicParsing="false" onAction="#gedrueckteTaste" text="G" /> + <Button fx:id="btnH" mnemonicParsing="false" onAction="#gedrueckteTaste" text="H" /> + <Button fx:id="btnJ" mnemonicParsing="false" onAction="#gedrueckteTaste" text="J" /> + <Button fx:id="btnK" mnemonicParsing="false" onAction="#gedrueckteTaste" text="K" /> </buttons> </ButtonBar> <ButtonBar layoutX="22.0" layoutY="491.0" prefHeight="25.0" prefWidth="583.0"> <buttons> - <Button minWidth="13.0" mnemonicParsing="false" prefHeight="25.0" text="Q" /> - <Button mnemonicParsing="false" text="W" /> - <Button mnemonicParsing="false" text="E" /> - <Button mnemonicParsing="false" text="R" /> - <Button mnemonicParsing="false" text="T" /> - <Button mnemonicParsing="false" text="Z" /> - <Button mnemonicParsing="false" text="U" /> - <Button mnemonicParsing="false" text="I" /> - <Button mnemonicParsing="false" text="O" /> - <Button mnemonicParsing="false" text="Löschen" /> + <Button fx:id="btnQ" minWidth="13.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" text="Q" /> + <Button fx:id="btnW" mnemonicParsing="false" onAction="#gedrueckteTaste" text="W" /> + <Button fx:id="btnE" mnemonicParsing="false" onAction="#gedrueckteTaste" text="E" /> + <Button fx:id="btnR" mnemonicParsing="false" onAction="#gedrueckteTaste" text="R" /> + <Button fx:id="btnT" mnemonicParsing="false" onAction="#gedrueckteTaste" text="T" /> + <Button fx:id="btnZ" mnemonicParsing="false" onAction="#gedrueckteTaste" text="Z" /> + <Button fx:id="btnU" mnemonicParsing="false" onAction="#gedrueckteTaste" text="U" /> + <Button fx:id="btnI" mnemonicParsing="false" onAction="#gedrueckteTaste" text="I" /> + <Button fx:id="btnO" mnemonicParsing="false" onAction="#gedrueckteTaste" text="O" /> + <Button fx:id="btnLöschen" mnemonicParsing="false" text="Löschen" /> </buttons> </ButtonBar> <ButtonBar layoutX="39.0" layoutY="418.0" prefHeight="36.0" prefWidth="860.0"> @@ -97,32 +96,11 @@ <Button mnemonicParsing="false" text="O" /> </buttons> </ButtonBar> - <MenuButton fx:id="w1" layoutX="91.0" layoutY="76.0" mnemonicParsing="false" text="I"> -<!-- <items>--> -<!-- <MenuItem fx:id="w1I" mnemonicParsing="false" onAction="#w1I" text="I" />--> -<!-- <MenuItem fx:id="w1II" mnemonicParsing="false" onAction="#w1II" text="II" />--> -<!-- <MenuItem fx:id="w1III" mnemonicParsing="false" onAction="#w1III" text="III" />--> -<!-- <MenuItem fx:id="w1IV" mnemonicParsing="false" onAction="#w1IV" text="IV" />--> -<!-- <MenuItem fx:id="w1V" mnemonicParsing="false" onAction="#w1V" text="V" />--> -<!-- </items>--> + <MenuButton fx:id="mBtnWalzPos1" layoutX="91.0" layoutY="76.0" mnemonicParsing="false" text="I"> </MenuButton> - <MenuButton fx:id="w3" layoutX="171.0" layoutY="76.0" mnemonicParsing="false" text="I"> - <items> - <MenuItem fx:id="w3I" mnemonicParsing="false" onAction="#w3I" text="I" /> - <MenuItem fx:id="w3II" mnemonicParsing="false" onAction="#w3II" text="II" /> - <MenuItem fx:id="w3III" mnemonicParsing="false" onAction="#w3III" text="III" /> - <MenuItem fx:id="w3IV" mnemonicParsing="false" onAction="#w3IV" text="IV" /> - <MenuItem fx:id="w3V" mnemonicParsing="false" onAction="#w3V" text="V" /> - </items> + <MenuButton fx:id="mBtnWalzPos3" layoutX="171.0" layoutY="76.0" mnemonicParsing="false" text="I"> </MenuButton> - <MenuButton fx:id="w2" layoutX="133.0" layoutY="76.0" mnemonicParsing="false" text="I"> - <items> - <MenuItem fx:id="w2I" mnemonicParsing="false" onAction="#w2I" text="I" /> - <MenuItem fx:id="w2II" mnemonicParsing="false" onAction="#w2II" text="II" /> - <MenuItem fx:id="w2III" mnemonicParsing="false" onAction="#w2III" text="III" /> - <MenuItem fx:id="w2IV" mnemonicParsing="false" onAction="#w2IV" text="IV" /> - <MenuItem fx:id="w2V" mnemonicParsing="false" onAction="#w2V" text="V" /> - </items> + <MenuButton fx:id="mBtnWalzPos2" layoutX="133.0" layoutY="76.0" mnemonicParsing="false" text="I"> </MenuButton> <!-- <MenuButton layoutX="93.0" layoutY="114.0" mnemonicParsing="false">--> <!-- <items>--> @@ -154,47 +132,26 @@ <!-- <MenuItem mnemonicParsing="false" onAction="#z26" text="26" />--> <!-- </items>--> <!-- </MenuButton>--> - <MenuButton layoutX="173.0" layoutY="114.0" mnemonicParsing="false"> - <items> - <MenuItem mnemonicParsing="false" text="Action 1" /> - <MenuItem mnemonicParsing="false" text="Action 2" /> - </items> + <MenuButton fx:id="mBtnNotchPos3" layoutX="173.0" layoutY="114.0" mnemonicParsing="false" text="1"> </MenuButton> - <MenuButton layoutX="135.0" layoutY="114.0" mnemonicParsing="false"> - <items> - <MenuItem mnemonicParsing="false" text="Action 1" /> - <MenuItem mnemonicParsing="false" text="Action 2" /> - </items> + <MenuButton fx:id="mBtnNotchPos2" layoutX="135.0" layoutY="114.0" mnemonicParsing="false" text="1"> </MenuButton> - <MenuButton layoutX="95.0" layoutY="157.0" mnemonicParsing="false"> - <items> - <MenuItem mnemonicParsing="false" text="Action 1" /> - <MenuItem mnemonicParsing="false" text="Action 2" /> - </items> + <MenuButton fx:id="mBtnStartPos1" layoutX="95.0" layoutY="157.0" mnemonicParsing="false" text="A"> </MenuButton> - <MenuButton layoutX="175.0" layoutY="157.0" mnemonicParsing="false"> - <items> - <MenuItem mnemonicParsing="false" text="Action 1" /> - <MenuItem mnemonicParsing="false" text="Action 2" /> - </items> + <MenuButton fx:id="mBtnStartPos3" layoutX="175.0" layoutY="157.0" mnemonicParsing="false" text="A"> </MenuButton> - <MenuButton layoutX="137.0" layoutY="157.0" mnemonicParsing="false"> - <items> - <MenuItem mnemonicParsing="false" text="Action 1" /> - <MenuItem mnemonicParsing="false" text="Action 2" /> - </items> + <MenuButton fx:id="mBtnStartPos2" layoutX="137.0" layoutY="157.0" mnemonicParsing="false" text="A"> </MenuButton> - <TextField layoutX="246.0" layoutY="76.0" prefHeight="77.0" prefWidth="410.0" /> - <TextField layoutX="248.0" layoutY="182.0" prefHeight="77.0" prefWidth="410.0" /> + <TextField fx:id="tfrein" layoutX="246.0" layoutY="76.0" prefHeight="77.0" prefWidth="410.0" /> + <TextField fx:id="tfcodiert" layoutX="248.0" layoutY="182.0" prefHeight="77.0" prefWidth="410.0" /> <Button layoutX="717.0" layoutY="221.0" mnemonicParsing="false" onAction="#btnsenden" prefHeight="69.0" prefWidth="164.0" text="An Funker senden" /> - <Button layoutX="717.0" layoutY="135.0" mnemonicParsing="false" prefHeight="69.0" prefWidth="164.0" text="Funkspruch empfangen" /> - <TextField layoutX="725.0" layoutY="76.0" /> + <Button layoutX="717.0" layoutY="135.0" mnemonicParsing="false" onAction="#btnempfangen" prefHeight="69.0" prefWidth="164.0" text="Funkspruch empfangen" /> + <TextField fx:id="tfKenngruppe" layoutX="725.0" layoutY="76.0" /> <Label layoutX="727.0" layoutY="51.0" prefHeight="17.0" prefWidth="149.0" text="Kenngruppe" /> - <MenuButton layoutX="93.0" layoutY="114.0" mnemonicParsing="false"> - <items> - <MenuItem mnemonicParsing="false" text="Action 1" /> - <MenuItem mnemonicParsing="false" text="Action 2" /> - </items> - </MenuButton> + <MenuButton fx:id="mBtnNotchPos1" layoutX="93.0" layoutY="114.0" mnemonicParsing="false" text="1" /> + <Label layoutX="29.0" layoutY="80.0" text="Walze" /> + <Label layoutX="29.0" layoutY="127.0" text="Ringe" /> + <Label layoutX="11.0" layoutY="161.0" text="Startposition" /> + <Label layoutX="380.0" layoutY="27.0" prefHeight="17.0" prefWidth="172.0" text="Tageseinstellungen" /> </children> </AnchorPane>