diff --git a/Praesentation/praesentation.md b/Praesentation/praesentation.md index 060ff4ebda60fb51e2f4589913fe3dcac68ff832..12d0640b3b82da13e50f9b2fb5d5a2400a198c60 100644 --- a/Praesentation/praesentation.md +++ b/Praesentation/praesentation.md @@ -24,4 +24,82 @@  - \ No newline at end of file + + +## Der Begin einer Reise +* [Anforderungskatalog und Planung](https://www.gitrepo.de/alfatrainingkurse/java/enigma/wikis/Anforderungskatalog) + +## Ablauf des Projektes +* Wie wurde gearbeitet + * gitrepo.de + * Git + * Tickets + * Pipelines +* Welche Probleme sind aufgetreten +* Besondere (für uns) Lösungen + +### Kurze GIT Einführnug +* Was ist Git? + * Repository + * Fork + * Funktionen + * Commit + * Push + * Pull + +### Zahlen, Daten, Fakten +* Zeilen insgesamt: 3113 + * Davon Code: 1596 (51%) + * Davon Kommentare: 1120 (36%) + * Leerzeilen: 397 (13%) + +## Klassendiagram + + +## Interesannte Codestellen +* Walze: + * [Konstruktor](https://www.gitrepo.de/alfatrainingkurse/java/enigma/blob/master/src/main/java/projekt/enigma/model/Walze.java#L53) +* Steckbrett + * [setzeVertauschung](https://www.gitrepo.de/alfatrainingkurse/java/enigma/blob/master/src/main/java/projekt/enigma/model/Steckbrett.java#L52) + * [ueberpruefeVertauschung](https://www.gitrepo.de/alfatrainingkurse/java/enigma/blob/master/src/main/java/projekt/enigma/model/Steckbrett.java#L104) +* Codebuch + * [Konstruktor](https://www.gitrepo.de/alfatrainingkurse/java/enigma/blob/master/src/main/java/projekt/enigma/model/Codebuch.java#L59) + * [fetchTagesschluessel](https://www.gitrepo.de/alfatrainingkurse/java/enigma/blob/master/src/main/java/projekt/enigma/model/Codebuch.java#L81) +* Funkraum + * [empfangeFunkspruch](https://www.gitrepo.de/alfatrainingkurse/java/enigma/blob/master/src/main/java/projekt/enigma/model/Funkraum.java#L38) + * [sendeFunkspruch](https://www.gitrepo.de/alfatrainingkurse/java/enigma/blob/master/src/main/java/projekt/enigma/model/Funkraum.java#L90) +* Morsecode + * [Konstruktor](https://www.gitrepo.de/alfatrainingkurse/java/enigma/blob/master/src/main/java/projekt/enigma/model/Morsecode.java#L18) + * [convertBuchstabeToMorsecode](`convertBuchstabeToMorsecode`) +* DatenbankSqlite + * [getCodebuch](https://www.gitrepo.de/alfatrainingkurse/java/enigma/blob/master/src/main/java/projekt/enigma/database/DatenbankSqlite.java#L54) +* Zusammenfassung codiere + * [Codiere Funktion](https://www.gitrepo.de/alfatrainingkurse/java/enigma/snippets/12) + +### Ablauf der Codierung + + +### Erklärung Datentyp char - String - Enum +* Zuerst char[] +* Dann String +* Vorteile Enum + +## Die GUI der Enigma (Elemente, etc) +* Besondere GUI Elemente +* ControlsFX (ProgressDialog) + +## GUI Controller + +## Demo der Enigma +* Kenngruppe Abfrage + * Testen Kenngruppe Dialog und Fehler +* Enigma + * Setzen von Walzen + * Setzen von Ringen + * Setzen von Startpunkten + * Zurücksetzen + * Tagesschlüssel + * Verschlüsseln von Nachrichten + * Senden von Nachrichten + * Abrufen und entschlüsseln von Nachrichten + * Setzen einer anderen Kenngruppe und zeigen was passiert wenn man dann Nachrichten abrufen möchte diff --git a/src/main/java/projekt/enigma/App.java b/src/main/java/projekt/enigma/App.java index 03f9260b62accc6a2544ef476fa58c3fb9082b91..2d5dcb1e0061b4fd3cc5bff24bd5cba1c97a55e8 100644 --- a/src/main/java/projekt/enigma/App.java +++ b/src/main/java/projekt/enigma/App.java @@ -2,10 +2,9 @@ package projekt.enigma; import javafx.application.Application; import javafx.fxml.FXMLLoader; +import javafx.geometry.Insets; import javafx.scene.Scene; -import javafx.scene.control.Button; -import javafx.scene.control.Label; -import javafx.scene.control.TextField; +import javafx.scene.control.*; import javafx.scene.input.KeyCode; import javafx.scene.layout.VBox; import javafx.stage.Stage; @@ -20,86 +19,80 @@ import java.io.IOException; */ public class App extends Application { - private static String kenngruppe; - private static GuiController gc; - private static int debug; - - public static void main(String[] args) { - debug = 1; - launch(args); - } - - public static int getDebug() { - return debug; - } - - @Override - public void start(Stage primaryStage) throws IOException { - - primaryStage.setTitle("Kenngruppenabfrage"); - - Label label1 = new Label("Bitte Kenngruppe eingeben!"); - label1.setTranslateX(55); - Label l1 = new Label(""); - Label l2 = new Label(""); - TextField tfield = new TextField(); - Button button1 = new Button("Kenngruppe setzen!"); - VBox layout1 = new VBox(); - - layout1.getChildren().addAll(label1, l1, tfield, l2, button1); - Scene sceKenngruppe = new Scene(layout1, 234, 137); - - FXMLLoader guiLoader = new FXMLLoader(App.class.getResource("gui.fxml")); - - Scene sceApp = new Scene(guiLoader.load(), 962, 677); - - tfield.setOnKeyPressed(e -> { - if (e.getCode() == KeyCode.ENTER) { - if (enter(tfield.getText())) { - gc = guiLoader.getController(); - gc.setKenngruppe(tfield.getText()); - primaryStage.setScene(sceApp); - } else { - tfield.setText(""); - new Fehler().showErrorDialog("error", "Kenngruppe falsch", - "Regeln für die Kenngruppe: 4-8 Zeichen sowie nur Buchstaben von A-Z."); - } - } - }); - - button1.setOnAction(e -> { - if (enter(tfield.getText())) { - gc = guiLoader.getController(); - gc.setKenngruppe(tfield.getText()); - primaryStage.setScene(sceApp); - } else { - tfield.setText(""); - new Fehler().showErrorDialog("error", "Kenngruppe falsch", - "Regeln für die Kenngruppe: 4-8 Zeichen sowie Buchstaben von A-Z."); - } - }); - - primaryStage.setScene(sceKenngruppe); - primaryStage.show(); - } - - private boolean enter(String kenngruppe) { - - String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - boolean result = true; - - for (char c : kenngruppe.toUpperCase().toCharArray()) { - if (!alphabet.contains(String.valueOf(c))) { - result = false; - break; - } - } - if (kenngruppe.length() > 8 || kenngruppe.length() < 4) { - result = false; - } - - return result; - } + private static GuiController gc; + private static int debug; + + public static void main(String[] args) { + debug = 1; + launch(args); + } + + public static int getDebug() { + return debug; + } + + @Override + public void start(Stage primaryStage) throws IOException { + primaryStage.setTitle("Enigma"); + Label lblEingbae = new Label("Bitte Kenngruppe eingeben!"); + TextField tfEingabe = new TextField(); + Button btnKenngruppe = new Button("Kenngruppe setzen!"); + VBox layout = new VBox(); + layout.setSpacing(30); + layout.setPadding(new Insets(30, 30, 30, 30)); + btnKenngruppe.setMaxWidth(Double.MAX_VALUE); + + layout.getChildren().addAll(lblEingbae, tfEingabe, btnKenngruppe); + Scene sceKenngruppe = new Scene(layout); + + FXMLLoader guiLoader = new FXMLLoader(App.class.getResource("gui.fxml")); + Scene sceApp = new Scene(guiLoader.load(), 962, 677); + + tfEingabe.setOnKeyPressed(e -> { + if (e.getCode() == KeyCode.ENTER) { + if (enter(tfEingabe.getText())) { + gc = guiLoader.getController(); + gc.setKenngruppe(tfEingabe.getText()); + primaryStage.setScene(sceApp); + } else { + tfEingabe.setText(""); + new Fehler().showErrorDialog("error", "Kenngruppe falsch", + "Regeln für die Kenngruppe: 4-8 Zeichen sowie nur Buchstaben von A-Z."); + } + } + }); + btnKenngruppe.setOnAction(e -> { + if (enter(tfEingabe.getText())) { + gc = guiLoader.getController(); + gc.setKenngruppe(tfEingabe.getText()); + primaryStage.setScene(sceApp); + } else { + tfEingabe.setText(""); + new Fehler().showErrorDialog("error", "Kenngruppe falsch", + "Regeln für die Kenngruppe: 4-8 Zeichen sowie Buchstaben von A-Z."); + } + }); + primaryStage.setScene(sceKenngruppe); + primaryStage.show(); + } + + private boolean enter(String kenngruppe) { + + String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + boolean result = true; + + for (char c : kenngruppe.toUpperCase().toCharArray()) { + if (!alphabet.contains(String.valueOf(c))) { + result = false; + break; + } + } + if (kenngruppe.length() > 8 || kenngruppe.length() < 4) { + result = false; + } + + return result; + } // /** // * TODO Dokumentieren diff --git a/src/main/java/projekt/enigma/GuiController.java b/src/main/java/projekt/enigma/GuiController.java index 024e2aa1a5327278b7f1daa5dac52e6c8d17762c..461f0f06da8fd972df6de8fa7c031b4976ca253f 100644 --- a/src/main/java/projekt/enigma/GuiController.java +++ b/src/main/java/projekt/enigma/GuiController.java @@ -12,6 +12,7 @@ import javafx.scene.control.MenuItem; import javafx.scene.control.TextField; import javafx.scene.input.MouseEvent; import javafx.scene.layout.GridPane; +import javafx.scene.layout.Pane; import javafx.scene.shape.Circle; import javafx.stage.StageStyle; import org.apache.http.HttpException; @@ -37,10 +38,8 @@ public class GuiController { private Codierer codierer; private char chiffrierterBuchstabe; private String[] empfangeneNachricht; - //deklariert die benötigten Textfelder - @FXML - private TextField tfStecker1, tfStecker2, tfStecker3, tfStecker4, tfStecker5, tfStecker6, tfStecker7, tfStecker8, - tfStecker9, tfStecker10, tfCodiert, tfKlartext; + private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + //endregion //region GUI-Elemente @@ -48,7 +47,7 @@ public class GuiController { //deklariert die benötigten Buttons @FXML private Button btnA, btnB, btnC, btnD, btnE, btnF, btnG, btnH, btnI, btnJ, btnK, btnL, btnM, btnN, btnO, btnP, btnQ, - btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete, btnReset; + btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete, btnReset, btnPort0; //deklariert die benötigten Kreise @FXML private Circle circA, circB, circC, circD, circE, circF, circG, circH, circI, circJ, circK, circL, circM, circN, @@ -65,11 +64,18 @@ public class GuiController { @FXML private MenuButton mBtnWalzPos1, mBtnWalzPos2, mBtnWalzPos3, mBtnNotchPos1, mBtnNotchPos2, mBtnNotchPos3, mBtnStartPos1, mBtnStartPos2, mBtnStartPos3; + //deklariert die benötigten Textfelder + @FXML + private TextField tfStecker1, tfStecker2, tfStecker3, tfStecker4, tfStecker5, tfStecker6, tfStecker7, tfStecker8, + tfStecker9, tfStecker10, tfCodiert, tfKlartext; + //deklariert benötigte panes + @FXML + private Pane port0, port1, port2, port3, port4, port5, port6, port7, port8, port9; + //deklariert benötigtes GridPane @FXML private GridPane mainGrid; - private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //endregion @@ -102,24 +108,24 @@ public class GuiController { menu(mBtnStartPos2, position); } - /** +/* *//** * 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. * Im Anschluss werden die CheckComboBoxen auf dem GridPane positioniert. * * @param port : int : Kabel Nummer (0-9) - */ + *//* private void createSteckbrettPort(int port) { // Item Liste anlegen @@ -133,10 +139,10 @@ public class GuiController { StringBuilder sb = new StringBuilder(); - /** + *//** * Die Buchstaben in die CheckComboBox laden und zusätzlich in einen String um später den * Index des Buchstaben auslesen zu können - */ + *//* for (char c : verfuegbareBuchstaben) { items.add(c); sb.append(c); @@ -151,7 +157,7 @@ public class GuiController { // Die Gesteckten Buchstaben in der CheckComboBox selektieren ccb.getCheckModel().check(sb.toString().indexOf(this.codierer.fetchSteckverbindungen()[port][0])); ccb.getCheckModel().check(sb.toString().indexOf(this.codierer.fetchSteckverbindungen()[port][1])); - } + }*/ /** * init Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs @@ -352,6 +358,9 @@ public class GuiController { this.resetDisplay = true; this.setzeTagesSchluessel(); } + if (e.getSource()==btnPort0){ + //TODO pane0 anzeigen + } } //endregion @@ -631,7 +640,7 @@ public class GuiController { walzeNr = 2; break; case "IV": - walzeNr = 4; + walzeNr = 3; break; case "V": walzeNr = 4; @@ -769,9 +778,8 @@ public class GuiController { // Steckbrett Felder setzen // Setzt das Steckbrett - generateSteckbrett(); + //generateSteckbrett(); - /* tfStecker1.setText(codierer.fetchSteckverbindungen()[0][0] + "" + codierer.fetchSteckverbindungen()[0][1]); tfStecker2.setText(codierer.fetchSteckverbindungen()[1][0] + "" + @@ -791,7 +799,7 @@ public class GuiController { tfStecker9.setText(codierer.fetchSteckverbindungen()[8][0] + "" + codierer.fetchSteckverbindungen()[8][1]); tfStecker10.setText(codierer.fetchSteckverbindungen()[9][0] + "" + - codierer.fetchSteckverbindungen()[9][1]);*/ + codierer.fetchSteckverbindungen()[9][1]); this.textCodiert = ""; this.textEingabe = ""; this.tfKlartext.setText(""); diff --git a/src/main/java/projekt/enigma/model/Codebuch.java b/src/main/java/projekt/enigma/model/Codebuch.java index d2ab4a6bec190fb04459e49a5cd2d45093ce073a..b710a0a6ec7e524cbfc9df59adec6f1ea2eb1dfd 100644 --- a/src/main/java/projekt/enigma/model/Codebuch.java +++ b/src/main/java/projekt/enigma/model/Codebuch.java @@ -25,18 +25,17 @@ public class Codebuch { //region Variablen /** - * TODO: Dokumentieren tag - * tag : int : gibt den Tag an + * tag : int : gibt den Tag eines Monats an */ private int tag; /** - * walzenlage : int[] : legt die Positionen der Walzen fest + * walzenlage : int[] : legt die Positionen der drei Walzen fest */ private int[] walzenlage; /** - * ringstellung : int[] : TODO ringstellung: char || int ? + * ringstellung : int[] : legt die Ringstellungen der drei Walzen fest */ private int[] ringstellung; diff --git a/src/main/java/projekt/enigma/model/Codierer.java b/src/main/java/projekt/enigma/model/Codierer.java index ce401e31527f9a557c8b505c0ed3cc7b8b6a67c9..8631af6186be26701d629893a62ba15d82c94ee0 100644 --- a/src/main/java/projekt/enigma/model/Codierer.java +++ b/src/main/java/projekt/enigma/model/Codierer.java @@ -46,7 +46,9 @@ public class Codierer { */ private Codebuch codebuch; - //TODO Dokumentieren + /** + * Thread mit der Abfolge an Aufgaben des Funkraums. + */ private Thread funk; //endregion @@ -344,10 +346,10 @@ public class Codierer { } /** - * TODO: Doku + * Ueberprueft welche Buchstaben noch zur Vertauschung verfügbar sind * - * @param port - * @return + * @param port: Zahl zwischen 0-9: entspricht der Kabelnummer. + * @return String: liefert einen String mit den verfuegbaren Buchstaben zurueck. */ public String fetchVerfuegbareBuchstaben(int port) { return this.hardware.getSteckbrett().fetchVerfuegbareBuchstaben(port); diff --git a/src/main/java/projekt/enigma/model/Hardware.java b/src/main/java/projekt/enigma/model/Hardware.java index f188a2c935d9c0f622502e1bd92a18a99a293727..0ddd8ed605bc771ee67247e6e3a3e39bd669add3 100644 --- a/src/main/java/projekt/enigma/model/Hardware.java +++ b/src/main/java/projekt/enigma/model/Hardware.java @@ -17,10 +17,18 @@ public class Hardware { //region Variablen /** - * TODO: Dokumentieren + * 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 diff --git a/src/main/java/projekt/enigma/view/ChkBoxPanel.java b/src/main/java/projekt/enigma/view/ChkBoxPanel.java new file mode 100644 index 0000000000000000000000000000000000000000..04b93074aa47a1b13447584a66b580b8c8a2d284 --- /dev/null +++ b/src/main/java/projekt/enigma/view/ChkBoxPanel.java @@ -0,0 +1,74 @@ +package projekt.enigma.view; + +import java.awt.*; +import javax.swing.*; + +public class ChkBoxPanel extends JPanel { + /*private static JPanel panel = new JPanel();*/ + private static JCheckBox[] checkbox; + private static Character[] alphabet;/* = {'A','B','C','D'};*/ + private static int charSize; + + public ChkBoxPanel(Character[] alphabet) { + this.charSize = alphabet.length; + this.alphabet = alphabet; + /*this.setTitle("Vertausche Buchstaben"); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);*/ + this.setSize(30, charSize * 25); + //this.setLocation(getMousePosition()/*.x, getMousePosition().y+this.getHeight()+30*/); + initializeComponents(); + } + + private void initializeComponents() { + this.checkbox = new JCheckBox[charSize]; + GridLayout panelLayout = new GridLayout(); + this.setLayout(panelLayout); + if (!(charSize % 2 == 0)) { + this.setSize(30, (charSize + 1) * 20); + panelLayout.setRows((charSize + 1) / 2); + } else { + this.setSize(30, charSize * 10); + panelLayout.setRows(charSize / 2); + } + panelLayout.setColumns(2); + //panelLayout.setVgap(5); + //panelLayout.setHgap(-5); + + + for (int i = 0; i < charSize; i++) { + checkbox[i] = new JCheckBox(alphabet[i] + ""); + checkbox[i].setSize(15, 20); + checkbox[i].setHorizontalTextPosition(SwingConstants.CENTER); + checkbox[i].setVerticalTextPosition(SwingConstants.TOP); +/* if (!(i%2==0)){ + }*/ + checkbox[i].setMargin(new Insets(0, 20, 0, 20)); + //checkbox[i].setLocation(20, (i + 1) * 30); + this.add(checkbox[i]); + } + /* this.getContentPane().add(panel);*/ + checkbox[0].setSelected(true); + //this.add(panel); + //this.setLocation(100, 100); + this.setVisible(true); + } + + + private int isChecked() { + for (int i = 0; i < charSize; i++) { + if (checkbox[i].isSelected()) { + + // do something... + + } else { + + // do something else... + + } + } + return 0; + } + + +} + diff --git a/src/main/resources/projekt/enigma/gui.fxml b/src/main/resources/projekt/enigma/gui.fxml index e1f89f7b45830201cfc80800a7eff6bcffcec0f3..3080961d5406d42db5e0d3ad2fe4b7cd7290e6cc 100644 --- a/src/main/resources/projekt/enigma/gui.fxml +++ b/src/main/resources/projekt/enigma/gui.fxml @@ -13,9 +13,8 @@ <?import javafx.scene.shape.Circle?> <?import javafx.scene.text.Font?> -<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="962.0" xmlns="http://javafx.com/javafx/8.0.999-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController"> +<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="962.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController"> <children> - <AnchorPane layoutX="207.0" layoutY="-111.0" prefHeight="111.0" prefWidth="487.0" AnchorPane.leftAnchor="207.0" AnchorPane.rightAnchor="274.0" /> <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" /> @@ -670,7 +669,56 @@ <Insets left="42.0" /> </GridPane.margin> </Label> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="7" /> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port0" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port1" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port2" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="4" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port3" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="5" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port4" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="6" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port5" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="7" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port6" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="8" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port7" disable="true" layoutY="-304.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="9" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port8" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="10" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port9" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> </children> </GridPane> <Label layoutX="684.0" layoutY="-164.0" prefHeight="17.0" prefWidth="195.0" /> @@ -702,5 +750,6 @@ </Button> </children> </GridPane> + <Pane layoutX="-129.0" layoutY="248.0" prefHeight="346.0" prefWidth="67.0" /> </children> </AnchorPane>