From 1d183447efab33847859c8b3a0dd189522193d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uli=20B=C3=A4hr?= <eude365sup@outlook.com> Date: Wed, 4 Dec 2019 20:50:39 +0100 Subject: [PATCH] GuiController Steckbrett ToggleButtonGroup --- .../java/projekt/enigma/GuiController.java | 177 +++++++++++------- src/main/resources/projekt/enigma/gui.fxml | 82 +------- 2 files changed, 107 insertions(+), 152 deletions(-) diff --git a/src/main/java/projekt/enigma/GuiController.java b/src/main/java/projekt/enigma/GuiController.java index 798e731..3783b56 100644 --- a/src/main/java/projekt/enigma/GuiController.java +++ b/src/main/java/projekt/enigma/GuiController.java @@ -1,22 +1,17 @@ package projekt.enigma; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.fxml.FXML; +import javafx.geometry.Insets; +import javafx.geometry.Pos; import javafx.scene.control.*; -import javafx.scene.control.Button; -import javafx.scene.control.Label; -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; -import org.controlsfx.control.CheckComboBox; import org.controlsfx.dialog.ProgressDialog; import projekt.enigma.model.Codierer; import projekt.enigma.model.Fehler; @@ -26,53 +21,55 @@ import java.util.ArrayList; import java.util.Arrays; public class GuiController { - //region Klassenvariablen + private final static String[] walzenNr = {"I", "II", "III", "IV", "V"}; private final static String[] ringNr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26"}; private final static String[] position = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; - private ArrayList<MenuItem> mItem; + private String[] empfangeneNachricht; + private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private String textEingabe; private String textCodiert; + private char chiffrierterBuchstabe; + private ArrayList<MenuItem> mItem; private boolean resetDisplay; private Codierer codierer; - private char chiffrierterBuchstabe; - private String[] empfangeneNachricht; - private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + private enum BUCHSTABE_LEUCHTET {AN, AUS} + + @FXML + private static ToggleButton[] tBtnPort; //endregion //region GUI-Elemente - //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, - btnPort0, btnPort1, btnPort2, btnPort3, btnPort4, btnPort5, btnPort6, btnPort7, btnPort8, btnPort9; + btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete, btnReset, + btnPort0, btnPort1, btnPort2, btnPort3, btnPort4, btnPort5, btnPort6, btnPort7, btnPort8, btnPort9; //deklariert die benötigten Kreise @FXML private Circle circA, circB, circC, circD, circE, circF, circG, circH, circI, circJ, circK, circL, circM, circN, - circO, circP, circQ, circR, circS, circT, circU, circV, circW, circX, circY, circZ; + circO, circP, circQ, circR, circS, circT, circU, circV, circW, circX, circY, circZ; //deklariert die benötigten Label @FXML private Label lblA, lblB, lblC, lblD, lblE, lblF, lblG, lblH, lblI, lblJ, lblK, lblL, lblM, lblN, lblO, lblP, lblQ, - lblR, lblS, lblT, lblU, lblV, lblW, lblX, lblY, lblZ, lblLadeNachricht, lblTagesschluessel, - lblSpruchschluessel; + lblR, lblS, lblT, lblU, lblV, lblW, lblX, lblY, lblZ, lblLadeNachricht, lblTagesschluessel, + lblSpruchschluessel; //deklariert die ProgressBar @FXML private ProgressBar pbLadeNachricht; //deklariert die MenueButtons @FXML private MenuButton mBtnWalzPos1, mBtnWalzPos2, mBtnWalzPos3, mBtnNotchPos1, mBtnNotchPos2, mBtnNotchPos3, - mBtnStartPos1, mBtnStartPos2, mBtnStartPos3; + 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 + tfStecker9, tfStecker10, tfCodiert, tfKlartext; + //deklariert benötigtes pane @FXML - private Pane port0; - + private Pane portPane; //deklariert benötigtes GridPane @FXML private GridPane mainGrid; @@ -108,33 +105,31 @@ public class GuiController { menu(mBtnStartPos3, position); menu(mBtnStartPos2, position); - } + myToggleButtons(10); + } /** * 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 - ObservableList<Character> items = FXCollections.observableArrayList(); - // Holt die verfügbaren Buchstaben für diesen Port ab und erstellt ein char Array daraus char[] verfuegbareBuchstaben = this.codierer.fetchVerfuegbareBuchstaben(port).toCharArray(); @@ -143,25 +138,24 @@ 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); } - // Eine CheckComboBox erstellen - CheckComboBox<Character> ccb = new CheckComboBox<Character>(items); - - // Die CheckComboBox dem GridPane in der Oberfläche zuordnen - mainGrid.add(ccb, 1 + port, 8); +/* // ToggleButton erstellen + tBtnPort[port] = new ToggleButton(); + // Den ToggleButton dem GridPane in der Oberfläche zuordnen + mainGrid.add(tBtnPort[port], port + 1, 8); + mainGrid.setMargin(tBtnPort[port], new Insets(0, 15, 0, 15));*/ // 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])); - }*/ + //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 @@ -169,7 +163,9 @@ public class GuiController { * @param button : Button für die die Einträge erstellt werden sollen */ private void menu(MenuButton button, String[] str) { + mItem = new ArrayList<>(); + for (int i = 0; i < str.length; i++) { //Eintrag aus str der Arraylist mi hinzufügen mItem.add(new MenuItem(str[i])); @@ -181,6 +177,27 @@ public class GuiController { mItem.get(i).setOnAction(e -> setMenuBtnText(button, finalMi.get(finalI))); } } + + /** + * TODO + * @param countOfBtn + */ + private void myToggleButtons(int countOfBtn) { + + final ToggleGroup cabelConnect = new ToggleGroup(); + + tBtnPort = new ToggleButton[countOfBtn]; + for (int i = 0; i < countOfBtn; i++) { + tBtnPort[i]=new ToggleButton(i+"Port"); + tBtnPort[i].setAlignment(Pos.CENTER_RIGHT); + tBtnPort[i].setToggleGroup(cabelConnect); + if (i==0)tBtnPort[0].setSelected(true); + + mainGrid.setMargin(tBtnPort[i], new Insets(0, 15, 0, 15)); + mainGrid.add(tBtnPort[i], i + 1, 8); + } + } + //endregion //region EventHandler/Listener @@ -338,7 +355,6 @@ public class GuiController { leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN); } } - /** * Auswertung welcher Button (senden, empfangen oder löschen) gedrückt wurde. * Funktionsaufruf entsprechend des gedrückten Button @@ -362,18 +378,31 @@ public class GuiController { this.resetDisplay = true; this.setzeTagesSchluessel(); } - if (e.getSource()==btnPort0){ }//TODO pane0 anzeigen - if (e.getSource()==btnPort1){ }//TODO pane0 anzeigen - if (e.getSource()==btnPort2){ }//TODO pane0 anzeigen - if (e.getSource()==btnPort3){ }//TODO pane0 anzeigen - if (e.getSource()==btnPort4){ }//TODO pane0 anzeigen - if (e.getSource()==btnPort5){ }//TODO pane0 anzeigen - if (e.getSource()==btnPort6){ }//TODO pane0 anzeigen - if (e.getSource()==btnPort7){ }//TODO pane0 anzeigen - if (e.getSource()==btnPort8){ }//TODO pane0 anzeigen - if (e.getSource()==btnPort9){ }//TODO pane0 anzeigen + /* if (e.getSource() == btnPort0) { + //TODO + //VBox vbox = new VBox(); + } + if (e.getSource() == btnPort1) { + }//TODO pane0 anzeigen + if (e.getSource() == btnPort2) { + }//TODO pane0 anzeigen + if (e.getSource() == btnPort3) { + }//TODO pane0 anzeigen + if (e.getSource() == btnPort4) { + }//TODO pane0 anzeigen + if (e.getSource() == btnPort5) { + }//TODO pane0 anzeigen + if (e.getSource() == btnPort6) { + }//TODO pane0 anzeigen + if (e.getSource() == btnPort7) { + }//TODO pane0 anzeigen + if (e.getSource() == btnPort8) { + }//TODO pane0 anzeigen + if (e.getSource() == btnPort9) { + }//TODO pane0 anzeigen*/ } + //endregion //region Methoden @@ -481,20 +510,15 @@ public class GuiController { } /** - * Hier werden die TextFelder, welche die Steckverbindungen darstellen, - * mit dem Werten die die Klasse Codierer zur Verfügung stellt gefüllt. + * 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() { - btnPort0.setText(codierer.fetchSteckverbindungen()[0][0] + "" + codierer.fetchSteckverbindungen()[0][1]); - btnPort1.setText(codierer.fetchSteckverbindungen()[1][0] + "" + codierer.fetchSteckverbindungen()[1][1]); - btnPort2.setText(codierer.fetchSteckverbindungen()[2][0] + "" + codierer.fetchSteckverbindungen()[2][1]); - btnPort3.setText(codierer.fetchSteckverbindungen()[3][0] + "" + codierer.fetchSteckverbindungen()[3][1]); - btnPort4.setText(codierer.fetchSteckverbindungen()[4][0] + "" + codierer.fetchSteckverbindungen()[4][1]); - btnPort5.setText(codierer.fetchSteckverbindungen()[5][0] + "" + codierer.fetchSteckverbindungen()[5][1]); - btnPort6.setText(codierer.fetchSteckverbindungen()[6][0] + "" + codierer.fetchSteckverbindungen()[6][1]); - btnPort7.setText(codierer.fetchSteckverbindungen()[7][0] + "" + codierer.fetchSteckverbindungen()[7][1]); - btnPort8.setText(codierer.fetchSteckverbindungen()[8][0] + "" + codierer.fetchSteckverbindungen()[8][1]); - btnPort9.setText(codierer.fetchSteckverbindungen()[9][0] + "" + codierer.fetchSteckverbindungen()[9][1]); + + for (int i = 0; i <= 9; i++) { + tBtnPort[i].setText(codierer.fetchSteckverbindungen()[i][0] + "" + + codierer.fetchSteckverbindungen()[i][1]); + } } /** @@ -555,6 +579,10 @@ public class GuiController { progressDialogue("tx"); } + /** + * TODO + * @param strRxTx + */ private void progressDialogue(String strRxTx) { Task copyWorker = createWorker(strRxTx); @@ -576,6 +604,11 @@ public class GuiController { dialog.showAndWait(); } + /** + * TODO + * @param strRxTx + * @return + */ public Task createWorker(String strRxTx) { return new Task() { @Override @@ -788,11 +821,11 @@ public class GuiController { mBtnStartPos3.setText(String.valueOf(codierer.fetchWalzen()[2])); // Steckbrett Felder setzen - + setzeSteckverbindungen(); // Setzt das Steckbrett - //generateSteckbrett(); + generateSteckbrett(); - btnPort0.setText(codierer.fetchSteckverbindungen()[0][0] + "" + +/* btnPort0.setText(codierer.fetchSteckverbindungen()[0][0] + "" + codierer.fetchSteckverbindungen()[0][1]); btnPort1.setText(codierer.fetchSteckverbindungen()[1][0] + "" + codierer.fetchSteckverbindungen()[1][1]); @@ -811,15 +844,17 @@ public class GuiController { btnPort8.setText(codierer.fetchSteckverbindungen()[8][0] + "" + codierer.fetchSteckverbindungen()[8][1]); btnPort9.setText(codierer.fetchSteckverbindungen()[9][0] + "" + - codierer.fetchSteckverbindungen()[9][1]); + codierer.fetchSteckverbindungen()[9][1]);*/ this.textCodiert = ""; this.textEingabe = ""; this.tfKlartext.setText(""); this.tfCodiert.setText(""); } - private enum BUCHSTABE_LEUCHTET {AN, AUS} - + /** + * TODO + * @param kenngruppe + */ public void setKenngruppe(String kenngruppe) { // Initialisieren des Codierers und setzen der Kenngruppe diff --git a/src/main/resources/projekt/enigma/gui.fxml b/src/main/resources/projekt/enigma/gui.fxml index 880cf98..a0aa286 100644 --- a/src/main/resources/projekt/enigma/gui.fxml +++ b/src/main/resources/projekt/enigma/gui.fxml @@ -621,89 +621,9 @@ </Label> <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" /> + <Pane fx:id="portPane" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> </children> </Pane> - <Button fx:id="btnPort0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="1" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnPort9" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="10" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnPort8" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="9" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnPort7" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="8" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnPort6" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="7" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnPort5" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="6" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnPort4" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="5" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnPort3" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="4" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnPort2" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="3" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> - <Button fx:id="btnPort1" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="2" GridPane.rowIndex="8"> - <padding> - <Insets left="10.0" right="10.0" /> - </padding> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </Button> </children> </GridPane> <GridPane layoutX="297.0" layoutY="64.0" prefHeight="168.0" prefWidth="585.0"> -- GitLab