From 3273773b534bb611a49c266e34377c91942ec3fd Mon Sep 17 00:00:00 2001 From: Dennis Eisold <de@itstall.de> Date: Thu, 5 Dec 2019 15:36:58 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Fenstergr=C3=B6=C3=9Fe=20nicht=20ver=C3=A4n?= =?UTF-8?q?derbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/projekt/enigma/App.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/projekt/enigma/App.java b/src/main/java/projekt/enigma/App.java index c27ee29..079b436 100644 --- a/src/main/java/projekt/enigma/App.java +++ b/src/main/java/projekt/enigma/App.java @@ -60,6 +60,8 @@ public class App extends Application { @Override public void start(Stage primaryStage) throws IOException { primaryStage.setTitle("Enigma"); + primaryStage.setResizable(false); + Label lblEingbae = new Label("Bitte Kenngruppe eingeben!"); TextField tfEingabe = new TextField(); Button btnKenngruppe = new Button("Kenngruppe setzen!"); -- GitLab From 11b94fe15362359dfc700b6a333c44b4d0d988ae Mon Sep 17 00:00:00 2001 From: Dennis Eisold <de@itstall.de> Date: Thu, 5 Dec 2019 16:45:44 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Checkbox=20Panel=20funktioniert=20jetzt=20e?= =?UTF-8?q?inigerma=C3=9Fen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/projekt/enigma/GuiController.java | 184 ++--- .../java/projekt/enigma/model/Codierer.java | 15 +- .../java/projekt/enigma/model/Hardware.java | 364 ++++----- src/main/java/projekt/enigma/model/Walze.java | 2 +- .../projekt/enigma/view/ChkBoxGridPane.java | 53 +- src/main/resources/projekt/enigma/gui.fxml | 725 +++++++----------- 6 files changed, 551 insertions(+), 792 deletions(-) diff --git a/src/main/java/projekt/enigma/GuiController.java b/src/main/java/projekt/enigma/GuiController.java index 0bacfd4..64e863a 100644 --- a/src/main/java/projekt/enigma/GuiController.java +++ b/src/main/java/projekt/enigma/GuiController.java @@ -3,18 +3,19 @@ package projekt.enigma; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.fxml.FXML; +import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.*; import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; -import javafx.scene.layout.Pane; import javafx.scene.shape.Circle; import javafx.stage.StageStyle; -import org.apache.http.HttpException; import org.controlsfx.dialog.ProgressDialog; import projekt.enigma.model.Codierer; import projekt.enigma.model.Fehler; +import projekt.enigma.view.ChkBoxGridPane; import java.io.IOException; import java.util.ArrayList; @@ -54,12 +55,13 @@ public class GuiController { //deklariert die benötigten Textfelder @FXML private TextField tfCodiert, tfKlartext; - //deklariert benötigtes pane - @FXML - private Pane portPane0, portPane1, portPane2, portPane3, portPane4, portPane5, portPane6, portPane7, portPane8, portPane9; //deklariert benötigtes GridPane @FXML + private ChkBoxGridPane[] chkBoxGridPane; + @FXML private GridPane mainGrid; + @FXML + private AnchorPane anchorPane; /** * Initialisiert die Elemente GUI und setzt deren Startwerte @@ -71,7 +73,6 @@ public class GuiController { textCodiert = ""; resetDisplay = true; - //Einträge für Walzen menu(mBtnWalzPos1, walzenNr); menu(mBtnWalzPos2, walzenNr); @@ -86,24 +87,11 @@ public class GuiController { menu(mBtnStartPos1, position); menu(mBtnStartPos3, position); menu(mBtnStartPos2, position); - - - myToggleButtons(); } //endregion //region Init - /** - * Für das Steckbrett müssen zehn CheckComboBoxen erstellt werden. - * Hier wird die Funktion zum erstellen und Befüllen der Boxen, die Funktion zehn mal aufgerufen. - */ - private void generateSteckbrett() { - for (int i = 0; i <= 9; i++) { - this.createSteckbrettPort(i); - } - } - /** * Die Funktion createSteckbrettPort erstellt zehn CheckComboBoxen, holt sich die verfügbaren Buchstaben, * die bereits gesteckten Kabel und weißt sie zu. @@ -148,81 +136,74 @@ public class GuiController { ArrayList<MenuItem> mItem = new ArrayList<>(); for (int i = 0; i < str.length; i++) { - //Eintrag aus str der Arraylist mi hinzufügen + // Eintrag aus str der Arraylist mi hinzufügen mItem.add(new MenuItem(str[i])); - //MenuItem mi dem Button button hinzufügen + // MenuItem mi dem Button button hinzufügen button.getItems().add(mItem.get(i)); int finalI = i; - //Listener für die einzelnen Einträge + // Listener für die einzelnen Einträge mItem.get(i).setOnAction(e -> setMenuBtnText(button, mItem.get(finalI))); } } /** * TODO: Doku - * - * @param port : int : Port zu dem das Panel geändert werden soll - * @param status : aktivieren/deaktivieren */ - private void switchPortVisible(int port, boolean status) { - switch (port) { - case 0: - portPane0.setVisible(status); - break; - case 1: - portPane1.setVisible(status); - break; - case 2: - portPane2.setVisible(status); - break; - case 3: - portPane3.setVisible(status); - break; - case 4: - portPane4.setVisible(status); - break; - case 5: - portPane5.setVisible(status); - break; - case 6: - portPane6.setVisible(status); - break; - case 7: - portPane7.setVisible(status); - break; - case 8: - portPane8.setVisible(status); - break; - case 9: - portPane9.setVisible(status); - break; - default: - - break; + private void myToggleButtons() { + // this.codierer.setzeSteckbrett() + if (chkBoxGridPane != null) { + for (ChkBoxGridPane boxGridPane : chkBoxGridPane) { + anchorPane.getChildren().remove(boxGridPane); + } } - } + chkBoxGridPane = new ChkBoxGridPane[10]; - /** - * TODO: Doku - */ - private void myToggleButtons() { final ToggleGroup cabelConnect = new ToggleGroup(); tBtnPort = new ToggleButton[10]; - for (int i = 0; i < 10; i++) { - tBtnPort[i] = new ToggleButton(i + "Port"); - tBtnPort[i].setAlignment(Pos.CENTER_RIGHT); + + for (int i = 0; i < chkBoxGridPane.length; i++) { + char[] verfuegbareBuchstaben = this.codierer.fetchVerfuegbareBuchstaben(i).toCharArray(); + char[] checkedBuchstaben = { + this.codierer.fetchSteckverbindungen()[i][0], + this.codierer.fetchSteckverbindungen()[i][1] + }; + Arrays.sort(verfuegbareBuchstaben); + + chkBoxGridPane[i] = new ChkBoxGridPane(verfuegbareBuchstaben); + chkBoxGridPane[i].setVisible(false); + chkBoxGridPane[i].setStyle("-fx-background-color: white; -fx-border-color: black;"); + chkBoxGridPane[i].setPrefHeight(chkBoxGridPane[i].getCharSize() * 20); + chkBoxGridPane[i].setPrefWidth(85.0); + chkBoxGridPane[i].setPadding(new Insets(10, 10, 10, 10)); + chkBoxGridPane[i].setAlignment(Pos.CENTER); + + tBtnPort[i] = new ToggleButton(checkedBuchstaben[0] + "" + checkedBuchstaben[1]); tBtnPort[i].setToggleGroup(cabelConnect); - GridPane.setMargin(tBtnPort[i], new Insets(0, 15, 0, 15)); + GridPane.setHalignment(tBtnPort[i], HPos.CENTER); + mainGrid.add(tBtnPort[i], i + 1, 8); + chkBoxGridPane[i].setLayoutX( + (anchorPane.getWidth() / 12) * (i + 1) - + ((chkBoxGridPane[i].getPrefWidth() - anchorPane.getWidth() / 12) / 2)); + chkBoxGridPane[i].setLayoutY( + mainGrid.getLayoutY() + ((anchorPane.getHeight() - + mainGrid.getLayoutY()) / 10 * 9) - chkBoxGridPane[i].getPrefHeight() - 15); + new Fehler().debug( + "mg LayoutY " + mainGrid.getLayoutY() + + " mg Height " + mainGrid.getHeight() + + " chkbox Height " + chkBoxGridPane[i].getHeight() + + " AP Height " + anchorPane.getHeight(), + false); + anchorPane.getChildren().add(chkBoxGridPane[i]); cabelConnect.selectedToggleProperty(). addListener((observable, oldValue, newValue) -> { //TODO for (int j = 0; j < 10; j++) { if (cabelConnect.getSelectedToggle() == tBtnPort[j]) { - switchPortVisible(j, true); + chkBoxGridPane[j].setVisible(true); } else if (cabelConnect.getSelectedToggle() != tBtnPort[j]) { - switchPortVisible(j, false); + chkBoxGridPane[j].setVisible(false); } } }); @@ -514,45 +495,45 @@ public class GuiController { this.codierer.setzeWalzenPosition(2, mItm.getText().charAt(0)); } if (mBtn.getId().equals(mBtnWalzPos1.getId())) { - setzeWalze(1, mItm.getText()); - if (!mBtnWalzPos1.getText().equals(mBtnWalzPos2.getText()) && - !mBtnWalzPos1.getText().equals(mBtnWalzPos3.getText())) { + setzeWalze(1, mItm.getText()); + if (!mBtnWalzPos1.getText().equals(mBtnWalzPos2.getText()) && + !mBtnWalzPos1.getText().equals(mBtnWalzPos3.getText())) { this.codierer.setzeWalzeNr(0, - convertRoemischToZahl(mItm.getText()) + 1, - mBtnNotchPos1.getText().charAt(0)); + convertRoemischToZahl(mItm.getText()) + 1, + mBtnNotchPos1.getText().charAt(0)); } else { setzeWalze(1, convertZahlToRoemisch(this.codierer.fetchWalzenNr(0))); new Fehler().showErrorDialog("error", - "Walze nicht gefunden", - "Es scheint so das wir von jeder Walze nur eine da haben"); + "Walze nicht gefunden", + "Es scheint so das wir von jeder Walze nur eine da haben"); } } if (mBtn.getId().equals(mBtnWalzPos2.getId())) { - setzeWalze(2, mItm.getText()); - if (!mBtnWalzPos1.getText().equals(mBtnWalzPos2.getText()) && - !mBtnWalzPos2.getText().equals(mBtnWalzPos3.getText())) { + setzeWalze(2, mItm.getText()); + if (!mBtnWalzPos1.getText().equals(mBtnWalzPos2.getText()) && + !mBtnWalzPos2.getText().equals(mBtnWalzPos3.getText())) { this.codierer.setzeWalzeNr(1, - convertRoemischToZahl(mItm.getText()) + 1, - mBtnNotchPos2.getText().charAt(0)); + convertRoemischToZahl(mItm.getText()) + 1, + mBtnNotchPos2.getText().charAt(0)); } else { setzeWalze(2, convertZahlToRoemisch(this.codierer.fetchWalzenNr(1))); new Fehler().showErrorDialog("error", - "Walze nicht gefunden", - "Es scheint so das wir von jeder Walze nur eine da haben"); + "Walze nicht gefunden", + "Es scheint so das wir von jeder Walze nur eine da haben"); } } if (mBtn.getId().equals(mBtnWalzPos3.getId())) { - setzeWalze(3, mItm.getText()); - if (!mBtnWalzPos1.getText().equals(mBtnWalzPos3.getText()) && - !mBtnWalzPos2.getText().equals(mBtnWalzPos3.getText())) { + setzeWalze(3, mItm.getText()); + if (!mBtnWalzPos1.getText().equals(mBtnWalzPos3.getText()) && + !mBtnWalzPos2.getText().equals(mBtnWalzPos3.getText())) { this.codierer.setzeWalzeNr(2, - convertRoemischToZahl(mItm.getText()) + 1, - mBtnNotchPos3.getText().charAt(0)); + convertRoemischToZahl(mItm.getText()) + 1, + mBtnNotchPos3.getText().charAt(0)); } else { setzeWalze(3, convertZahlToRoemisch(this.codierer.fetchWalzenNr(2))); new Fehler().showErrorDialog("error", - "Walze nicht gefunden", - "Es scheint so das wir von jeder Walze nur eine da haben"); + "Walze nicht gefunden", + "Es scheint so das wir von jeder Walze nur eine da haben"); } } if (mBtn.getId().equals(mBtnNotchPos1.getId())) { @@ -571,17 +552,6 @@ public class GuiController { tfKlartext.setText(""); } - /** - * Hier werden die TextFelder der ToggelButtons gesetzt, welche die Steckverbindungen darstellen, - * mit den Werten die von der Klasse Codierer zur Verfügung gestellt werden. - */ - private void setzeSteckverbindungen() { - for (int i = 0; i <= 9; i++) { - tBtnPort[i].setText(codierer.fetchSteckverbindungen()[i][0] + "" - + codierer.fetchSteckverbindungen()[i][1]); - } - } - /** * Die Löschen Funktion löscht das letzte Zeichen im Klartext sowie im Codiert Feld, * der Codierer wird aufgerufen um ebenfalls das letzte Zeichen zu löschen @@ -903,10 +873,12 @@ public class GuiController { mBtnStartPos3.setText(String.valueOf(codierer.fetchWalzen()[2])); // Steckbrett Felder setzen - setzeSteckverbindungen(); + //setzeSteckverbindungen(); + + myToggleButtons(); // Setzt das Steckbrett - generateSteckbrett(); + //generateSteckbrett(); // Felder zurück setzen this.textCodiert = ""; @@ -935,7 +907,7 @@ public class GuiController { // Einstellungen aus dem Logbuch auslesen und setzen setzeTagesSchluessel(); - setzeSteckverbindungen(); + //setzeSteckverbindungen(); } private enum BUCHSTABE_LEUCHTET {AN, AUS} diff --git a/src/main/java/projekt/enigma/model/Codierer.java b/src/main/java/projekt/enigma/model/Codierer.java index 913b8db..87f4bff 100644 --- a/src/main/java/projekt/enigma/model/Codierer.java +++ b/src/main/java/projekt/enigma/model/Codierer.java @@ -279,7 +279,6 @@ public class Codierer { /** - * TODO: Wird nicht benutzt * Setzt das Kabel in beide Ports ein und fuegt es dem Steckbrett-Array hinzu. * * @param port : int : Kabel Nummer, welches am Steckbrett eingesteckt wird. @@ -457,19 +456,6 @@ public class Codierer { //region Sonstige - /** - * TODO: Wird nicht benutzt - * Prueft ob der Port auf dem das Kabel gesteckt werden soll, noch frei ist. - * <p> - * setSteckbrett ausfuehren mit beiden Buchstaben als String. - * - * @param buchstabe : char : Der zuletzt eingegebene Buchstabe. - * @return boolean : Wenn der Buchstabe nicht vorhanden ist, wird true zurueckgegeben, ansonsten false. - */ - public boolean pruefeSteckbrettPort(char buchstabe) { - return this.hardware.getSteckbrett().ueberpruefeVertauschungen(buchstabe); - } - /** * Liest aus der empfangenen Nachricht den Spruchschluessel aus und gibt ihn zurueck. * @@ -490,6 +476,7 @@ public class Codierer { this.nachricht = this.nachricht.substring(0, this.nachricht.length() - 1); } //endregion + //endregion //region Getter diff --git a/src/main/java/projekt/enigma/model/Hardware.java b/src/main/java/projekt/enigma/model/Hardware.java index 00e0d12..ff3d745 100644 --- a/src/main/java/projekt/enigma/model/Hardware.java +++ b/src/main/java/projekt/enigma/model/Hardware.java @@ -15,187 +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() + "." + - 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); - } - } - } - } - } - //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 + //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); + } + } + } + } + } + //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/Walze.java b/src/main/java/projekt/enigma/model/Walze.java index eebb0ff..15895de 100644 --- a/src/main/java/projekt/enigma/model/Walze.java +++ b/src/main/java/projekt/enigma/model/Walze.java @@ -77,7 +77,7 @@ public class Walze { if ((richtung == -1) || (richtung == 1)) { if (richtung == 1) { this.turns++; - } else if (richtung == -1) { + } else { korrekturFaktor = 1; this.turns--; } diff --git a/src/main/java/projekt/enigma/view/ChkBoxGridPane.java b/src/main/java/projekt/enigma/view/ChkBoxGridPane.java index 61db71f..6b762fa 100644 --- a/src/main/java/projekt/enigma/view/ChkBoxGridPane.java +++ b/src/main/java/projekt/enigma/view/ChkBoxGridPane.java @@ -1,19 +1,24 @@ package projekt.enigma.view; +import javafx.geometry.Pos; import javafx.scene.control.CheckBox; -import javafx.scene.control.ContentDisplay; -import javafx.scene.control.Label; import javafx.scene.layout.GridPane; +/** + * TODO: Doku + */ public class ChkBoxGridPane extends GridPane { - /*private static JPanel panel = new JPanel();*/ - private static CheckBox[] checkbox; - private static Character[] alphabet;/* = {'A','B','C','D'};*/ - private static int charSize; + private CheckBox[] checkbox; + private char[] alphabet; + private int charSize; - public ChkBoxGridPane(Character[] alphabet) { + /** + * TODO: Doku + * @param alphabet + */ + public ChkBoxGridPane(char[] alphabet) { charSize = alphabet.length; - ChkBoxGridPane.alphabet = alphabet; + this.alphabet = alphabet; initializeComponents(); } @@ -24,25 +29,13 @@ public class ChkBoxGridPane extends GridPane { */ private void initializeComponents() { checkbox = new CheckBox[charSize]; + this.setAlignment(Pos.CENTER); - /* - * => bei ungerader Anzahl Buchstaben - * CheckBox und deren Label erzeugen, bei geraden Index Zahlen - * das Label rechts setzen bei ungeraden links - * => bei gerader Anzahl Buchstaben - * CheckBox und deren Label erzeugen, bei geraden Index Zahlen - * das Label rechts setzen bei ungeraden links - */ - for (int i = 0; i < charSize; i++) { - Label lb = new Label(alphabet[i] + ""); - lb.setGraphic(checkbox[i] = new CheckBox()); - if (i % 2 == 0) lb.setContentDisplay(ContentDisplay.RIGHT); - else if (!(i % 2 == 0)) lb.setContentDisplay(ContentDisplay.LEFT); - if (!(charSize % 2 == 0)) { - this.add(checkbox[i], 2, (charSize + 1) / 2); - } else { - this.add(checkbox[i], 2, (charSize / 2)); - } + for (int i = 0; i < alphabet.length; i++) { + checkbox[i] = new CheckBox(alphabet[i] + ""); + + this.addRow(i + 1); + this.add(checkbox[i], 2, i + 1, 1, 1); //if (i==0)checkbox[0].setSelected(true); } this.setVisible(true); @@ -64,5 +57,13 @@ public class ChkBoxGridPane extends GridPane { } return null; } + + /** + * TODO: Doku + * @return + */ + public int getCharSize() { + return charSize; + } } diff --git a/src/main/resources/projekt/enigma/gui.fxml b/src/main/resources/projekt/enigma/gui.fxml index 403956b..2fb0e1d 100644 --- a/src/main/resources/projekt/enigma/gui.fxml +++ b/src/main/resources/projekt/enigma/gui.fxml @@ -5,810 +5,609 @@ <?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"> - <GridPane layoutX="23.0" layoutY="60.0" prefHeight="158.0" prefWidth="237.0" AnchorPane.leftAnchor="23.0" - AnchorPane.topAnchor="60.0"> + +<AnchorPane fx:id="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 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> - <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"> + <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 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 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 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 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 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 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 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"> + <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 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 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"/> + <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"> + <GridPane fx:id="mainGrid" layoutX="6.0" layoutY="294.0" prefHeight="377.0" prefWidth="952.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="300.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 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 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"> + <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 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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 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"> + <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 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"> + <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 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"> + <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 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"> + <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 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"> + <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 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"> + <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 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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 name="System Bold" size="18.0" /> </font> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 size="18.0" /> </font> </Button> - <Circle fx:id="circQ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" - GridPane.columnIndex="1"> + <Circle fx:id="circQ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="1"> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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"/> + <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"> + <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"/> + <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"> + <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"/> + <Insets left="34.0" /> </GridPane.margin> </Circle> - <Circle fx:id="circW" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" - GridPane.columnIndex="2"> + <Circle fx:id="circW" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="2"> <GridPane.margin> - <Insets left="34.0"/> + <Insets left="34.0" /> </GridPane.margin> </Circle> - <Circle fx:id="circE" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" - GridPane.columnIndex="3"> + <Circle fx:id="circE" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="3"> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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"/> + <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"> + <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"/> + <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"> + <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"/> + <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"> + <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"/> + <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"> + <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"/> + <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"> + <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"/> + <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"/> + <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"> + <Circle fx:id="circT" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="5"> <GridPane.margin> - <Insets left="34.0"/> + <Insets left="34.0" /> </GridPane.margin> </Circle> - <Circle fx:id="circZ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" - GridPane.columnIndex="6"> + <Circle fx:id="circZ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="6"> <GridPane.margin> - <Insets left="34.0"/> + <Insets left="34.0" /> </GridPane.margin> </Circle> - <Circle fx:id="circU" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" - GridPane.columnIndex="7"> + <Circle fx:id="circU" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="7"> <GridPane.margin> - <Insets left="34.0"/> + <Insets left="34.0" /> </GridPane.margin> </Circle> - <Circle fx:id="circI" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" - GridPane.columnIndex="8"> + <Circle fx:id="circI" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="8"> <GridPane.margin> - <Insets left="34.0"/> + <Insets left="34.0" /> </GridPane.margin> </Circle> - <Circle fx:id="circO" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" - GridPane.columnIndex="9"> + <Circle fx:id="circO" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="9"> <GridPane.margin> - <Insets left="34.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="5.0" left="42.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="5.0" left="42.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="5.0" left="42.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="5.0" left="42.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="5.0" left="42.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="5.0" left="42.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="5.0" left="42.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="5.0" left="41.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="5.0" left="42.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="2.0" left="7.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="2.0" left="7.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="4.0" left="9.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="2.0" left="7.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="2.0" left="7.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="2.0" left="7.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="2.0" left="7.0"/> + <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"> + <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 size="23.0" /> </font> <GridPane.margin> - <Insets bottom="2.0" left="7.0"/> + <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"> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="O" textAlignment="CENTER" GridPane.columnIndex="9"> <font> - <Font size="23.0"/> + <Font size="23.0" /> </font> <GridPane.margin> - <Insets left="42.0"/> + <Insets left="42.0" /> </GridPane.margin> </Label> - <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="I" - textAlignment="CENTER" GridPane.columnIndex="8"> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="I" textAlignment="CENTER" GridPane.columnIndex="8"> <font> - <Font size="23.0"/> + <Font size="23.0" /> </font> <GridPane.margin> - <Insets left="42.0"/> + <Insets left="42.0" /> </GridPane.margin> </Label> - <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="U" - textAlignment="CENTER" GridPane.columnIndex="7"> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="U" textAlignment="CENTER" GridPane.columnIndex="7"> <font> - <Font size="23.0"/> + <Font size="23.0" /> </font> <GridPane.margin> - <Insets left="42.0"/> + <Insets left="42.0" /> </GridPane.margin> </Label> - <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Z" - textAlignment="CENTER" GridPane.columnIndex="6"> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Z" textAlignment="CENTER" GridPane.columnIndex="6"> <font> - <Font size="23.0"/> + <Font size="23.0" /> </font> <GridPane.margin> - <Insets left="42.0"/> + <Insets left="42.0" /> </GridPane.margin> </Label> - <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="T" - textAlignment="CENTER" GridPane.columnIndex="5"> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="T" textAlignment="CENTER" GridPane.columnIndex="5"> <font> - <Font size="23.0"/> + <Font size="23.0" /> </font> <GridPane.margin> - <Insets left="42.0"/> + <Insets left="42.0" /> </GridPane.margin> </Label> - <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="R" - textAlignment="CENTER" GridPane.columnIndex="4"> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="R" textAlignment="CENTER" GridPane.columnIndex="4"> <font> - <Font size="23.0"/> + <Font size="23.0" /> </font> <GridPane.margin> - <Insets left="42.0"/> + <Insets left="42.0" /> </GridPane.margin> </Label> - <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="E" - textAlignment="CENTER" GridPane.columnIndex="3"> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="E" textAlignment="CENTER" GridPane.columnIndex="3"> <font> - <Font size="23.0"/> + <Font size="23.0" /> </font> <GridPane.margin> - <Insets left="42.0"/> + <Insets left="42.0" /> </GridPane.margin> </Label> - <Label alignment="CENTER" prefHeight="36.0" prefWidth="30.0" text="W" - GridPane.columnIndex="2"> + <Label alignment="CENTER" prefHeight="36.0" prefWidth="30.0" text="W" GridPane.columnIndex="2"> <font> - <Font size="23.0"/> + <Font size="23.0" /> </font> <GridPane.margin> - <Insets left="42.0"/> + <Insets left="42.0" /> </GridPane.margin> </Label> - <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Q" - GridPane.columnIndex="1"> + <Label alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Q" GridPane.columnIndex="1"> <font> - <Font size="23.0"/> + <Font size="23.0" /> </font> <GridPane.margin> - <Insets left="42.0"/> + <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> </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 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> <TextField fx:id="tfKlartext" editable="false" prefHeight="70.0" prefWidth="293.0"> <GridPane.margin> - <Insets/> + <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"> + <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"/> + <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"> + <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"/> + <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 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 size="14.0" /> </font> </Label> </Pane> -- GitLab