diff --git a/doc/Klassendiagram.jpg b/doc/Klassendiagram.jpg deleted file mode 100644 index 8fda25585881f04698ccc97e883cb81b3f514ed4..0000000000000000000000000000000000000000 Binary files a/doc/Klassendiagram.jpg and /dev/null differ diff --git a/src/main/java/projekt/enigma/database/DatenbankSqlite.java b/src/main/java/projekt/enigma/database/DatenbankSqlite.java index ac7c9024be694baff54f6573ac70dc695fc45081..21a20a22c96642c0d7b9dd2e89b1e4efc1c16dec 100644 --- a/src/main/java/projekt/enigma/database/DatenbankSqlite.java +++ b/src/main/java/projekt/enigma/database/DatenbankSqlite.java @@ -72,96 +72,4 @@ public class DatenbankSqlite { return codebuch; } - - //region Random New Codebuch generieren - /** - * Setzt zufällige Codebuch Einträge in die SQLite Datenbank - * Tag => int - * Walzenlage => String w1,w2,w3 - * Ringstellung => String r1,r2,r3 - * Steckverbindungen => s0,s1,s2,s3,s4,s5,s6,s7,s8,s9 - */ - /* - public void autoGenCodebuch() throws SQLException { - - Connection conn = connect(); - conn.setAutoCommit(false); - PreparedStatement pstmtInsert = conn.prepareStatement("INSERT INTO table_codebuch (Tag, Walzenlage, Ringstellung, Steckverbindung) VALUES (?, ?, ?, ?);"); - for (int i = 3; i < 32; i++) { - pstmtInsert.setInt(1, i); - pstmtInsert.setString(2, walzenlage()); - pstmtInsert.setString(3, ringstellung()); - pstmtInsert.setString(4, steckverbindung()); - pstmtInsert.executeUpdate(); - } - - conn.commit(); - } - - /** - * Generiert einen String aus 3 Zufalls-Zahlen(zwischen 1 und 5) - * die Zahlen sind durch Komma getrennt - * @return String => walzenlage mit drei Kommaseparierten Zufallszahlen zwischen 1 und 5 - */ - /* - private static String walzenlage(){ - String walzenlage; - Random random = new Random(); - int[] w = new int[3]; - for (int i = 0; i < 3; i++) { - - w[i] = (random.nextInt(5))+1; - if (i==1&&w[0]==w[i])w[i]=(random.nextInt(5))+1; - if ((i==2&&w[0]==w[2])||(i==2&&w[1]==w[i]))w[i]=(random.nextInt(5))+1; - } - walzenlage= w[0]+","+w[1]+","+w[2]; - return walzenlage; - }*/ - - /** - * Generiert einen String aus 3 Zufalls-Zahlen(zwischen 1 und 26) - * die Zahlen sind durch Komma getrennt - * @return String => ringstellung mit drei Kommaseparierten Zufallszahlen zwischen 1 und 26 - */ - /* - private static String ringstellung(){ - String ringstellung; - Random random = new Random(); - int[] w = new int[3]; - for (int i = 0; i < 3; i++) { - w[i] = (random.nextInt(26))+1; - } - ringstellung= w[0]+","+w[1]+","+w[2]; - return ringstellung; - }*/ - - /** - * Generiert einen String aus 10 * 2 unterschiedlichen Großbuchstaben - * @return String => 10 Buchstabenkombinationen mit Komma getrennt - *//* - private static String steckverbindung(){ - Random rnd = new Random(); - String steckverbindung=""; - - - char[] c = new char[20]; - for (int i = 0; i < 20; i++) { - c[i] = (char) (rnd.nextInt(26) + 'A'); - for (int j = i; j >= 0; j--) { - if (i>j) { - while (c[i]==c[j]) { - c[i] = (char) (rnd.nextInt(26) + 'A'); - j= i-1; - } - } - } - } - steckverbindung = ((""+c[0]) + (""+c[1]) +"," +(""+c[2]) +(""+c[3]) + ","+(""+c[4]) +(""+c[5]) + ","+(""+c[6]) +(""+c[7]) + "," - +(""+c[8]) +(""+c[9]) + ","+(""+c[10]) +(""+c[11]) + ","+(""+c[12]) +(""+c[13]) + ","+(""+c[14]) +(""+c[15]) + ","+(""+c[16]) +(""+c[17]) + "," - +(""+c[18]) +(""+c[19])); - // System.out.println(steckverbindung); - // steckverbindung= (String) steckverbindung.subSequence(0,steckverbindung.lastIndexOf(",")); - return steckverbindung; - }*/ - //endregion } diff --git a/src/main/java/projekt/enigma/model/Codierer.java b/src/main/java/projekt/enigma/model/Codierer.java index 8631af6186be26701d629893a62ba15d82c94ee0..b548415005700d404a7784efc93d14147fd41d0e 100644 --- a/src/main/java/projekt/enigma/model/Codierer.java +++ b/src/main/java/projekt/enigma/model/Codierer.java @@ -45,11 +45,6 @@ public class Codierer { * Im Codebuch sind die Tageswerte zu finden. Über dieses Objekt kann darauf zugegriffen werden. */ private Codebuch codebuch; - - /** - * Thread mit der Abfolge an Aufgaben des Funkraums. - */ - private Thread funk; //endregion //region Konstruktor @@ -71,7 +66,6 @@ public class Codierer { //endregion //region Funktionen & Methoden - //region Reset & Initialisieren /** @@ -497,20 +491,6 @@ public class Codierer { //endregion //endregion - //region Setter - - /** - * Setzt die Kenngruppe welche die Enigma gerade benutzt. - * - * @param kenngruppe : String : Kenngruppe welche die Enigma gerade benutzt - */ - public void setKenngruppe(String kenngruppe) { - - this.kenngruppe = kenngruppe; - this.initialisiereHardware(); - } - //endregion - //region Getter /** @@ -532,14 +512,5 @@ public class Codierer { public String getSpruchschluessel() { return this.spruchschluessel; } - - /** - * Gibt die bisher erstellte Nachricht zurück - * - * @return String : Erstellte Nachricht - */ - public String getNachricht() { - return nachricht; - } //endregion } diff --git a/src/main/java/projekt/enigma/model/Fehler.java b/src/main/java/projekt/enigma/model/Fehler.java index 624e5e267f73d10fb512fcd8799429489bb4e39e..5625c5a4842c1066891592af4234abaf818375a4 100644 --- a/src/main/java/projekt/enigma/model/Fehler.java +++ b/src/main/java/projekt/enigma/model/Fehler.java @@ -60,7 +60,7 @@ public class Fehler { * wenn in der App.java der Getter getDebug einen int > 0 zurueck gibt. * Ueber diesen Getter kann man steuern ob Meldungen in der Konsole angezeigt werden sollen oder nicht. * - * @param message : String : Nachricht + * @param message : String : Nachricht * @param isFunction : boolean : Gibt an ob ein Funktionsname übergeben wird oder eine Debug Meldung */ public void debug(String message, boolean isFunction) { @@ -78,7 +78,7 @@ public class Fehler { * wenn in der App.java der Getter getDebug einen int > 0 zurueck gibt. * Ueber diesen Getter kann man steuern ob Meldungen in der Konsole angezeigt werden sollen oder nicht. * - * @param message : String : Nachricht + * @param message : String : Nachricht * @param isFunction : boolean : Gibt an ob ein Funktionsname übergeben wird oder eine Debug Meldung */ public void debug(String message, boolean isFunction, int debugLevel) { diff --git a/src/main/java/projekt/enigma/model/Funkraum.java b/src/main/java/projekt/enigma/model/Funkraum.java index 77131a58b194b31ed6bf6012822786dc033f07fd..e903f8cf51c9114fd62ee7c7f6a086fa86ea96cf 100644 --- a/src/main/java/projekt/enigma/model/Funkraum.java +++ b/src/main/java/projekt/enigma/model/Funkraum.java @@ -1,7 +1,6 @@ package projekt.enigma.model; import org.apache.http.HttpEntity; -import org.apache.http.HttpException; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; @@ -28,95 +27,93 @@ import java.util.List; */ public class Funkraum { - /** - * Zum Empfangen liefert der Server, anstatt der Kenngruppe (k), den Empfangstag (t) der Nachricht mit, damit man - * die Grundeinstellungen aus dem Codebuch, für diesen Tag, raussuchen kann. - * {'m': 'Hello world', 't': '26'} - * - * @param kenngruppe : String : Kenngruppe dieser Enigma - * @return funkspruch : String[] : String Array wobei Index 0 dem Empfangstag entspricht und Index 1 - * der empfangenen Nachricht - * @throws UnsupportedEncodingException : Exception : falsche Zeichenkodierung - * @throws IOException : Exception : Fehler bei der uebergabe an den Webservice - * @throws NullPointerException : Exception : Keine Nachricht - */ - public String[] empfangeFunkspruch(String kenngruppe) { - String[] funkspruch = new String[2]; + /** + * Zum Empfangen liefert der Server, anstatt der Kenngruppe (k), den Empfangstag (t) der Nachricht mit, damit man + * die Grundeinstellungen aus dem Codebuch, für diesen Tag, raussuchen kann. + * {'m': 'Hello world', 't': '26'} + * + * @param kenngruppe : String : Kenngruppe dieser Enigma + * @return funkspruch : String[] : String Array wobei Index 0 dem Empfangstag entspricht und Index 1 + * der empfangenen Nachricht + * @throws NullPointerException : Exception : Keine Nachricht + */ + public String[] empfangeFunkspruch(String kenngruppe) { + String[] funkspruch = new String[2]; - HttpClient httpclient = HttpClients.createDefault(); - HttpPost httppost = new HttpPost("https://enigma.itstall.de/"); + HttpClient httpclient = HttpClients.createDefault(); + HttpPost httppost = new HttpPost("https://enigma.itstall.de/"); - try { - // Anfrage Parameter und Encoding setzen - List<NameValuePair> params = new ArrayList<>(2); - params.add(new BasicNameValuePair("k", kenngruppe)); - httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + try { + // Anfrage Parameter und Encoding setzen + List<NameValuePair> params = new ArrayList<>(2); + params.add(new BasicNameValuePair("k", kenngruppe)); + httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); - // POST Request ausführen und Rückgabe verarbeiten - HttpResponse response = httpclient.execute(httppost); - HttpEntity entity = response.getEntity(); + // POST Request ausführen und Rückgabe verarbeiten + HttpResponse response = httpclient.execute(httppost); + HttpEntity entity = response.getEntity(); - if (entity != null) { - BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); - JSONObject result = new JSONObject(reader.readLine()); + if (entity != null) { + BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); + JSONObject result = new JSONObject(reader.readLine()); - if (!result.getString("m").isEmpty()) { - funkspruch[0] = result.getString("t"); - funkspruch[1] = result.getString("m"); - } - } - } catch (UnsupportedEncodingException e) { - new Fehler().showErrorDialog("error", "Encoding wird nicht unterstützt", - "Kommunikation mit dem Feind wird als Landesverrat bestraft"); - } catch (IOException e) { - new Fehler().showErrorDialog("error", "HTTP Post war nicht erfolgreich", - "Bitte wenden Sie sich an ihren Vorgesetzten."); - } catch (NullPointerException e) { - new Fehler().showErrorDialog("info", "Keiner schreibt dir...", - "Es liegen keine neuen Nachrichten im Funkraum für Sie vor."); - } + if (!result.getString("m").isEmpty()) { + funkspruch[0] = result.getString("t"); + funkspruch[1] = result.getString("m"); + } + } + } catch (UnsupportedEncodingException e) { + new Fehler().showErrorDialog("error", "Encoding wird nicht unterstützt", + "Kommunikation mit dem Feind wird als Landesverrat bestraft"); + } catch (IOException e) { + new Fehler().showErrorDialog("error", "HTTP Post war nicht erfolgreich", + "Bitte wenden Sie sich an ihren Vorgesetzten."); + } catch (NullPointerException e) { + new Fehler().showErrorDialog("info", "Keiner schreibt dir...", + "Es liegen keine neuen Nachrichten im Funkraum für Sie vor."); + } - return funkspruch; - } + return funkspruch; + } - /** - * Dem Service senden wir unsere Nachricht als POST Parameter (m) und unsere Kenngruppe (k). - * Dieser nimmt die Daten entgegen und hierlerlegt sie auf seinem Stapel (Datenbank) von dem die Nachrichten - * irgendwann, auf Anfrage, wieder abgerufen werden koennen. - * <p> - * Darauf antwortet der Server mit einem JSON Object in dem das Ergebnis der Anfrage zu sehen ist. - * {'result': 200} - * <p> - * Die 200 heißt hier, dass alles erfolgreich durchgefuehrt werden konnte. Steht hier etwas anderes, ist ein Fehler - * aufgetreten und die Anfrage war nicht erfolgreich. - * In letzterem Fall sollte eine Meldung an den Benutzer ausgegeben werden und ggf spaeter erneut versucht werden. - * - * @param funkspruch : String : Der zu sendende Funkspruch - * @param kenngruppe : String : Die Kenngruppe dieser Engima - * @throws IOException : Exception : Funkspruch konnte nicht gesendet werden - */ - public void sendeFunkspruch(String funkspruch, String kenngruppe) throws HttpException, IOException { - HttpClient httpclient = HttpClients.createDefault(); - HttpPost httppost = new HttpPost("https://enigma.itstall.de/"); + /** + * Dem Service senden wir unsere Nachricht als POST Parameter (m) und unsere Kenngruppe (k). + * Dieser nimmt die Daten entgegen und hierlerlegt sie auf seinem Stapel (Datenbank) von dem die Nachrichten + * irgendwann, auf Anfrage, wieder abgerufen werden koennen. + * <p> + * Darauf antwortet der Server mit einem JSON Object in dem das Ergebnis der Anfrage zu sehen ist. + * {'result': 200} + * <p> + * Die 200 heißt hier, dass alles erfolgreich durchgefuehrt werden konnte. Steht hier etwas anderes, ist ein Fehler + * aufgetreten und die Anfrage war nicht erfolgreich. + * In letzterem Fall sollte eine Meldung an den Benutzer ausgegeben werden und ggf spaeter erneut versucht werden. + * + * @param funkspruch : String : Der zu sendende Funkspruch + * @param kenngruppe : String : Die Kenngruppe dieser Engima + * @throws IOException : Exception : Funkspruch konnte nicht gesendet werden + */ + public void sendeFunkspruch(String funkspruch, String kenngruppe) throws IOException { + HttpClient httpclient = HttpClients.createDefault(); + HttpPost httppost = new HttpPost("https://enigma.itstall.de/"); - // Anfrage Parameter und Encoding setzen - List<NameValuePair> params = new ArrayList<>(2); - params.add(new BasicNameValuePair("k", kenngruppe)); - params.add(new BasicNameValuePair("m", funkspruch)); - httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + // Anfrage Parameter und Encoding setzen + List<NameValuePair> params = new ArrayList<>(2); + params.add(new BasicNameValuePair("k", kenngruppe)); + params.add(new BasicNameValuePair("m", funkspruch)); + httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); - // POST Request ausführen und Rückgabe verarbeiten - HttpResponse response = httpclient.execute(httppost); - HttpEntity entity = response.getEntity(); + // POST Request ausführen und Rückgabe verarbeiten + HttpResponse response = httpclient.execute(httppost); + HttpEntity entity = response.getEntity(); - if (entity != null) { - BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); - JSONObject result = new JSONObject(reader.readLine()); - if (result.getInt("result") != 200) { - new Fehler().showErrorDialog("error", "HTTP Exception", - "Der andere Funker mag deine Nachricht nicht. " + - "Rüge ihn wenn du ihn wieder siehst..."); - } - } - } + if (entity != null) { + BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); + JSONObject result = new JSONObject(reader.readLine()); + if (result.getInt("result") != 200) { + new Fehler().showErrorDialog("error", "HTTP Exception", + "Der andere Funker mag deine Nachricht nicht. " + + "Rüge ihn wenn du ihn wieder siehst..."); + } + } + } } diff --git a/src/main/java/projekt/enigma/model/Hardware.java b/src/main/java/projekt/enigma/model/Hardware.java index 0ddd8ed605bc771ee67247e6e3a3e39bd669add3..00e0d12330a1da925bba0554f558c6f65d0f8f7e 100644 --- a/src/main/java/projekt/enigma/model/Hardware.java +++ b/src/main/java/projekt/enigma/model/Hardware.java @@ -15,207 +15,187 @@ package projekt.enigma.model; */ public class Hardware { - //region Variablen - /** - * walzen: Walze-Array: erzeugt ein privates Array mit der die Anzahl der Walzen festgelegt wird. - */ - private Walze[] walzen; - - /** - * steckbrett: Steckbrett: erzeugt ein privates Steckbrett-Objekt - */ - private Steckbrett steckbrett; - - /** - * reflektor: Reflektor: erzeugt ein privates Reflektor-Objekt. - */ - private Reflektor reflektor; - //endregion - - //region Konstruktor - - /** - * Im Konstruktor legen wir die Anzahl der Walzen fest welche die Hardware aufnehmen kann. - * Die Enigma I welche hier nachgebildet werden soll, konnte drei Walzen aufnehmen. - */ - public Hardware() { - this.walzen = new Walze[3]; - } - //endregion - - //region Funktionen & Methoden - - /** - * Setzt eine Walze ein - * - * @param walze : int : Setzt die Walze mit der angegebenen Nummer ein - * @param walzenNr : int : Die Nummer der einzusetzenden Walze - */ - public void setzeWalzenNr(int walze, int walzenNr, int ringstellung) { - this.walzen[walze] = new Walze(walzenNr, ringstellung); - } - - /** - * Setzt den Notch der Walze - * - * @param walze : int : Position der Walze - * @param position : int : Umspringpunkt auf der Walze - */ - public void setzeRing(int walze, int position) { - this.walzen[walze].setRingstellung(position); - } - - /** - * Setzt den Startwert (position) der Walze (walze) - * - * @param walze : int : Nummer der Walze - * @param buchstabe : char : Buchstabe der zugewiesen soll - */ - public void setzePosition(int walze, char buchstabe) { - this.walzen[walze].setPosition(buchstabe); - } - - /** - * Verschlüsselt den übergebenen Buchstaben und fügt ihn der Nachricht hinzu - * - * @param buchstabe char : Der zu ver/entschlüsselnde Buchstabe - * @return char : Der ver/entschlüsselte Buchstabe - */ - public char codiere(char buchstabe) { - - new Fehler().debug(this.getClass().getName() + "." + + //region Variablen + /** + * walzen: Walze-Array: erzeugt ein privates Array mit der die Anzahl der Walzen festgelegt wird. + */ + private Walze[] walzen; + + /** + * steckbrett: Steckbrett: erzeugt ein privates Steckbrett-Objekt + */ + private Steckbrett steckbrett; + + /** + * reflektor: Reflektor: erzeugt ein privates Reflektor-Objekt. + */ + private Reflektor reflektor; + //endregion + + //region Konstruktor + + /** + * Im Konstruktor legen wir die Anzahl der Walzen fest welche die Hardware aufnehmen kann. + * Die Enigma I welche hier nachgebildet werden soll, konnte drei Walzen aufnehmen. + */ + public Hardware() { + this.walzen = new Walze[3]; + } + //endregion + + //region Funktionen & Methoden + + /** + * Setzt eine Walze ein + * + * @param walze : int : Setzt die Walze mit der angegebenen Nummer ein + * @param walzenNr : int : Die Nummer der einzusetzenden Walze + */ + public void setzeWalzenNr(int walze, int walzenNr, int ringstellung) { + this.walzen[walze] = new Walze(walzenNr, ringstellung); + } + + /** + * Setzt den Notch der Walze + * + * @param walze : int : Position der Walze + * @param position : int : Umspringpunkt auf der Walze + */ + public void setzeRing(int walze, int position) { + this.walzen[walze].setRingstellung(position); + } + + /** + * Setzt den Startwert (position) der Walze (walze) + * + * @param walze : int : Nummer der Walze + * @param buchstabe : char : Buchstabe der zugewiesen soll + */ + public void setzePosition(int walze, char buchstabe) { + this.walzen[walze].setPosition(buchstabe); + } + + /** + * Verschlüsselt den übergebenen Buchstaben und fügt ihn der Nachricht hinzu + * + * @param buchstabe char : Der zu ver/entschlüsselnde Buchstabe + * @return char : Der ver/entschlüsselte Buchstabe + */ + public char codiere(char buchstabe) { + + new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true); - buchstabe = Character.toUpperCase(buchstabe); - String debug = String.format("Positionen: W1:%s W2:%s W3:%s", - this.walzen[0].getPosition(), - this.walzen[1].getPosition(), - this.walzen[2].getPosition()); - debug += "\nI\tS\t3\t2\t1\tR\t1\t2\t3\tS\n" + buchstabe; - - this.dreheWalzen(1); - - buchstabe = this.steckbrett.codiere(Character.toUpperCase(buchstabe)); - debug += "\t" + buchstabe; - buchstabe = this.walzen[2].codiere(buchstabe); - debug += "\t" + buchstabe; - buchstabe = this.walzen[1].codiere(buchstabe); - debug += "\t" + buchstabe; - buchstabe = this.walzen[0].codiere(buchstabe); - debug += "\t" + buchstabe; - buchstabe = this.reflektor.codiere(buchstabe); - debug += "\t" + buchstabe; - buchstabe = this.walzen[0].codiere2(buchstabe); - debug += "\t" + buchstabe; - buchstabe = this.walzen[1].codiere2(buchstabe); - debug += "\t" + buchstabe; - buchstabe = this.walzen[2].codiere2(buchstabe); - debug += "\t" + buchstabe; - buchstabe = this.steckbrett.codiere(buchstabe); - debug += "\t" + buchstabe; - new Fehler().debug(debug, false); - - return buchstabe; - } - - /** - * Nach jeder codierung eines Buchstabens müssen die Walzen gedreht werden. - * Hier überprüfen wir welche der Walzen gedreht werden müssen und stoßen die Vorgang an. - */ - public void dreheWalzen(int richtung) { - if (richtung > 0) { - for (int i = 0; i < richtung; i++) { - if (this.walzen[2].dreheWalze(1)) { - if (this.walzen[1].dreheWalze(1)) { - this.walzen[0].dreheWalze(1); - } - } - } - } else { - for (int i = 0; i > richtung; richtung++) { - if (this.walzen[2].dreheWalze(-1)) { - if (this.walzen[1].dreheWalze(-1)) { - this.walzen[0].dreheWalze(-1); - } - } - } - } - } - - /** - * Diese Funktion setzt die Walzen auf ihren Anfangswert zurück. - * Hierfür ist der Buchstabe "A" festgelegt. - * Dies wird benötigt um zB einen neuen Spruchschlüssel einzustellen oder eine neue Nachricht zu verfassen. - */ - public void resetWalzen() { - this.getWalzen()[0].setPosition('A'); - this.getWalzen()[1].setPosition('A'); - this.getWalzen()[2].setPosition('A'); - } - //endregion - - //region Setter - - /** - * Setzt eine Walze ein und speichert das Objekt im Walzen Array - * - * @param position : int : Position der Walze - * @param walze : int : Die Nummer der Walze - * @param ringstellung : int : Umsprung Punkt der Walze - */ - public void setWalzen(int position, int walze, int ringstellung) { - this.walzen[position] = new Walze(walze, ringstellung); - } - - /** - * Gibt das Objekt des Steckbretts zurück - * - * @return Steckbrett : Das eingesetzte Steckbrett mit seinen Kabeln wenn eingesteckt - */ - public Steckbrett getSteckbrett() { - return steckbrett; - } - - /** - * Setzt das übergebene Steckbrett Objekt in die Hardware ein - * - * @param steckbrett : Steckbrett : Objekt des Steckbretts mit allen verbundenen Kabeln - */ - public void setSteckbrett(Steckbrett steckbrett) { - this.steckbrett = steckbrett; - } - //endregion - - //region Getter - - /** - * Liest den Reflektor aus und gibt ihn zurück - * - * @return Reflektor : Objekt des Reflektors - */ - public Reflektor getReflektor() { - return reflektor; - } - - /** - * Setzt den Reflektor ein. - * In der Enigma I welche hier nachgebaut wird, gab es nur einen Reflektor. - * Spätere Versionen haten zwei oder mehr, deshalb haben wir hier auch schon ein Objekt dafür erstellt, - * welches ausgetauscht werden kann. - * - * @param reflektor : Reflektor : Das Obejtk des Reflektors - */ - public void setReflektor(Reflektor reflektor) { - this.reflektor = reflektor; - } - - /** - * Gibt die verbauten Walzen Objekte zurück - * - * @return Walze[] : Array mit den Walzen Objekten - */ - public Walze[] getWalzen() { - return this.walzen; - } - //endregion + buchstabe = Character.toUpperCase(buchstabe); + String debug = String.format("Positionen: W1:%s W2:%s W3:%s", + this.walzen[0].getPosition(), + this.walzen[1].getPosition(), + this.walzen[2].getPosition()); + debug += "\nI\tS\t3\t2\t1\tR\t1\t2\t3\tS\n" + buchstabe; + + this.dreheWalzen(1); + + buchstabe = this.steckbrett.codiere(Character.toUpperCase(buchstabe)); + debug += "\t" + buchstabe; + buchstabe = this.walzen[2].codiere(buchstabe); + debug += "\t" + buchstabe; + buchstabe = this.walzen[1].codiere(buchstabe); + debug += "\t" + buchstabe; + buchstabe = this.walzen[0].codiere(buchstabe); + debug += "\t" + buchstabe; + buchstabe = this.reflektor.codiere(buchstabe); + debug += "\t" + buchstabe; + buchstabe = this.walzen[0].codiere2(buchstabe); + debug += "\t" + buchstabe; + buchstabe = this.walzen[1].codiere2(buchstabe); + debug += "\t" + buchstabe; + buchstabe = this.walzen[2].codiere2(buchstabe); + debug += "\t" + buchstabe; + buchstabe = this.steckbrett.codiere(buchstabe); + debug += "\t" + buchstabe; + new Fehler().debug(debug, false); + + return buchstabe; + } + + /** + * Nach jeder codierung eines Buchstabens müssen die Walzen gedreht werden. + * Hier überprüfen wir welche der Walzen gedreht werden müssen und stoßen die Vorgang an. + */ + public void dreheWalzen(int richtung) { + if (richtung > 0) { + for (int i = 0; i < richtung; i++) { + if (this.walzen[2].dreheWalze(1)) { + if (this.walzen[1].dreheWalze(1)) { + this.walzen[0].dreheWalze(1); + } + } + } + } else { + for (int i = 0; i > richtung; richtung++) { + if (this.walzen[2].dreheWalze(-1)) { + if (this.walzen[1].dreheWalze(-1)) { + this.walzen[0].dreheWalze(-1); + } + } + } + } + } + //endregion + + //region Setter + + /** + * Setzt eine Walze ein und speichert das Objekt im Walzen Array + * + * @param position : int : Position der Walze + * @param walze : int : Die Nummer der Walze + * @param ringstellung : int : Umsprung Punkt der Walze + */ + public void setWalzen(int position, int walze, int ringstellung) { + this.walzen[position] = new Walze(walze, ringstellung); + } + + /** + * Gibt das Objekt des Steckbretts zurück + * + * @return Steckbrett : Das eingesetzte Steckbrett mit seinen Kabeln wenn eingesteckt + */ + public Steckbrett getSteckbrett() { + return steckbrett; + } + + /** + * Setzt das übergebene Steckbrett Objekt in die Hardware ein + * + * @param steckbrett : Steckbrett : Objekt des Steckbretts mit allen verbundenen Kabeln + */ + public void setSteckbrett(Steckbrett steckbrett) { + this.steckbrett = steckbrett; + } + //endregion + + //region Getter + + /** + * Setzt den Reflektor ein. + * In der Enigma I welche hier nachgebaut wird, gab es nur einen Reflektor. + * Spätere Versionen haten zwei oder mehr, deshalb haben wir hier auch schon ein Objekt dafür erstellt, + * welches ausgetauscht werden kann. + * + * @param reflektor : Reflektor : Das Obejtk des Reflektors + */ + public void setReflektor(Reflektor reflektor) { + this.reflektor = reflektor; + } + + /** + * Gibt die verbauten Walzen Objekte zurück + * + * @return Walze[] : Array mit den Walzen Objekten + */ + public Walze[] getWalzen() { + return this.walzen; + } + //endregion } diff --git a/src/main/java/projekt/enigma/model/Morsecode.java b/src/main/java/projekt/enigma/model/Morsecode.java index 0c4894c5b72c09aeba8222b5ea844a98193878ba..bc3e56fdb184c6cd5fc393f4ade82236b9c04307 100644 --- a/src/main/java/projekt/enigma/model/Morsecode.java +++ b/src/main/java/projekt/enigma/model/Morsecode.java @@ -1,7 +1,7 @@ package projekt.enigma.model; -import java.util.*; import java.util.Map.Entry; +import java.util.TreeMap; /** * Diese Klasse definiert die Zugehoerigkeit zwischen den Buchstaben A-Z und dem Morsecode. @@ -9,137 +9,137 @@ import java.util.Map.Entry; */ public class Morsecode { - /** - * Anlegen der codeMap als TreeMap - */ - private TreeMap<String, String> codeMap; + /** + * Anlegen der codeMap als TreeMap + */ + private TreeMap<String, String> codeMap; - /** - * Im Konstruktor werden alle verfuegbaren Buchstaben (A-Z) und deren zugehoerigen - * Morsecodes, der codeMap hinzugefuegt. - */ - public Morsecode() { - codeMap = new TreeMap<>(); - this.codeMap.put("A", ".-"); - this.codeMap.put("B", "-..."); - this.codeMap.put("C", "-.-."); - this.codeMap.put("D", "-.."); - this.codeMap.put("E", "."); - this.codeMap.put("F", "..-."); - this.codeMap.put("G", "--."); - this.codeMap.put("H", "...."); - this.codeMap.put("I", ".."); - this.codeMap.put("J", ".---"); - this.codeMap.put("K", "-.-"); - this.codeMap.put("L", ".-.."); - this.codeMap.put("M", "--"); - this.codeMap.put("N", "-."); - this.codeMap.put("O", "---"); - this.codeMap.put("P", ".--."); - this.codeMap.put("Q", "--.-"); - this.codeMap.put("R", ".-."); - this.codeMap.put("S", "..."); - this.codeMap.put("T", "-"); - this.codeMap.put("U", "..-"); - this.codeMap.put("V", "...-"); - this.codeMap.put("W", ".--"); - this.codeMap.put("X", "-..-"); - this.codeMap.put("Y", "-.--"); - this.codeMap.put("Z", "--.."); - this.codeMap.put(" ", "-...-"); - this.codeMap.put("1", ".----"); - this.codeMap.put("2", "..---"); - this.codeMap.put("3", "...--"); - this.codeMap.put("4", "....-"); - this.codeMap.put("5", "....."); - this.codeMap.put("6", "-...."); - this.codeMap.put("7", "--..."); - this.codeMap.put("8", "---.."); - this.codeMap.put("9", "----."); - this.codeMap.put("0", "-----"); - } + /** + * Im Konstruktor werden alle verfuegbaren Buchstaben (A-Z) und deren zugehoerigen + * Morsecodes, der codeMap hinzugefuegt. + */ + public Morsecode() { + codeMap = new TreeMap<>(); + this.codeMap.put("A", ".-"); + this.codeMap.put("B", "-..."); + this.codeMap.put("C", "-.-."); + this.codeMap.put("D", "-.."); + this.codeMap.put("E", "."); + this.codeMap.put("F", "..-."); + this.codeMap.put("G", "--."); + this.codeMap.put("H", "...."); + this.codeMap.put("I", ".."); + this.codeMap.put("J", ".---"); + this.codeMap.put("K", "-.-"); + this.codeMap.put("L", ".-.."); + this.codeMap.put("M", "--"); + this.codeMap.put("N", "-."); + this.codeMap.put("O", "---"); + this.codeMap.put("P", ".--."); + this.codeMap.put("Q", "--.-"); + this.codeMap.put("R", ".-."); + this.codeMap.put("S", "..."); + this.codeMap.put("T", "-"); + this.codeMap.put("U", "..-"); + this.codeMap.put("V", "...-"); + this.codeMap.put("W", ".--"); + this.codeMap.put("X", "-..-"); + this.codeMap.put("Y", "-.--"); + this.codeMap.put("Z", "--.."); + this.codeMap.put(" ", "-...-"); + this.codeMap.put("1", ".----"); + this.codeMap.put("2", "..---"); + this.codeMap.put("3", "...--"); + this.codeMap.put("4", "....-"); + this.codeMap.put("5", "....."); + this.codeMap.put("6", "-...."); + this.codeMap.put("7", "--..."); + this.codeMap.put("8", "---.."); + this.codeMap.put("9", "----."); + this.codeMap.put("0", "-----"); + } - /** - * Diese Funktion ueberprueft ob der uebergebene Buchstabe in der codeMap enthalten ist. - * Wenn er enthalten ist, wird der zugehoerige Morsecode zurueck gegeben, ansonsten null. - * - * @param buchstabe : char : Zu uebersetzender Buchstabe - * @return String : Der zugehoerige Morsecode aus der codeMap - */ - private String getMorsecode(char buchstabe) { - return this.codeMap.getOrDefault(String.valueOf(buchstabe).toUpperCase(), null); - } + /** + * Diese Funktion ueberprueft ob der uebergebene Buchstabe in der codeMap enthalten ist. + * Wenn er enthalten ist, wird der zugehoerige Morsecode zurueck gegeben, ansonsten null. + * + * @param buchstabe : char : Zu uebersetzender Buchstabe + * @return String : Der zugehoerige Morsecode aus der codeMap + */ + private String getMorsecode(char buchstabe) { + return this.codeMap.getOrDefault(String.valueOf(buchstabe).toUpperCase(), null); + } - /** - * Der uebergebene String wird in seine einzelnen Zeichen (char) zerlegt und an die Funktion getMorsecode - * uebergeben und der zugehoerige Morsecode raus gesucht. - * Mittels eines StringBuilders werden die Ergebnisse zu einem Rückgabe String zusammen gesetzt. - * Wenn kein zugehoeriger Code in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der - * Enigma nicht vorhanden war. - * - * @param input : String : Zu konvertierender Text - * @return String : Der in Morsecode konvertierte Text - */ - public String convertBuchstabeToMorsecode(String input) { - StringBuilder sb = new StringBuilder(); - String morsecode; + /** + * Der uebergebene String wird in seine einzelnen Zeichen (char) zerlegt und an die Funktion getMorsecode + * uebergeben und der zugehoerige Morsecode raus gesucht. + * Mittels eines StringBuilders werden die Ergebnisse zu einem Rückgabe String zusammen gesetzt. + * Wenn kein zugehoeriger Code in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der + * Enigma nicht vorhanden war. + * + * @param input : String : Zu konvertierender Text + * @return String : Der in Morsecode konvertierte Text + */ + public String convertBuchstabeToMorsecode(String input) { + StringBuilder sb = new StringBuilder(); + String morsecode; - // Durch alle char im uebergebenen String loopen - for (int i = 0; i < input.length(); i++) { - morsecode = this.getMorsecode(input.charAt(i)); - if (morsecode != null) { - sb.append(morsecode).append(' '); - } - } + // Durch alle char im uebergebenen String loopen + for (int i = 0; i < input.length(); i++) { + morsecode = this.getMorsecode(input.charAt(i)); + if (morsecode != null) { + sb.append(morsecode).append(' '); + } + } - return sb.toString(); - } + return sb.toString(); + } - /** - * Diese Funktion ueberprueft ob der uebergebene Morsecode in der codeMap enthalten ist. - * Wenn er enthalten ist, wird der zugehoerige Buchstabe zurueck gegeben, ansonsten null - * - * @param morsecode : String : Der zu uebersetzende Morsecode - * @return : String : Der zugehoerige Buchstabe aus der codeMap - */ - private String getBuchstabe(String morsecode) { - String result = null; + /** + * Diese Funktion ueberprueft ob der uebergebene Morsecode in der codeMap enthalten ist. + * Wenn er enthalten ist, wird der zugehoerige Buchstabe zurueck gegeben, ansonsten null + * + * @param morsecode : String : Der zu uebersetzende Morsecode + * @return : String : Der zugehoerige Buchstabe aus der codeMap + */ + private String getBuchstabe(String morsecode) { + String result = null; - // Loopt duch die codeMap und erstellt daraus ein Set - for (Entry<String, String> entry : this.codeMap.entrySet()) { - if (entry.getValue().equals(morsecode)) { - result = entry.getKey(); - } - } + // Loopt duch die codeMap und erstellt daraus ein Set + for (Entry<String, String> entry : this.codeMap.entrySet()) { + if (entry.getValue().equals(morsecode)) { + result = entry.getKey(); + } + } - return result; - } + return result; + } - /** - * Der uebergebene String wird in ein String Array zerlegt. Als Trennzeichen wird das Leerzeichen genutzt. - * Anschließend wird das Array durchlaufen und die Elemente an die Funktion getBuchstabe uebergeben um den - * zugehoerigen Buchstaben zu erhalten. - * Mittels eines StringBuilders werden die Ergebnisse zu einem Rueckgabe String zusammengesetzt. - * Wenn kein zugehoeriger Buchstabe in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der - * Enigma nicht vorhanden war. - * - * @param input : String : Zu konvertierender Morsecode - * @return String : Der in Text konvertierte Morsecode - */ - public String convertMorsecodeToBuchstabe(String input) { - StringBuilder sb = new StringBuilder(); - String buchstabe; + /** + * Der uebergebene String wird in ein String Array zerlegt. Als Trennzeichen wird das Leerzeichen genutzt. + * Anschließend wird das Array durchlaufen und die Elemente an die Funktion getBuchstabe uebergeben um den + * zugehoerigen Buchstaben zu erhalten. + * Mittels eines StringBuilders werden die Ergebnisse zu einem Rueckgabe String zusammengesetzt. + * Wenn kein zugehoeriger Buchstabe in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der + * Enigma nicht vorhanden war. + * + * @param input : String : Zu konvertierender Morsecode + * @return String : Der in Text konvertierte Morsecode + */ + public String convertMorsecodeToBuchstabe(String input) { + StringBuilder sb = new StringBuilder(); + String buchstabe; - String[] morsecodes = input.split(" "); + String[] morsecodes = input.split(" "); - // Durch alle char im uebergebenen String loopen - for (String morsecode : morsecodes) { - buchstabe = this.getBuchstabe(morsecode); - if (buchstabe != null) { - sb.append(buchstabe); - } - } + // Durch alle char im uebergebenen String loopen + for (String morsecode : morsecodes) { + buchstabe = this.getBuchstabe(morsecode); + if (buchstabe != null) { + sb.append(buchstabe); + } + } - return sb.toString(); - } + return sb.toString(); + } } diff --git a/src/main/java/projekt/enigma/model/Steckbrett.java b/src/main/java/projekt/enigma/model/Steckbrett.java index aae70e4ffde4f36ac4927ccdea78e05904a31832..de70a0fef50f82c3fdb80402b567bce0de980a92 100644 --- a/src/main/java/projekt/enigma/model/Steckbrett.java +++ b/src/main/java/projekt/enigma/model/Steckbrett.java @@ -77,8 +77,8 @@ public class Steckbrett { */ public boolean setzeVertauschung(int steckbrettPort, char buchstabe1, char buchstabe2) { if (!ueberpruefeVertauschungen(buchstabe1) && !ueberpruefeVertauschungen(buchstabe2)) { - originalBuchstaben.replace(originalBuchstaben.charAt(steckbrettPort), buchstabe1); - getauschteBuchstaben.replace(getauschteBuchstaben.charAt(steckbrettPort), buchstabe2); + originalBuchstaben = originalBuchstaben.replace(originalBuchstaben.charAt(steckbrettPort), buchstabe1); + getauschteBuchstaben = getauschteBuchstaben.replace(getauschteBuchstaben.charAt(steckbrettPort), buchstabe2); return true; } else { return false; @@ -118,7 +118,7 @@ public class Steckbrett { public char codiere(Character buchstabe) { if (originalBuchstaben.contains(String.valueOf(buchstabe))) { return getauschteBuchstaben.charAt(originalBuchstaben.indexOf(buchstabe)); - } else if(getauschteBuchstaben.contains(String.valueOf(buchstabe))) { + } else if (getauschteBuchstaben.contains(String.valueOf(buchstabe))) { return originalBuchstaben.charAt(getauschteBuchstaben.indexOf(buchstabe)); } else { return buchstabe; diff --git a/src/main/java/projekt/enigma/model/Walze.java b/src/main/java/projekt/enigma/model/Walze.java index cc0aa8f983dbb9b2d96086cc4111667cb2a2f3fe..b064f6910f70aed6d735be95af321c65406ec622 100644 --- a/src/main/java/projekt/enigma/model/Walze.java +++ b/src/main/java/projekt/enigma/model/Walze.java @@ -17,9 +17,8 @@ public class Walze { //region Variablen /** * Die Anzahl der getaetigten Walzen Drehungen - * TODO: Wieder auf private setzen */ - public int turns; + private int turns; /** * Das String Array aller bekannter aktueller Walzen */ @@ -70,7 +69,6 @@ public class Walze { * * @param richtung : int : 1 dreht die Walze weiter und -1 dreht sie einen Schritt zurueck * @return checkRing : boolean : gibt true zurueck wenn der Umspringpunkt erreicht wurde - * TODO: Doku */ public boolean dreheWalze(int richtung) { boolean checkRing = false; @@ -155,7 +153,6 @@ public class Walze { } /** - * * TODO: Funktionsname hat sich geändert * Stellt die Grundeinstellung der Walze ein. * Ermittelt, wie oft die Walze gedreht werden muss, bis die Grundeinstellung erreicht ist. * diff --git a/src/main/java/projekt/enigma/threads/ThreadApp.java b/src/main/java/projekt/enigma/threads/ThreadApp.java deleted file mode 100644 index faae51d0d9abcd7c5b97b3fb6e4b3e0d79e49857..0000000000000000000000000000000000000000 --- a/src/main/java/projekt/enigma/threads/ThreadApp.java +++ /dev/null @@ -1,21 +0,0 @@ -package projekt.enigma.threads; - -import projekt.enigma.App; - -/** - * Thread fuer die Benutzeroberflaeche, wird durch das Interface Runnable erweitert - */ -public class ThreadApp implements Runnable { - private String[] args; - - /** - * Ueberschriebene Funktion - fuehrt die Klasse App aus - */ - @Override - public void run() { - System.out.println("ThreadApp " + Thread.currentThread()); - App app = new App(); - app.main(args); - - } -} diff --git a/src/main/java/projekt/enigma/threads/ThreadFunkraum.java b/src/main/java/projekt/enigma/threads/ThreadFunkraum.java deleted file mode 100644 index de29d542844c7821056d85b39cdc646ce3dd1f70..0000000000000000000000000000000000000000 --- a/src/main/java/projekt/enigma/threads/ThreadFunkraum.java +++ /dev/null @@ -1,26 +0,0 @@ -package projekt.enigma.threads; - -import projekt.enigma.model.Codierer; -import projekt.enigma.model.Funkraum; - -/** - * Thread fuer den Funkraum, wird durch das Interface Runnable erweitert - */ -public class ThreadFunkraum implements Runnable { - String kenngruppe; - - public ThreadFunkraum(String kenngruppe) { - this.kenngruppe = kenngruppe; - } - - /** - * Ueberschriebene Funktion - fuehrt die Klasse Funkraum aus und startet die Methode empfangeFunkspruch - */ - @Override - public void run() { - Funkraum funkraum = new Funkraum(); - System.out.println("Threadfunkraum" + Thread.currentThread()); - funkraum.empfangeFunkspruch(this.kenngruppe); - } -} - diff --git a/src/main/resources/projekt/enigma/gui.fxml b/src/main/resources/projekt/enigma/gui.fxml index f974f3988eac5dc919b2089d51eea283815931bb..403956b54e3befb51708621f7b775174cf74da67 100644 --- a/src/main/resources/projekt/enigma/gui.fxml +++ b/src/main/resources/projekt/enigma/gui.fxml @@ -5,703 +5,811 @@ <?import javafx.scene.layout.*?> <?import javafx.scene.shape.*?> <?import javafx.scene.text.*?> - -<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="962.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController"> - <children> - <GridPane layoutX="23.0" layoutY="60.0" prefHeight="158.0" prefWidth="237.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="60.0"> - <columnConstraints> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - </columnConstraints> - <rowConstraints> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - </rowConstraints> - <children> - <Label text="Walze" /> - <Label text="Ringe" GridPane.rowIndex="1" /> - <Label text="Position" GridPane.rowIndex="2" /> - <MenuButton fx:id="mBtnWalzPos1" alignment="CENTER_RIGHT" contentDisplay="CENTER" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="I" GridPane.columnIndex="1"> - </MenuButton> - <MenuButton fx:id="mBtnWalzPos2" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="I" textAlignment="CENTER" GridPane.columnIndex="2"> - </MenuButton> - <MenuButton fx:id="mBtnWalzPos3" mnemonicParsing="false" popupSide="TOP" prefHeight="25.0" prefWidth="48.0" text="I" textAlignment="CENTER" GridPane.columnIndex="3"> - </MenuButton> - <MenuButton fx:id="mBtnNotchPos1" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="1" textAlignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="1" /> - <MenuButton fx:id="mBtnNotchPos2" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="1" textAlignment="CENTER" GridPane.columnIndex="2" GridPane.rowIndex="1"> - </MenuButton> - <!-- <MenuButton layoutX="93.0" layoutY="114.0" mnemonicParsing="false">--> - <!-- <items>--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z1" text="1" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z2" text="2" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z3" text="3" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z4" text="4" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z5" text="5" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z6" text="6" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z7" text="7" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z8" text="8" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z9" text="9" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z10" text="10" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z11" text="11" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z12" text="12" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z13" text="13" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z14" text="14" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z15" text="15" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z16" text="16" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z17" text="17" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z18" text="18" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z19" text="19" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z20" text="20" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z21" text="21" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z22" text="22" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z23" text="23" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z24" text="24" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z25" text="25" />--> - <!-- <MenuItem mnemonicParsing="false" onAction="#z26" text="26" />--> - <!-- </items>--> - <!-- </MenuButton>--> - <MenuButton fx:id="mBtnNotchPos3" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="1" textAlignment="CENTER" GridPane.columnIndex="3" GridPane.rowIndex="1"> - </MenuButton> - <MenuButton fx:id="mBtnStartPos1" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="A" textAlignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="2"> - </MenuButton> - <MenuButton fx:id="mBtnStartPos2" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="A" textAlignment="CENTER" GridPane.columnIndex="2" GridPane.rowIndex="2"> - </MenuButton> - <MenuButton fx:id="mBtnStartPos3" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="A" textAlignment="CENTER" GridPane.columnIndex="3" GridPane.rowIndex="2"> - </MenuButton> - </children> - </GridPane> - <GridPane layoutX="23.0" layoutY="222.0" prefHeight="60.0" prefWidth="270.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="222.0"> - <columnConstraints> - <ColumnConstraints hgrow="SOMETIMES" maxWidth="206.0" minWidth="10.0" prefWidth="102.0" /> - <ColumnConstraints hgrow="SOMETIMES" maxWidth="224.0" minWidth="10.0" prefWidth="168.0" /> - </columnConstraints> - <rowConstraints> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - </rowConstraints> - <children> - <Label alignment="CENTER_RIGHT" /> - <Label text="Spruchschlüssel:" /> - <Label fx:id="lblTagesschluessel" prefHeight="17.0" prefWidth="181.0" GridPane.columnIndex="1" /> - <Label fx:id="lblSpruchschluessel" prefHeight="17.0" prefWidth="181.0" GridPane.columnIndex="1" /> - <Button fx:id="btnReset" mnemonicParsing="false" onAction="#gedrueckteTaste" text="Zurücksetzen" GridPane.rowIndex="1" /> - </children> - </GridPane> - <GridPane fx:id="mainGrid" layoutX="6.0" layoutY="294.0" prefHeight="377.0" prefWidth="952.0" AnchorPane.bottomAnchor="6.0" AnchorPane.leftAnchor="6.0" AnchorPane.rightAnchor="9.0" AnchorPane.topAnchor="294.0"> - <columnConstraints> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - </columnConstraints> - <rowConstraints> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - </rowConstraints> - <children> - <Button fx:id="btnA" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="A" textFill="#fffdfd" GridPane.columnIndex="2" GridPane.rowIndex="5"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnP" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="P" textFill="#fffdfd" GridPane.columnIndex="1" GridPane.rowIndex="6"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnY" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Y" textFill="#fffdfd" GridPane.columnIndex="2" GridPane.rowIndex="6"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnX" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="X" textFill="#fffdfd" GridPane.columnIndex="3" GridPane.rowIndex="6"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnC" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="C" textFill="#fffdfd" GridPane.columnIndex="4" GridPane.rowIndex="6"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnV" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="V" textFill="#fffdfd" GridPane.columnIndex="5" GridPane.rowIndex="6"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnB" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="B" textFill="#fffdfd" GridPane.columnIndex="6" GridPane.rowIndex="6"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnN" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="N" textFill="#fffdfd" GridPane.columnIndex="7" GridPane.rowIndex="6"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnM" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="M" textFill="#fffdfd" GridPane.columnIndex="8" GridPane.rowIndex="6"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnL" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="L" textFill="#fffdfd" GridPane.columnIndex="9" GridPane.rowIndex="6"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnS" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="S" textFill="#fffdfd" GridPane.columnIndex="3" GridPane.rowIndex="5"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnD" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="D" textFill="#fffdfd" GridPane.columnIndex="4" GridPane.rowIndex="5"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnF" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="F" textFill="#fffdfd" GridPane.columnIndex="5" GridPane.rowIndex="5"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnG" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="G" textFill="#fffdfd" GridPane.columnIndex="6" GridPane.rowIndex="5"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnH" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="H" textFill="#fffdfd" GridPane.columnIndex="7" GridPane.rowIndex="5"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnJ" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="J" textFill="#fffdfd" GridPane.columnIndex="8" GridPane.rowIndex="5"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnK" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="K" textFill="#fffdfd" GridPane.columnIndex="9" GridPane.rowIndex="5"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnQ" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Q" textFill="#fffdfd" GridPane.columnIndex="1" GridPane.rowIndex="4"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnW" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="W" textFill="#fffdfd" GridPane.columnIndex="2" GridPane.rowIndex="4"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnE" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="E" textFill="#fffdfd" GridPane.columnIndex="3" GridPane.rowIndex="4"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnR" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="R" textFill="#fffdfd" GridPane.columnIndex="4" GridPane.rowIndex="4"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnT" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="T" textFill="#fffdfd" GridPane.columnIndex="5" GridPane.rowIndex="4"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnZ" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Z" textFill="#fffdfd" GridPane.columnIndex="6" GridPane.rowIndex="4"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnU" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="U" textFill="#fffdfd" GridPane.columnIndex="7" GridPane.rowIndex="4"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnI" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="I" textFill="#fffdfd" GridPane.columnIndex="8" GridPane.rowIndex="4"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnO" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="O" textFill="#fffdfd" GridPane.columnIndex="9" GridPane.rowIndex="4"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnDelete" minHeight="35.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="<" textFill="#fffdfd" GridPane.columnIndex="10" GridPane.rowIndex="5"> - <font> - <Font size="18.0" /> - </font> - </Button> - <Circle fx:id="circQ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="1"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circP" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="1" GridPane.rowIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circY" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="2" GridPane.rowIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circA" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="2" GridPane.rowIndex="1" /> - <Circle fx:id="circS" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="3" GridPane.rowIndex="1" /> - <Circle fx:id="circX" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="3" GridPane.rowIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circW" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circE" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="3"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circD" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="4" GridPane.rowIndex="1" /> - <Circle fx:id="circC" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="4" GridPane.rowIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circV" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="5" GridPane.rowIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circB" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="6" GridPane.rowIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circN" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="7" GridPane.rowIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circM" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="8" GridPane.rowIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circL" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="9" GridPane.rowIndex="2"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circF" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="5" GridPane.rowIndex="1" /> - <Circle fx:id="circG" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="6" GridPane.rowIndex="1" /> - <Circle fx:id="circH" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="7" GridPane.rowIndex="1" /> - <Circle fx:id="circJ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="8" GridPane.rowIndex="1" /> - <Circle fx:id="circK" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="9" GridPane.rowIndex="1" /> - <Circle fx:id="circR" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="4"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circT" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="5"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circZ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="6"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circU" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="7"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circI" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="8"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Circle fx:id="circO" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="9"> - <GridPane.margin> - <Insets left="34.0" /> - </GridPane.margin> - </Circle> - <Label fx:id="lblL" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="L" GridPane.columnIndex="9" GridPane.rowIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="5.0" left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblM" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="M" GridPane.columnIndex="8" GridPane.rowIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="5.0" left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblN" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="N" GridPane.columnIndex="7" GridPane.rowIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="5.0" left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblB" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="B" GridPane.columnIndex="6" GridPane.rowIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="5.0" left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblV" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="V" GridPane.columnIndex="5" GridPane.rowIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="5.0" left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblC" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="C" GridPane.columnIndex="4" GridPane.rowIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="5.0" left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblX" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="X" GridPane.columnIndex="3" GridPane.rowIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="5.0" left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblY" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="Y" GridPane.columnIndex="2" GridPane.rowIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="5.0" left="41.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblP" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="P" GridPane.columnIndex="1" GridPane.rowIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="5.0" left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblK" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="K" GridPane.columnIndex="9" GridPane.rowIndex="1"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="2.0" left="7.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblJ" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="J" GridPane.columnIndex="8" GridPane.rowIndex="1"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="2.0" left="7.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblH" alignment="CENTER" minHeight="0.0" prefHeight="27.0" prefWidth="25.0" text="H" GridPane.columnIndex="7" GridPane.rowIndex="1"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="4.0" left="9.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblG" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="G" GridPane.columnIndex="6" GridPane.rowIndex="1"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="2.0" left="7.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblF" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="F" GridPane.columnIndex="5" GridPane.rowIndex="1"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="2.0" left="7.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblD" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="D" GridPane.columnIndex="4" GridPane.rowIndex="1"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="2.0" left="7.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblS" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="S" GridPane.columnIndex="3" GridPane.rowIndex="1"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="2.0" left="7.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblA" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="A" GridPane.columnIndex="2" GridPane.rowIndex="1"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets bottom="2.0" left="7.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblO" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="O" textAlignment="CENTER" GridPane.columnIndex="9"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblI" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="I" textAlignment="CENTER" GridPane.columnIndex="8"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblU" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="U" textAlignment="CENTER" GridPane.columnIndex="7"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblZ" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Z" textAlignment="CENTER" GridPane.columnIndex="6"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblT" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="T" textAlignment="CENTER" GridPane.columnIndex="5"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblR" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="R" textAlignment="CENTER" GridPane.columnIndex="4"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblE" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="E" textAlignment="CENTER" GridPane.columnIndex="3"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblW" alignment="CENTER" prefHeight="36.0" prefWidth="30.0" text="W" GridPane.columnIndex="2"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets left="42.0" /> - </GridPane.margin> - </Label> - <Label fx:id="lblQ" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Q" GridPane.columnIndex="1"> - <font> - <Font size="23.0" /> - </font> - <GridPane.margin> - <Insets left="42.0" /> - </GridPane.margin> - </Label> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane0" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane1" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane2" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="4" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane3" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="5" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane4" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="6" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane5" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="7" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane6" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="8" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane7" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="9" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane8" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="10" GridPane.rowIndex="7"> - <children> - <Pane fx:id="portPane9" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" style="-fx-background-color: lightgrey;" visible="false" /> - </children> - </Pane> - </children> - </GridPane> - <GridPane layoutX="297.0" layoutY="64.0" prefHeight="168.0" prefWidth="585.0"> - <columnConstraints> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - </columnConstraints> - <rowConstraints> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - </rowConstraints> - <children> - <TextField fx:id="tfKlartext" editable="false" prefHeight="70.0" prefWidth="293.0"> - <GridPane.margin> - <Insets /> - </GridPane.margin> - </TextField> - <TextField fx:id="tfCodiert" editable="false" prefHeight="70.0" prefWidth="293.0" GridPane.rowIndex="1" /> - <Button fx:id="btnSenden" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="70.0" prefWidth="195.0" text="An Funker senden" textAlignment="CENTER" GridPane.columnIndex="1"> - <GridPane.margin> - <Insets left="80.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnEmpfangen" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="70.0" prefWidth="195.0" text="Funkspruch empfangen" GridPane.columnIndex="1" GridPane.rowIndex="1"> - <GridPane.margin> - <Insets left="80.0" /> - </GridPane.margin> - </Button> - </children> - </GridPane> - <Label fx:id="lblKenngruppe" layoutX="682.0" layoutY="34.0" prefHeight="17.0" prefWidth="177.0" /> - <Pane fx:id="paneProgress" layoutX="266.0" layoutY="194.0" prefHeight="200.0" prefWidth="354.0" style="-fx-background-color: white; -fx-border-color: black;" visible="false"> - <children> - <ProgressIndicator fx:id="piProgress" layoutX="127.0" layoutY="70.0" prefHeight="99.0" prefWidth="101.0" /> - <Label fx:id="lblProgressText" layoutX="79.0" layoutY="27.0" text="Kommunikation mit Funkraum..."> - <font> - <Font size="14.0" /> - </font> - </Label> - </children> +<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" + prefWidth="962.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" + fx:controller="projekt.enigma.GuiController"> + <GridPane layoutX="23.0" layoutY="60.0" prefHeight="158.0" prefWidth="237.0" AnchorPane.leftAnchor="23.0" + AnchorPane.topAnchor="60.0"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + </rowConstraints> + <Label text="Walze"/> + <Label text="Ringe" GridPane.rowIndex="1"/> + <Label text="Position" GridPane.rowIndex="2"/> + <MenuButton fx:id="mBtnWalzPos1" alignment="CENTER_RIGHT" contentDisplay="CENTER" + mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="I" + GridPane.columnIndex="1"> + </MenuButton> + <MenuButton fx:id="mBtnWalzPos2" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" + prefWidth="48.0" text="I" textAlignment="CENTER" GridPane.columnIndex="2"> + </MenuButton> + <MenuButton fx:id="mBtnWalzPos3" mnemonicParsing="false" popupSide="TOP" prefHeight="25.0" + prefWidth="48.0" text="I" textAlignment="CENTER" GridPane.columnIndex="3"> + </MenuButton> + <MenuButton fx:id="mBtnNotchPos1" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" + prefWidth="48.0" text="1" textAlignment="CENTER" GridPane.columnIndex="1" + GridPane.rowIndex="1"/> + <MenuButton fx:id="mBtnNotchPos2" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" + prefWidth="48.0" text="1" textAlignment="CENTER" GridPane.columnIndex="2" + GridPane.rowIndex="1"> + </MenuButton> + <MenuButton fx:id="mBtnNotchPos3" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" + prefWidth="48.0" text="1" textAlignment="CENTER" GridPane.columnIndex="3" + GridPane.rowIndex="1"> + </MenuButton> + <MenuButton fx:id="mBtnStartPos1" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" + prefWidth="48.0" text="A" textAlignment="CENTER" GridPane.columnIndex="1" + GridPane.rowIndex="2"> + </MenuButton> + <MenuButton fx:id="mBtnStartPos2" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" + prefWidth="48.0" text="A" textAlignment="CENTER" GridPane.columnIndex="2" + GridPane.rowIndex="2"> + </MenuButton> + <MenuButton fx:id="mBtnStartPos3" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" + prefWidth="48.0" text="A" textAlignment="CENTER" GridPane.columnIndex="3" + GridPane.rowIndex="2"> + </MenuButton> + </GridPane> + <GridPane layoutX="23.0" layoutY="222.0" prefHeight="60.0" prefWidth="270.0" AnchorPane.leftAnchor="23.0" + AnchorPane.topAnchor="222.0"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="206.0" minWidth="10.0" prefWidth="102.0"/> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="224.0" minWidth="10.0" prefWidth="168.0"/> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + </rowConstraints> + <Label alignment="CENTER_RIGHT"/> + <Label text="Spruchschlüssel:"/> + <Label fx:id="lblSpruchschluessel" prefHeight="17.0" prefWidth="181.0" GridPane.columnIndex="1"/> + <Button fx:id="btnReset" mnemonicParsing="false" onAction="#gedrueckteTaste" text="Zurücksetzen" + GridPane.rowIndex="1"/> + </GridPane> + <GridPane fx:id="mainGrid" layoutX="6.0" layoutY="294.0" prefHeight="377.0" prefWidth="952.0" + AnchorPane.bottomAnchor="6.0" AnchorPane.leftAnchor="6.0" AnchorPane.rightAnchor="9.0" + AnchorPane.topAnchor="294.0"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + </rowConstraints> + <Button fx:id="btnA" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="A" textFill="#fffdfd" + GridPane.columnIndex="2" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + </Button> + <Button fx:id="btnP" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="P" textFill="#fffdfd" + GridPane.columnIndex="1" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnY" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Y" textFill="#fffdfd" + GridPane.columnIndex="2" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnX" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="X" textFill="#fffdfd" + GridPane.columnIndex="3" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnC" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="C" textFill="#fffdfd" + GridPane.columnIndex="4" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnV" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="V" textFill="#fffdfd" + GridPane.columnIndex="5" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnB" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="B" textFill="#fffdfd" + GridPane.columnIndex="6" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnN" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="N" textFill="#fffdfd" + GridPane.columnIndex="7" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnM" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="M" textFill="#fffdfd" + GridPane.columnIndex="8" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnL" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="L" textFill="#fffdfd" + GridPane.columnIndex="9" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnS" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="S" textFill="#fffdfd" + GridPane.columnIndex="3" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + </Button> + <Button fx:id="btnD" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="D" textFill="#fffdfd" + GridPane.columnIndex="4" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + </Button> + <Button fx:id="btnF" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="F" textFill="#fffdfd" + GridPane.columnIndex="5" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + </Button> + <Button fx:id="btnG" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="G" textFill="#fffdfd" + GridPane.columnIndex="6" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + </Button> + <Button fx:id="btnH" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="H" textFill="#fffdfd" + GridPane.columnIndex="7" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + </Button> + <Button fx:id="btnJ" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="J" textFill="#fffdfd" + GridPane.columnIndex="8" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + </Button> + <Button fx:id="btnK" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="K" textFill="#fffdfd" + GridPane.columnIndex="9" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + </Button> + <Button fx:id="btnQ" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Q" textFill="#fffdfd" + GridPane.columnIndex="1" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnW" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="W" textFill="#fffdfd" + GridPane.columnIndex="2" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnE" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="E" textFill="#fffdfd" + GridPane.columnIndex="3" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnR" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="R" textFill="#fffdfd" + GridPane.columnIndex="4" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnT" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="T" textFill="#fffdfd" + GridPane.columnIndex="5" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnZ" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Z" textFill="#fffdfd" + GridPane.columnIndex="6" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnU" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="U" textFill="#fffdfd" + GridPane.columnIndex="7" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnI" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="I" textFill="#fffdfd" + GridPane.columnIndex="8" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnO" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" + onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="O" textFill="#fffdfd" + GridPane.columnIndex="9" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0"/> + </font> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnDelete" minHeight="35.0" mnemonicParsing="false" onAction="#gedrueckteTaste" + prefHeight="43.0" prefWidth="45.0" + style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="<" + textFill="#fffdfd" GridPane.columnIndex="10" GridPane.rowIndex="5"> + <font> + <Font size="18.0"/> + </font> + </Button> + <Circle fx:id="circQ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="1"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circP" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="1" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circY" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="2" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circA" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="2" GridPane.rowIndex="1"/> + <Circle fx:id="circS" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="3" GridPane.rowIndex="1"/> + <Circle fx:id="circX" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="3" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circW" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circE" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="3"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circD" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="4" GridPane.rowIndex="1"/> + <Circle fx:id="circC" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="4" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circV" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="5" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circB" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="6" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circN" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="7" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circM" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="8" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circL" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="9" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circF" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="5" GridPane.rowIndex="1"/> + <Circle fx:id="circG" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="6" GridPane.rowIndex="1"/> + <Circle fx:id="circH" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="7" GridPane.rowIndex="1"/> + <Circle fx:id="circJ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="8" GridPane.rowIndex="1"/> + <Circle fx:id="circK" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="9" GridPane.rowIndex="1"/> + <Circle fx:id="circR" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="4"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circT" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="5"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circZ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="6"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circU" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="7"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circI" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="8"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Circle fx:id="circO" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" + GridPane.columnIndex="9"> + <GridPane.margin> + <Insets left="34.0"/> + </GridPane.margin> + </Circle> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="L" + GridPane.columnIndex="9" GridPane.rowIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="5.0" left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="M" + GridPane.columnIndex="8" GridPane.rowIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="5.0" left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="N" + GridPane.columnIndex="7" GridPane.rowIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="5.0" left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="B" + GridPane.columnIndex="6" GridPane.rowIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="5.0" left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="V" + GridPane.columnIndex="5" GridPane.rowIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="5.0" left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="C" + GridPane.columnIndex="4" GridPane.rowIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="5.0" left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="X" + GridPane.columnIndex="3" GridPane.rowIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="5.0" left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="Y" + GridPane.columnIndex="2" GridPane.rowIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="5.0" left="41.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="P" + GridPane.columnIndex="1" GridPane.rowIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="5.0" left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="K" + GridPane.columnIndex="9" GridPane.rowIndex="1"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="J" + GridPane.columnIndex="8" GridPane.rowIndex="1"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="27.0" prefWidth="25.0" text="H" + GridPane.columnIndex="7" GridPane.rowIndex="1"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="4.0" left="9.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="G" + GridPane.columnIndex="6" GridPane.rowIndex="1"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="F" + GridPane.columnIndex="5" GridPane.rowIndex="1"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="D" + GridPane.columnIndex="4" GridPane.rowIndex="1"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="S" + GridPane.columnIndex="3" GridPane.rowIndex="1"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="A" + GridPane.columnIndex="2" GridPane.rowIndex="1"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="O" + textAlignment="CENTER" GridPane.columnIndex="9"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="I" + textAlignment="CENTER" GridPane.columnIndex="8"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="U" + textAlignment="CENTER" GridPane.columnIndex="7"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Z" + textAlignment="CENTER" GridPane.columnIndex="6"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="T" + textAlignment="CENTER" GridPane.columnIndex="5"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="R" + textAlignment="CENTER" GridPane.columnIndex="4"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="E" + textAlignment="CENTER" GridPane.columnIndex="3"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" prefHeight="36.0" prefWidth="30.0" text="W" + GridPane.columnIndex="2"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets left="42.0"/> + </GridPane.margin> + </Label> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Q" + GridPane.columnIndex="1"> + <font> + <Font size="23.0"/> + </font> + <GridPane.margin> + <Insets left="42.0"/> + </GridPane.margin> + </Label> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="7"> + <Pane fx:id="portPane0" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="7"> + <Pane fx:id="portPane1" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3" GridPane.rowIndex="7"> + <Pane fx:id="portPane2" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="4" GridPane.rowIndex="7"> + <Pane fx:id="portPane3" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="5" GridPane.rowIndex="7"> + <Pane fx:id="portPane4" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="6" GridPane.rowIndex="7"> + <Pane fx:id="portPane5" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="7" GridPane.rowIndex="7"> + <Pane fx:id="portPane6" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="8" GridPane.rowIndex="7"> + <Pane fx:id="portPane7" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="9" GridPane.rowIndex="7"> + <Pane fx:id="portPane8" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="10" GridPane.rowIndex="7"> + <Pane fx:id="portPane9" layoutX="-8.0" layoutY="-307.0" prefHeight="350.0" prefWidth="85.0" + style="-fx-background-color: lightgrey;" visible="false"/> </Pane> - </children> + </GridPane> + <GridPane layoutX="297.0" layoutY="64.0" prefHeight="168.0" prefWidth="585.0"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + </rowConstraints> + <TextField fx:id="tfKlartext" editable="false" prefHeight="70.0" prefWidth="293.0"> + <GridPane.margin> + <Insets/> + </GridPane.margin> + </TextField> + <TextField fx:id="tfCodiert" editable="false" prefHeight="70.0" prefWidth="293.0" + GridPane.rowIndex="1"/> + <Button fx:id="btnSenden" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" + onAction="#gedrueckteTaste" prefHeight="70.0" prefWidth="195.0" text="An Funker senden" + textAlignment="CENTER" GridPane.columnIndex="1"> + <GridPane.margin> + <Insets left="80.0"/> + </GridPane.margin> + </Button> + <Button fx:id="btnEmpfangen" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="70.0" + prefWidth="195.0" text="Funkspruch empfangen" GridPane.columnIndex="1" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="80.0"/> + </GridPane.margin> + </Button> + </GridPane> + <Label fx:id="lblKenngruppe" layoutX="682.0" layoutY="34.0" prefHeight="17.0" prefWidth="177.0"/> + <Pane layoutX="266.0" layoutY="194.0" prefHeight="200.0" prefWidth="354.0" + style="-fx-background-color: white; -fx-border-color: black;" visible="false"> + <ProgressIndicator layoutX="127.0" layoutY="70.0" prefHeight="99.0" + prefWidth="101.0"/> + <Label layoutX="79.0" layoutY="27.0" text="Kommunikation mit Funkraum..."> + <font> + <Font size="14.0"/> + </font> + </Label> + </Pane> </AnchorPane> diff --git a/src/main/resources/projekt/enigma/kenngruppe.fxml b/src/main/resources/projekt/enigma/kenngruppe.fxml deleted file mode 100644 index 019c9c177e31b671dfd904d3396474510999c159..0000000000000000000000000000000000000000 --- a/src/main/resources/projekt/enigma/kenngruppe.fxml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<?import javafx.scene.control.Button?> -<?import javafx.scene.control.Label?> -<?import javafx.scene.control.TextField?> -<?import javafx.scene.layout.AnchorPane?> -<?import javafx.scene.layout.VBox?> - -<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="137.0" prefWidth="234.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.KenngruppeController"> - <children> - <VBox layoutX="13.0" layoutY="20.0" prefHeight="107.0" prefWidth="209.0" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="13.0" AnchorPane.rightAnchor="12.0" AnchorPane.topAnchor="20.0"> - <children> - <Label alignment="CENTER" contentDisplay="CENTER" prefHeight="17.0" prefWidth="208.0" text="Bitte Kenngruppe eingeben!" /> - <Label prefHeight="62.0" prefWidth="209.0" /> - <TextField fx:id="tfKenngruppe" /> - <Label prefHeight="39.0" prefWidth="209.0" /> - <Button maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" onAction="#btnGui" prefHeight="25.0" prefWidth="212.0" text="Kenngruppe setzen!" /> - </children> - </VBox> - </children> -</AnchorPane>