Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • d.eisold/enigma
  • Janschubi1993/enigma
  • TsunamiKlaus/enigma
  • alfatrainingkurse/java/enigma
  • FloriN/enigma
  • PaoloPinkel/enigma
6 results
Show changes
Commits on Source (25)
Praesentation/Screenshot.JPG

84.9 KiB

...@@ -46,13 +46,15 @@ ...@@ -46,13 +46,15 @@
* Besondere (für uns) Lösungen * Besondere (für uns) Lösungen
### Zahlen, Daten, Fakten ### Zahlen, Daten, Fakten
* Zeilen insgesamt: 4120 * Zeilen insgesamt: 3056
* Code: 1596 * Code: 1619 (53%)
* XML: 110 * XML: 110
* Kommentare: * Kommentare: 1076 (35%)
* Leerzeilen: * Leerzeilen: 365 (12%)
* Commits: 373 * Commits: 461
* Merge Requests: 113 * Merge Requests: 146
* Tickets: 29
* Pipelines 471
## Klassendiagram ## Klassendiagram
![Ablaufdiagram Enigma](http://plantuml.gitrepo.de/png/U9oTM4jpspOGlkjNyDPaNFhGeoVJIU97aedbU2GrpiJrU21gHI820HO0uzHfyjkx8CK7G81Yh8D4xRTOBFODlbIQI5tcR3RJL3E8xk_d7yxEBtzJqIaZIaLdbAIIvFVtV_FPB8euoK4L986eaE8BxFGnS9hc9FgEO1_EnGROdXf5IINBNd9SiHoVulUwJBAMrtpYI9CqEeaernRrWR17u8oaK8EtTnOiAK-L1iPAddeP44nsNq6kAT_KF4b6vEtTxLt3qsC_YXhTdZsto5lGIRP29PHACbRY3p27HOkbDjeuv1GqhXiIRzfp3R55xr13T6cVwDdp5kvn_epKSEFO48F2AtGWt6NmwFrZDidd52H8n-Sxu3oLPL4OxzRsit1EaapI9DD-M1KIVTMvP1fNhKj090R7ve58ey_R_QE59qtmdhInuWPGTL37RqbDdaI5lDWIdi9LS_W0pa4kdQFvmdOacYhSSJbm7rFjzZ1ovHwumZw2t9QGhj68husUcgm7Ggfp40q7ZeA1_xuDbY4MifN9bt713FIZ1lKPS3NmIm7A_3fCA0AsK5bgBK7hQo7TdIHWTZGXus0A-2ReJZLoCiGUOJ6iAXMzKyU7rdwv5efgAjppT1oEu-Bw77vTusW3lf3jqJqrC6vT_5uKMmUY7DKZZ2gps6izr8ZmZSZR0FgbkdC16GFPBpeeyEAlgzFLkmzNzzUByujtdto50BdcvylbgpVdOqneo4myd4if97PD9ko38smAn07Yf5EKV2T9cLlLioi41gwBd2_kFEYKFHjdE1MxxiTeZIfwVCssYiZANCqV9xws33SJ4baMpREbTI29_CLo8o43RtKoZRIH7-YYlkHfUxCllxs82c-aHZOQ4VS8OtaRgWU3IZp5pNCXbKbUry-6D2S5EcabmJozgCF_ztqQ_6djtqeP-8nZPz5jxgx40SuMNebXmjUQeOD6eA7yALPe_UTac1jpKsHr3dTCYjgH4hkBxZL3_n0Y94qf9soSxoWAnfO_LweemPvSgp4S1mxX9Qn1rgsmp-MV2yPx_nH3Ll7is92m8aD1WU7DkGsOIT--OfIIg-0bevNfLBM7VLuD5XxLHV1NHhq_WkLhM8R2DI2CZ5yTlBDQRwmV8Ds4r_DSzzrT_ZO4_KiKZD__6gxZCvm6-9hmtV8VHZKuMOUQUkzXfYfn3edsAkFTyLLHz8H_noZKDFbXpfpWK68yRdvdtGvfWiGt9JqLN4l1S7ZeWLNdTiAWbNaKvOJsNO8ECLTjYu97EtDc0kpZN5iNXbPaTOjR2A5zO1mnGJONd-QNUtJ43DQ1UWQ9wvolRhPBtuGSZmyPFzi1pWfWT5H6jzjJAXDcqrS4etD1ogs7MZfcC1LpWzKcsMceE2oCGMbAARU9m_4zZdBWfKK8ZKLxUyoH_xNcA_YcNSX7ypRhsDkguzxW7hXnnRrUFfaSKi1xh-ZcSM_xGDz9i43dieEI7oYM1KF-Y8Fxsd5n_kzAf2d3gg-ruCh2C2nJ7AHKFIsNuDdtHiYT4mRxsM0X8AVetfNuJ3Bcup3qbMZuaEDGNimnOttrmSfbixxgLxM86rWha5zf0lN2y8NzA39A0MKEKWdpQVBYlxWiukWB-Kgstuv9KJ2Q4EDOKyUQv-5QK-JsIprIX_nsDV2lH9d3XSwx714FbZbl-4wyRyw6WeEDOSeMlNRnT9NVTkzzikwzppXhKDYYTyUHJnUpx5-drFhfWkf9wcG_oHmAY36RrrR4qUhfbculinWS-yUGi9OrAAoxlfn4UL2fZii8wXBOcAJz4rIYUeNWKy7aoEmbDXFpDlr_rhUkvW00 "Ablaufdiagram der Enigma") ![Ablaufdiagram Enigma](http://plantuml.gitrepo.de/png/U9oTM4jpspOGlkjNyDPaNFhGeoVJIU97aedbU2GrpiJrU21gHI820HO0uzHfyjkx8CK7G81Yh8D4xRTOBFODlbIQI5tcR3RJL3E8xk_d7yxEBtzJqIaZIaLdbAIIvFVtV_FPB8euoK4L986eaE8BxFGnS9hc9FgEO1_EnGROdXf5IINBNd9SiHoVulUwJBAMrtpYI9CqEeaernRrWR17u8oaK8EtTnOiAK-L1iPAddeP44nsNq6kAT_KF4b6vEtTxLt3qsC_YXhTdZsto5lGIRP29PHACbRY3p27HOkbDjeuv1GqhXiIRzfp3R55xr13T6cVwDdp5kvn_epKSEFO48F2AtGWt6NmwFrZDidd52H8n-Sxu3oLPL4OxzRsit1EaapI9DD-M1KIVTMvP1fNhKj090R7ve58ey_R_QE59qtmdhInuWPGTL37RqbDdaI5lDWIdi9LS_W0pa4kdQFvmdOacYhSSJbm7rFjzZ1ovHwumZw2t9QGhj68husUcgm7Ggfp40q7ZeA1_xuDbY4MifN9bt713FIZ1lKPS3NmIm7A_3fCA0AsK5bgBK7hQo7TdIHWTZGXus0A-2ReJZLoCiGUOJ6iAXMzKyU7rdwv5efgAjppT1oEu-Bw77vTusW3lf3jqJqrC6vT_5uKMmUY7DKZZ2gps6izr8ZmZSZR0FgbkdC16GFPBpeeyEAlgzFLkmzNzzUByujtdto50BdcvylbgpVdOqneo4myd4if97PD9ko38smAn07Yf5EKV2T9cLlLioi41gwBd2_kFEYKFHjdE1MxxiTeZIfwVCssYiZANCqV9xws33SJ4baMpREbTI29_CLo8o43RtKoZRIH7-YYlkHfUxCllxs82c-aHZOQ4VS8OtaRgWU3IZp5pNCXbKbUry-6D2S5EcabmJozgCF_ztqQ_6djtqeP-8nZPz5jxgx40SuMNebXmjUQeOD6eA7yALPe_UTac1jpKsHr3dTCYjgH4hkBxZL3_n0Y94qf9soSxoWAnfO_LweemPvSgp4S1mxX9Qn1rgsmp-MV2yPx_nH3Ll7is92m8aD1WU7DkGsOIT--OfIIg-0bevNfLBM7VLuD5XxLHV1NHhq_WkLhM8R2DI2CZ5yTlBDQRwmV8Ds4r_DSzzrT_ZO4_KiKZD__6gxZCvm6-9hmtV8VHZKuMOUQUkzXfYfn3edsAkFTyLLHz8H_noZKDFbXpfpWK68yRdvdtGvfWiGt9JqLN4l1S7ZeWLNdTiAWbNaKvOJsNO8ECLTjYu97EtDc0kpZN5iNXbPaTOjR2A5zO1mnGJONd-QNUtJ43DQ1UWQ9wvolRhPBtuGSZmyPFzi1pWfWT5H6jzjJAXDcqrS4etD1ogs7MZfcC1LpWzKcsMceE2oCGMbAARU9m_4zZdBWfKK8ZKLxUyoH_xNcA_YcNSX7ypRhsDkguzxW7hXnnRrUFfaSKi1xh-ZcSM_xGDz9i43dieEI7oYM1KF-Y8Fxsd5n_kzAf2d3gg-ruCh2C2nJ7AHKFIsNuDdtHiYT4mRxsM0X8AVetfNuJ3Bcup3qbMZuaEDGNimnOttrmSfbixxgLxM86rWha5zf0lN2y8NzA39A0MKEKWdpQVBYlxWiukWB-Kgstuv9KJ2Q4EDOKyUQv-5QK-JsIprIX_nsDV2lH9d3XSwx714FbZbl-4wyRyw6WeEDOSeMlNRnT9NVTkzzikwzppXhKDYYTyUHJnUpx5-drFhfWkf9wcG_oHmAY36RrrR4qUhfbculinWS-yUGi9OrAAoxlfn4UL2fZii8wXBOcAJz4rIYUeNWKy7aoEmbDXFpDlr_rhUkvW00 "Ablaufdiagram der Enigma")
...@@ -85,12 +87,6 @@ ...@@ -85,12 +87,6 @@
* Dann String (Warum) * Dann String (Warum)
* Vorteile Enum (Warum) * Vorteile Enum (Warum)
## Die GUI der Enigma (Elemente, etc)
* Besondere GUI Elemente
* ControlsFX (ProgressDialog)
## GUI Controller
## Enigma Demo ## Enigma Demo
* Kenngruppe Abfrage * Kenngruppe Abfrage
* Testen Kenngruppe Dialog und Fehler * Testen Kenngruppe Dialog und Fehler
...@@ -105,3 +101,7 @@ ...@@ -105,3 +101,7 @@
* Setzen von Walzen und Ringen * Setzen von Walzen und Ringen
* Setzen von gleichen Walzen und Fehler * Setzen von gleichen Walzen und Fehler
* Senden & Empfangen * Senden & Empfangen
## GUI Controller
![Screenshot](Screenshot.JPG "Screenshot der Enigma")
\ No newline at end of file
...@@ -17,3 +17,5 @@ Ebenfalls wichtig ist eure Kenngruppe. Dies hat früher den Personenkreis bezeic ...@@ -17,3 +17,5 @@ Ebenfalls wichtig ist eure Kenngruppe. Dies hat früher den Personenkreis bezeic
Wenn ihr also auf mehreren Clients die selbe Kenngruppe nutzt, dann könnt ihr untereinander eure Nachrichten lesen.\ Wenn ihr also auf mehreren Clients die selbe Kenngruppe nutzt, dann könnt ihr untereinander eure Nachrichten lesen.\
\ \
Im [Wiki](https://www.gitrepo.de/alfatrainingkurse/java/enigma/wikis/home) findet ihr auch noch einige Informationen zu dem Projekt. Im [Wiki](https://www.gitrepo.de/alfatrainingkurse/java/enigma/wikis/home) findet ihr auch noch einige Informationen zu dem Projekt.
![Screenshot](Praesentation/Screenshot.JPG "Screenshot der Enigma")
\ No newline at end of file
File added
...@@ -64,11 +64,10 @@ public class App extends Application { ...@@ -64,11 +64,10 @@ public class App extends Application {
Label lblEingbae = new Label("Bitte Kenngruppe eingeben!"); Label lblEingbae = new Label("Bitte Kenngruppe eingeben!");
TextField tfEingabe = new TextField(); TextField tfEingabe = new TextField();
tfEingabe.setText("Enigma");
Button btnKenngruppe = new Button("Kenngruppe setzen!"); Button btnKenngruppe = new Button("Kenngruppe setzen!");
VBox layout = new VBox(); VBox layout = new VBox();
layout.setSpacing(30); layout.setSpacing(10);
layout.setPadding(new Insets(30, 30, 30, 30)); layout.setPadding(new Insets(20, 30, 10, 30));
btnKenngruppe.setMaxWidth(Double.MAX_VALUE); btnKenngruppe.setMaxWidth(Double.MAX_VALUE);
// baut die Scene fuer die Kenngruppenabfrage auf // baut die Scene fuer die Kenngruppenabfrage auf
......
package projekt.enigma; package projekt.enigma;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Task; import javafx.concurrent.Task;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
...@@ -19,901 +21,764 @@ import projekt.enigma.view.ChkBoxGridPane; ...@@ -19,901 +21,764 @@ import projekt.enigma.view.ChkBoxGridPane;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
public class GuiController { public class GuiController {
//region Klassenvariablen //region Klassenvariablen
private final static String[] walzenNr = {"I", "II", "III", "IV", "V"}; 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[] ringNr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14",
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"}; "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26"};
@FXML private final static String[] position = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
private static ToggleButton[] tBtnPort; "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
private String[] empfangeneNachricht; @FXML
private String textEingabe; private static ToggleButton[] tBtnPort;
private String textCodiert; private String[] empfangeneNachricht;
private char chiffrierterBuchstabe; private String textEingabe;
private boolean resetDisplay; private String textCodiert;
private Codierer codierer; private char chiffrierterBuchstabe;
//region GUI-Elemente private boolean resetDisplay;
//deklariert die benötigten Buttons private Codierer codierer;
@FXML
private Button btnA, btnB, btnC, btnD, btnE, btnF, btnG, btnH, btnI, btnJ, btnK, btnL, btnM, btnN, btnO, btnP, btnQ, //region GUI-Elemente
btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete, btnReset; //deklariert die benötigten Buttons
//endregion @FXML
//deklariert die benötigten Kreise private Button btnA, btnB, btnC, btnD, btnE, btnF, btnG, btnH, btnI, btnJ, btnK, btnL, btnM, btnN, btnO, btnP, btnQ,
@FXML btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete, btnReset;
private Circle circA, circB, circC, circD, circE, circF, circG, circH, circI, circJ, circK, circL, circM, circN, @FXML
circO, circP, circQ, circR, circS, circT, circU, circV, circW, circX, circY, circZ; private Button[] btnArray;
//deklariert die benötigten Label //endregion
@FXML //deklariert die benötigten Kreise
private Label lblSpruchschluessel, lblKenngruppe; @FXML
//deklariert die MenueButtons private Circle circA, circB, circC, circD, circE, circF, circG, circH, circI, circJ, circK, circL, circM, circN,
@FXML circO, circP, circQ, circR, circS, circT, circU, circV, circW, circX, circY, circZ;
private MenuButton mBtnWalzPos1, mBtnWalzPos2, mBtnWalzPos3, mBtnNotchPos1, mBtnNotchPos2, mBtnNotchPos3, //deklariert die benötigten Label
mBtnStartPos1, mBtnStartPos2, mBtnStartPos3; @FXML
//deklariert die benötigten Textfelder private Label lblSpruchschluessel, lblKenngruppe;
@FXML //deklariert die MenueButtons
private TextField tfCodiert, tfKlartext; @FXML
//deklariert benötigtes GridPane private MenuButton mBtnWalzPos1, mBtnWalzPos2, mBtnWalzPos3, mBtnNotchPos1, mBtnNotchPos2, mBtnNotchPos3,
@FXML mBtnStartPos1, mBtnStartPos2, mBtnStartPos3;
private ChkBoxGridPane[] chkBoxGridPane; //deklariert die benötigten Textfelder
@FXML @FXML
private GridPane mainGrid; private TextArea tfCodiert, tfKlartext;
@FXML //deklariert benötigtes GridPane
private AnchorPane anchorPane; @FXML
private ChkBoxGridPane[] chkBoxGridPane;
/** @FXML
* Initialisiert die Elemente GUI und setzt deren Startwerte private GridPane mainGrid;
*/ @FXML
@FXML private AnchorPane anchorPane;
void initialize() {
// Variablen setzen /**
textEingabe = ""; * Initialisiert die Elemente GUI und setzt deren Startwerte
textCodiert = ""; */
resetDisplay = true; @FXML
void initialize() {
//Einträge für Walzen // Variablen setzen
menu(mBtnWalzPos1, walzenNr); textEingabe = "";
menu(mBtnWalzPos2, walzenNr); textCodiert = "";
menu(mBtnWalzPos3, walzenNr); resetDisplay = true;
//Einträge für die Ringe //Einträge für Walzen
menu(mBtnNotchPos1, ringNr); menu(mBtnWalzPos1, walzenNr);
menu(mBtnNotchPos2, ringNr); menu(mBtnWalzPos2, walzenNr);
menu(mBtnNotchPos3, ringNr); menu(mBtnWalzPos3, walzenNr);
//Einträge für die Startpositionen //Einträge für die Ringe
menu(mBtnStartPos1, position); menu(mBtnNotchPos1, ringNr);
menu(mBtnStartPos3, position); menu(mBtnNotchPos2, ringNr);
menu(mBtnStartPos2, position); menu(mBtnNotchPos3, ringNr);
}
//endregion //Einträge für die Startpositionen
menu(mBtnStartPos1, position);
//region Init menu(mBtnStartPos3, position);
menu(mBtnStartPos2, position);
/** btnArray = new Button[]{btnA, btnB, btnC, btnD, btnE, btnF, btnG, btnH, btnI, btnJ, btnK, btnL, btnM, btnN,
* Die Funktion createSteckbrettPort erstellt zehn CheckComboBoxen, holt sich die verfügbaren Buchstaben, btnO, btnP, btnQ, btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ};
* die bereits gesteckten Kabel und weißt sie zu.
* Im Anschluss werden die CheckComboBoxen auf dem GridPane positioniert. tfKlartext.textProperty().addListener((ChangeListener<Object>) (observableValue, o, t1) ->
* tfKlartext.setScrollTop(Double.MAX_VALUE));
* @param port : int : Kabel Nummer (0-9) tfCodiert.textProperty().addListener((ChangeListener<Object>) (observableValue, o, t1) ->
*/ tfCodiert.setScrollTop(Double.MAX_VALUE));
private void createSteckbrettPort(int port) { }
// Holt die verfügbaren Buchstaben für diesen Port ab und erstellt ein char Array daraus //endregion
char[] verfuegbareBuchstaben = this.codierer.fetchVerfuegbareBuchstaben(port).toCharArray();
//region Init
// Sortiert das Array nach dem Alphabet
Arrays.sort(verfuegbareBuchstaben); /**
* init Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs
StringBuilder sb = new StringBuilder(); *
* @param button : Button für die die Einträge erstellt werden sollen
/* */
* Die Buchstaben in die CheckComboBox laden und zusätzlich in einen String um später den private void menu(MenuButton button, String[] str) {
* Index des Buchstaben auslesen zu können ArrayList<MenuItem> mItem = new ArrayList<>();
*/
for (char c : verfuegbareBuchstaben) { for (int i = 0; i < str.length; i++) {
sb.append(c); // Eintrag aus str der Arraylist mi hinzufügen
} mItem.add(new MenuItem(str[i]));
// MenuItem mi dem Button button hinzufügen
/* // ToggleButton erstellen button.getItems().add(mItem.get(i));
tBtnPort[port] = new ToggleButton(); int finalI = i;
// Den ToggleButton dem GridPane in der Oberfläche zuordnen // Listener für die einzelnen Einträge
mainGrid.add(tBtnPort[port], port + 1, 8); mItem.get(i).setOnAction(e -> setMenuBtnText(button, mItem.get(finalI)));
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])); * Erzeugt Buttons um die Steckverbindungen zu auszuwählen
} */
private void myToggleButtons() {
/** if (chkBoxGridPane != null) {
* init Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs for (ChkBoxGridPane boxGridPane : chkBoxGridPane) {
* anchorPane.getChildren().remove(boxGridPane);
* @param button : Button für die die Einträge erstellt werden sollen }
*/ }
private void menu(MenuButton button, String[] str) { chkBoxGridPane = new ChkBoxGridPane[10];
ArrayList<MenuItem> mItem = new ArrayList<>();
final ToggleGroup cabelConnect = new ToggleGroup();
for (int i = 0; i < str.length; i++) { tBtnPort = new ToggleButton[chkBoxGridPane.length];
// Eintrag aus str der Arraylist mi hinzufügen
mItem.add(new MenuItem(str[i])); for (int i = 0; i < chkBoxGridPane.length; i++) {
// MenuItem mi dem Button button hinzufügen tBtnPort[i] = new ToggleButton(this.codierer.fetchSteckverbindungen()[i][0] + "" +
button.getItems().add(mItem.get(i)); this.codierer.fetchSteckverbindungen()[i][1]);
int finalI = i; tBtnPort[i].setToggleGroup(cabelConnect);
// Listener für die einzelnen Einträge tBtnPort[i].setMinWidth(50.0);
mItem.get(i).setOnAction(e -> setMenuBtnText(button, mItem.get(finalI))); GridPane.setHalignment(tBtnPort[i], HPos.CENTER);
} mainGrid.add(tBtnPort[i], i + 1, 8);
} this.createPortPane(i);
chkBoxGridPane[i].setVisible(false);
/** }
* TODO: Doku // ToggleButtonGroup Listener
*/ cabelConnect.selectedToggleProperty().
private void myToggleButtons() { addListener((observable, oldValue, newValue) -> {
if (chkBoxGridPane != null) {
for (ChkBoxGridPane boxGridPane : chkBoxGridPane) { for (int j = 0; j < chkBoxGridPane.length; j++) {
anchorPane.getChildren().remove(boxGridPane);
} if (cabelConnect.getSelectedToggle() == tBtnPort[j]) {
} this.createPortPane(j);
chkBoxGridPane = new ChkBoxGridPane[10]; } else if (cabelConnect.getSelectedToggle() != tBtnPort[j]) {
if (chkBoxGridPane[j] != null) {
final ToggleGroup cabelConnect = new ToggleGroup(); chkBoxGridPane[j].setVisible(false);
tBtnPort = new ToggleButton[chkBoxGridPane.length]; }
}
for (int i = 0; i < chkBoxGridPane.length; i++) { }
tBtnPort[i] = new ToggleButton(this.codierer.fetchSteckverbindungen()[i][0] + "" + this.codierer.fetchSteckverbindungen()[i][1]); });
tBtnPort[i].setToggleGroup(cabelConnect); }
tBtnPort[i].setMinWidth(50.0);
GridPane.setHalignment(tBtnPort[i], HPos.CENTER); /**
mainGrid.add(tBtnPort[i], i + 1, 8); * Erstellt ein GridPane mit CheckBoxen an der Position des übergebenen port
this.createPortPane(i); *
chkBoxGridPane[i].setVisible(false); * @param port => entspricht der Position des gewählten ToggleButton
} */
private void createPortPane(int port) {
cabelConnect.selectedToggleProperty().
addListener((observable, oldValue, newValue) -> { if (chkBoxGridPane[port] != null) {
//TODO anchorPane.getChildren().remove(chkBoxGridPane[port]);
for (int j = 0; j < chkBoxGridPane.length; j++) { }
chkBoxGridPane[port] = new ChkBoxGridPane(
//tBtnPort[j].setText(this.codierer.fetchSteckverbindungen()[j][0] + "" + this.codierer.fetchSteckverbindungen()[j][1]); this.codierer,
port,
if (cabelConnect.getSelectedToggle() == tBtnPort[j]) { tBtnPort[port]);
this.createPortPane(j); chkBoxGridPane[port].setVisible(false);
} else if (cabelConnect.getSelectedToggle() != tBtnPort[j]) { chkBoxGridPane[port].setStyle("-fx-background-color: white; -fx-border-color: black;");
if (chkBoxGridPane[j] != null) { chkBoxGridPane[port].setPrefHeight(chkBoxGridPane[port].getCharSize() * 22);
chkBoxGridPane[j].setVisible(false); chkBoxGridPane[port].setPrefWidth(85.0);
} chkBoxGridPane[port].setPadding(new Insets(10, 10, 10, 10));
} chkBoxGridPane[port].setAlignment(Pos.CENTER);
} chkBoxGridPane[port].setLayoutX(
}); (anchorPane.getWidth() / 12) * (port + 1) -
} ((chkBoxGridPane[port].getPrefWidth() - anchorPane.getWidth() / 12) / 2));
chkBoxGridPane[port].setLayoutY(
private void createPortPane(int port) { mainGrid.getLayoutY() + ((anchorPane.getHeight() -
mainGrid.getLayoutY()) / 10 * 9) - chkBoxGridPane[port].getPrefHeight() - 15);
if (chkBoxGridPane[port] != null) {
anchorPane.getChildren().remove(chkBoxGridPane[port]); anchorPane.getChildren().add(chkBoxGridPane[port]);
} chkBoxGridPane[port].setVisible(true);
chkBoxGridPane[port] = new ChkBoxGridPane( }
this.codierer,
port, /**
tBtnPort[port]); * Wird ausgelöst wenn der gedrückte Button losgelassen wird.
chkBoxGridPane[port].setVisible(false); * Setzt die Hintergrundfarbe des Kreises mit dem chiffrierten Buchstaben auf grau,
chkBoxGridPane[port].setStyle("-fx-background-color: white; -fx-border-color: black;"); * durch Aufruf der Methode leuchten.
chkBoxGridPane[port].setPrefHeight(chkBoxGridPane[port].getCharSize() * 22); *
chkBoxGridPane[port].setPrefWidth(85.0); * @param e => übergibt den zuletzt losgelassenen Button
chkBoxGridPane[port].setPadding(new Insets(10, 10, 10, 10)); */
chkBoxGridPane[port].setAlignment(Pos.CENTER); @FXML
chkBoxGridPane[port].setLayoutX( void tasteRauf(MouseEvent e) {
(anchorPane.getWidth() / 12) * (port + 1) - for(Button btn : btnArray) {
((chkBoxGridPane[port].getPrefWidth() - anchorPane.getWidth() / 12) / 2)); if (e.getSource() == btn) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
chkBoxGridPane[port].setLayoutY( }
mainGrid.getLayoutY() + ((anchorPane.getHeight() - }
mainGrid.getLayoutY()) / 10 * 9) - chkBoxGridPane[port].getPrefHeight() - 15); //endregion
anchorPane.getChildren().add(chkBoxGridPane[port]); //region EventHandler/Listener
chkBoxGridPane[port].setVisible(true);
} /**
* Wird ausgelöst sobald eine Taste gedrückt wird (beim drücken der Taste)
/** * Auswertung welche Buchstaben-Taste gedrückt ist.
* Wird ausgelöst wenn der gedrückte Button losgelassen wird. * Übergabe des entspechenden Buchstaben als Parameter der Methode setText welche den chiffrierten Buchstaben
* Setzt die Hintergrundfarbe des Kreises mit dem chiffrierten Buchstaben auf grau, * in der Klassen-Variablen chiffrierterBuchstabe ablegt.
* durch Aufruf der Methode leuchten. * Setzt die Hintergrundfarbe des Kreises mit dem chiffrierten Buchstaben auf gelb
* *
* @param e => übergibt den zuletzt losgelassenen Button * @param e => übergibt den momentan gedrückten Buttons
*/ */
@FXML @FXML
void tasteRauf(MouseEvent e) { void tasteRunter(MouseEvent e) {
if (e.getSource() == btnA) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS); for(Button btn : btnArray) {
if (e.getSource() == btnB) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS); if (e.getSource() == btn) {
if (e.getSource() == btnC) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS); if (setText(btn)) {
if (e.getSource() == btnD) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS); leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
if (e.getSource() == btnE) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnF) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnG) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnH) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnI) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnJ) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnK) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnL) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnM) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnN) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnO) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnP) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnQ) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnR) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnS) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnT) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnU) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnV) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnW) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnX) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnY) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
if (e.getSource() == btnZ) leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AUS);
}
//endregion
//region EventHandler/Listener
/**
* Wird ausgelöst sobald eine Taste gedrückt wird (beim drücken der Taste)
* Auswertung welche Buchstaben-Taste gedrückt ist.
* Übergabe des entspechenden Buchstaben als Parameter der Methode setText welche den chiffrierten Buchstaben
* in der Klassen-Variablen chiffrierterBuchstabe ablegt.
* Setzt die Hintergrundfarbe des Kreises mit dem chiffrierten Buchstaben auf gelb
*
* @param e => übergibt den momentan gedrückten Buttons
*/
@FXML
void tasteRunter(MouseEvent e) {
if (e.getSource() == btnA) {
setText(btnA);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnB) {
setText(btnB);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnC) {
setText(btnC);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnD) {
setText(btnD);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnE) {
setText(btnE);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnF) {
setText(btnF);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnG) {
setText(btnG);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnH) {
setText(btnH);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnI) {
setText(btnI);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnJ) {
setText(btnJ);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnK) {
setText(btnK);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnL) {
setText(btnL);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnM) {
setText(btnM);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnN) {
setText(btnN);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnO) {
setText(btnO);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnP) {
setText(btnP);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnQ) {
setText(btnQ);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnR) {
setText(btnR);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnS) {
setText(btnS);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnT) {
setText(btnT);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnU) {
setText(btnU);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnV) {
setText(btnV);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnW) {
setText(btnW);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnX) {
setText(btnX);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnY) {
setText(btnY);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
if (e.getSource() == btnZ) {
setText(btnZ);
leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
}
}
/**
* Auswertung welcher Button (senden, empfangen oder löschen) gedrückt wurde.
* Funktionsaufruf entsprechend des gedrückten Button
*
* @param e => ActionEvent des auslösenden Button
*/
@FXML
private void gedrueckteTaste(ActionEvent e) {
if (e.getSource() == btnSenden) {
if (tfCodiert.getText().equals("")) {
new Fehler().showErrorDialog("warning", "Haben Sie heute nichts zu sagen?",
"Nutzung von militärischer Infrastruktur ohne Grund ist verboten.");
} else {
sendeFunkspruch();
}
}
if (e.getSource() == btnEmpfangen) empfangeFunkspruch();
if (e.getSource() == btnDelete) loeschen();
if (e.getSource() == btnReset) {
codierer.resetHardware();
this.resetDisplay = true;
this.lblSpruchschluessel.setText("");
this.setzeTagesSchluessel();
}
}
/**
* Setzt die Hintergrundfarbe des Kreises (chiffrierter Buchstabe) auf gelb bzw. auf grau.
*
* @param leuchte => gibt an welcher Kreis (chiffrierter Buchstabe) den Hintergrund ändern soll
* @param shiningLetter => "AN" -> setzt Hintergrundfarbe des Kreises (chiffrierter Buchstabe) auf gelb
* "AUS" -> setzt Hintergrundfarbe des Kreises (chiffrierter Buchstabe) auf grau
*/
private void leuchten(Circle leuchte, BUCHSTABE_LEUCHTET shiningLetter) {
if (shiningLetter == BUCHSTABE_LEUCHTET.AN) leuchte.setStyle("-fx-fill: #FFA500");
else if (shiningLetter == BUCHSTABE_LEUCHTET.AUS) {
leuchte.setStyle("-fx-background-color: grey");
leuchte.setStyle("-fx-border-color: #000000");
}
}
//endregion
//region Methoden
/**
* Gibt den Buchstabenkreis entsprechend des chiffrierten Buchstabens zurück
*
* @param chiffLetter => chiffrierter Buchstabe
* @return => Kreis des chiffrierten Buchstabens (der leuchten soll)
*/
private Circle chiffCircle(char chiffLetter) {
switch (chiffLetter) {
case 'A':
return circA;
case 'B':
return circB;
case 'C':
return circC;
case 'D':
return circD;
case 'E':
return circE;
case 'F':
return circF;
case 'G':
return circG;
case 'H':
return circH;
case 'I':
return circI;
case 'J':
return circJ;
case 'K':
return circK;
case 'L':
return circL;
case 'M':
return circM;
case 'N':
return circN;
case 'O':
return circO;
case 'P':
return circP;
case 'Q':
return circQ;
case 'R':
return circR;
case 'S':
return circS;
case 'T':
return circT;
case 'U':
return circU;
case 'V':
return circV;
case 'W':
return circW;
case 'X':
return circX;
case 'Y':
return circY;
case 'Z':
return circZ;
}
return null;
}
/**
* Methode zum setzen des menuButton Textes auf das ausgewählte MenuItem
*
* @param mBtn : MenuButton der Walze
* @param mItm : MenuItem
*/
private void setMenuBtnText(MenuButton mBtn, MenuItem mItm) {
if (mBtn.getId().equals(mBtnStartPos1.getId())) {
setzePosition(1, mItm.getText().charAt(0));
this.codierer.setzeWalzenPosition(0, mItm.getText().charAt(0));
}
if (mBtn.getId().equals(mBtnStartPos2.getId())) {
setzePosition(2, mItm.getText().charAt(0));
this.codierer.setzeWalzenPosition(1, mItm.getText().charAt(0));
}
if (mBtn.getId().equals(mBtnStartPos3.getId())) {
setzePosition(3, mItm.getText().charAt(0));
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())) {
this.codierer.setzeWalzeNr(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");
}
}
if (mBtn.getId().equals(mBtnWalzPos2.getId())) {
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));
} 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");
}
}
if (mBtn.getId().equals(mBtnWalzPos3.getId())) {
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));
} 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");
}
}
if (mBtn.getId().equals(mBtnNotchPos1.getId())) {
setzeRing(1, Integer.parseInt(mItm.getText()) - 1);
this.codierer.setzeRing(0, Integer.parseInt(mItm.getText()) - 1);
}
if (mBtn.getId().equals(mBtnNotchPos2.getId())) {
setzeRing(2, Integer.parseInt(mItm.getText()) - 1);
this.codierer.setzeRing(1, Integer.parseInt(mItm.getText()) - 1);
}
if (mBtn.getId().equals(mBtnNotchPos3.getId())) {
setzeRing(3, Integer.parseInt(mItm.getText()) - 1);
this.codierer.setzeRing(2, Integer.parseInt(mItm.getText()) - 1);
}
tfCodiert.setText("");
tfKlartext.setText("");
}
/**
* 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
*/
private void loeschen() {
if (textEingabe.length() == 0) {
tfKlartext.setText("");
tfCodiert.setText("");
} else {
textEingabe = textEingabe.substring(0, textEingabe.length() - 1);
textCodiert = textCodiert.substring(0, textCodiert.length() - 1);
tfKlartext.setText(textEingabe);
tfCodiert.setText(textCodiert);
codierer.letztesZeichenLoeschen();
mBtnStartPos1.setText(String.valueOf(this.codierer.fetchWalzen()[0]));
mBtnStartPos2.setText(String.valueOf(this.codierer.fetchWalzen()[1]));
mBtnStartPos3.setText(String.valueOf(this.codierer.fetchWalzen()[2]));
}
}
/**
* Holt Nachricht von Klasse Codierer und setzt den chiffrierten Text in das Textfeld tfCodiert,
* sowie den Klartext in das Textfeld tfKlartext. Setzt den Spruchschlüssel
*/
private void empfangeFunkspruch() {
progressDialogue("rx");
try {
if (this.empfangeneNachricht[2] != null && this.empfangeneNachricht[1] != null) {
setzeTagesSchluessel();
tfKlartext.setText(this.empfangeneNachricht[2]);
tfCodiert.setText(this.empfangeneNachricht[1]);
resetDisplay = true;
// Spruchschluessel in das Feld lblSpruchschluessel schreiben
lblSpruchschluessel.setText(codierer.empfangenerSpruchschluessel(this.empfangeneNachricht[2]));
}
} catch (NullPointerException ignored) {
new Fehler().showErrorDialog(
"warning",
"Keiner schreibt dir...",
"Es liegen keine neuen Nachrichten im Funkraum für Sie vor.");
}
}
/**
* Senden der Nachricht mit Hilfe der Klasse Codierer
* Löscht die Textfelder tfKlartext und tfCodiert
*/
private void sendeFunkspruch() {
this.tfKlartext.setText("");
this.tfCodiert.setText("");
progressDialogue("tx");
}
/**
* TODO
*
* @param strRxTx : String : RX oder TX
*/
private void progressDialogue(String strRxTx) {
Task copyWorker = createWorker(strRxTx);
ProgressIndicator pi = new ProgressIndicator();
pi.setProgress(-1);
ProgressDialog dialog = new ProgressDialog(copyWorker);
dialog.initStyle(StageStyle.TRANSPARENT);
dialog.setTitle("Kommunikation zum Funkraum");
if (strRxTx.equals("rx")) {
dialog.setContentText("Empfange Nachricht");
} else if (strRxTx.equals("tx")) {
dialog.setContentText("Sende Nachricht");
}
dialog.setHeaderText(null);
dialog.setGraphic(pi);
dialog.initStyle(StageStyle.UTILITY);
new Thread(copyWorker).start();
dialog.showAndWait();
}
/**
* TODO
*
* @param strRxTx : String : RX oder TX
* @return boolean
*/
private Task createWorker(String strRxTx) {
return new Task() {
@Override
protected Object call() {
if (strRxTx.equals("rx")) {
empfangeneNachricht = codierer.empfangeNachricht();
} else if (strRxTx.equals("tx")) {
try {
codierer.sendeNachricht();
} catch (IOException e) {
e.printStackTrace();
}
} }
return true;
}
};
}
/**
* Schreibt Buchstaben des gedrückten Button in Textfeld tfKlartext.
* Übergabe des Buchstaben vom gedrückten Button an die Klasse Codierer
* Ablegen des chiffrierten Buchstaben in der char Variable chiffrierterBuchstabe
* Hinzufügen des chiffrierten Buchstaben in Textfeld tfCodiert
* Aktualisierung der Walzenstellung
*
* @param pressedButton : gedrückter Knopf
*/
private void setText(Button pressedButton) {
if (textEingabe.length() < 250) {
if (this.resetDisplay) {
this.tfCodiert.setText("");
this.tfKlartext.setText("");
this.lblSpruchschluessel.setText("");
this.resetDisplay = false;
this.codierer.resetHardware();
textCodiert = "";
textEingabe = "";
// Spruchschlüssel generieren und codieren
this.codierer.generateSpruchschluessel();
// Spruchschluessel in das Feld lblSpruchschluessel schreiben
lblSpruchschluessel.setText(this.codierer.getSpruchschluessel());
} }
textEingabe += pressedButton.getText();
chiffrierterBuchstabe = codierer.codiere(pressedButton.getText().charAt(0), true);
textCodiert += chiffrierterBuchstabe;
tfKlartext.setText(textEingabe);
tfCodiert.setText(textCodiert);
// Position der Walzen aktuallisieren
mBtnStartPos1.setText(String.valueOf(this.codierer.fetchWalzen()[0]));
mBtnStartPos2.setText(String.valueOf(this.codierer.fetchWalzen()[1]));
mBtnStartPos3.setText(String.valueOf(this.codierer.fetchWalzen()[2]));
} }
} }
/** /**
* Konvertiert eine rämische Zahl in eine arabische Zahl * Auswertung welcher Button (senden, empfangen oder löschen) gedrückt wurde.
* * Funktionsaufruf entsprechend des gedrückten Button
* @param nummer : String : Römische Zahl *
* @return int : arabische Zahl * @param e => ActionEvent des auslösenden Button
*/ */
private int convertRoemischToZahl(String nummer) { @FXML
int result = 0; private void gedrueckteTaste(ActionEvent e) {
if (e.getSource() == btnSenden) {
switch (nummer) { if (tfCodiert.getText().equals("")) {
case "I": new Fehler().showErrorDialog("warning", "Haben Sie heute nichts zu sagen?",
result = 0; "Nutzung von militärischer Infrastruktur ohne Grund ist verboten.");
break; } else {
case "II": sendeFunkspruch();
result = 1; }
break; }
case "III": if (e.getSource() == btnEmpfangen) empfangeFunkspruch();
result = 2; if (e.getSource() == btnDelete) loeschen();
break; if (e.getSource() == btnReset) {
case "IV": codierer.resetHardware();
result = 3; this.resetDisplay = true;
break; this.lblSpruchschluessel.setText("");
case "V": this.setzeTagesSchluessel();
result = 4; }
break; }
default:
break; /**
} * Setzt die Hintergrundfarbe des Kreises (chiffrierter Buchstabe) auf gelb bzw. auf grau.
return result; *
} * @param leuchte => gibt an welcher Kreis (chiffrierter Buchstabe) den Hintergrund ändern soll
* @param shiningLetter => "AN" -> setzt Hintergrundfarbe des Kreises (chiffrierter Buchstabe) auf gelb
/** * "AUS" -> setzt Hintergrundfarbe des Kreises (chiffrierter Buchstabe) auf grau
* Konvertiert eine arabische Zahl in eine rämische Zahl */
* private void leuchten(Circle leuchte, BUCHSTABE_LEUCHTET shiningLetter) {
* @param nummer : int : arabische Zahl if (shiningLetter == BUCHSTABE_LEUCHTET.AN) leuchte.setStyle("-fx-fill: #FFA500");
* @return String : römische Zahl else if (shiningLetter == BUCHSTABE_LEUCHTET.AUS) {
*/ leuchte.setStyle("-fx-background-color: grey");
private String convertZahlToRoemisch(int nummer) { leuchte.setStyle("-fx-border-color: #000000");
String result = ""; }
}
switch (nummer) { //endregion
case 0:
result = "I"; //region Methoden
break;
case 1: /**
result = "II"; * Gibt den Buchstabenkreis entsprechend des chiffrierten Buchstabens zurück
break; *
case 2: * @param chiffLetter => chiffrierter Buchstabe
result = "III"; * @return => Kreis des chiffrierten Buchstabens (der leuchten soll)
break; */
case 3: private Circle chiffCircle(char chiffLetter) {
result = "IV"; switch (chiffLetter) {
break; case 'A':
case 4: return circA;
result = "V"; case 'B':
break; return circB;
default: case 'C':
break; return circC;
} case 'D':
return result; return circD;
} case 'E':
return circE;
/** case 'F':
* Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze return circF;
* ->d.h. welche Walze sitzt auf welcher Position case 'G':
* return circG;
* @param walzeRoemischNr => gibt die Walzennummer an case 'H':
* @param walzenPosition => gibt die Position der Walze return circH;
*/ case 'I':
private void setzeWalze(int walzenPosition, String walzeRoemischNr) { return circI;
switch (walzenPosition) { case 'J':
case 1: return circJ;
mBtnWalzPos1.setText(walzenNr[convertRoemischToZahl(walzeRoemischNr)]); case 'K':
break; return circK;
case 2: case 'L':
mBtnWalzPos2.setText(walzenNr[convertRoemischToZahl(walzeRoemischNr)]); return circL;
break; case 'M':
case 3: return circM;
mBtnWalzPos3.setText(walzenNr[convertRoemischToZahl(walzeRoemischNr)]); case 'N':
break; return circN;
default: case 'O':
break; return circO;
} case 'P':
} return circP;
case 'Q':
/** return circQ;
* Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze case 'R':
* -> d.h. welche Walze sitzt auf welcher Position return circR;
* case 'S':
* @param walzenPosition => gibt die Position der Walze return circS;
* @param walzeNr => gibt die Walzennummer an case 'T':
*/ return circT;
private void setzeWalze(int walzenPosition, int walzeNr) { case 'U':
switch (walzenPosition) { return circU;
case 1: case 'V':
mBtnWalzPos1.setText(walzenNr[walzeNr - 1]); return circV;
//codierer.setWalze(walzeNr, walzenPosition) case 'W':
break; return circW;
case 2: case 'X':
mBtnWalzPos2.setText(walzenNr[walzeNr - 1]); return circX;
break; case 'Y':
case 3: return circY;
mBtnWalzPos3.setText(walzenNr[walzeNr - 1]); case 'Z':
break; return circZ;
default: }
break; return null;
} }
}
/**
/** * Methode zum setzen des menuButton Textes auf das ausgewählte MenuItem
* Setzt den Notch (position)=> die Mitnahmeposition der Walze (walze) fest *
* Mitnahmeposition meint => die nächste Walze wird bei erreichen dieser Position (notch) * @param mBtn : MenuButton der Walze
* um eine Stelle versetzt * @param mItm : MenuItem
* */
* @param ringStellung => gibt die walze an private void setMenuBtnText(MenuButton mBtn, MenuItem mItm) {
* @param walzenPosition => gibt den notch der Walze (walze) an if (mBtn.getId().equals(mBtnStartPos1.getId())) {
*/ setzePosition(1, mItm.getText().charAt(0));
private void setzeRing(int walzenPosition, int ringStellung) { this.codierer.setzeWalzenPosition(0, mItm.getText().charAt(0));
switch (walzenPosition) { }
case 1: if (mBtn.getId().equals(mBtnStartPos2.getId())) {
mBtnNotchPos1.setText(ringNr[ringStellung]); setzePosition(2, mItm.getText().charAt(0));
break; this.codierer.setzeWalzenPosition(1, mItm.getText().charAt(0));
case 2: }
mBtnNotchPos2.setText(ringNr[ringStellung]); if (mBtn.getId().equals(mBtnStartPos3.getId())) {
break; setzePosition(3, mItm.getText().charAt(0));
case 3: this.codierer.setzeWalzenPosition(2, mItm.getText().charAt(0));
mBtnNotchPos3.setText(ringNr[ringStellung]); }
break; if (mBtn.getId().equals(mBtnWalzPos1.getId())) {
default: setzeWalze(1, mItm.getText());
break; if (!mBtnWalzPos1.getText().equals(mBtnWalzPos2.getText()) &&
} !mBtnWalzPos1.getText().equals(mBtnWalzPos3.getText())) {
} this.codierer.setzeWalzeNr(0,
convertRoemischToZahl(mItm.getText()) + 1,
/** mBtnNotchPos1.getText().charAt(0));
* Setzt die Startposition/ aktuelle Position der Walze } else {
* setzeWalze(1, convertZahlToRoemisch(this.codierer.fetchWalzenNr(0)));
* @param walze => gibt die walze an new Fehler().showErrorDialog("error",
* @param buchstabe gibt den Startwert bzw die aktuelle Position der Walze (walze) an "Walze nicht gefunden",
*/ "Es scheint so das wir von jeder Walze nur eine da haben");
private void setzePosition(int walze, char buchstabe) { }
switch (walze) { }
case 1: if (mBtn.getId().equals(mBtnWalzPos2.getId())) {
mBtnStartPos1.setText(String.valueOf(buchstabe)); setzeWalze(2, mItm.getText());
break; if (!mBtnWalzPos1.getText().equals(mBtnWalzPos2.getText()) &&
case 2: !mBtnWalzPos2.getText().equals(mBtnWalzPos3.getText())) {
mBtnStartPos2.setText(buchstabe + ""); this.codierer.setzeWalzeNr(1,
break; convertRoemischToZahl(mItm.getText()) + 1,
case 3: mBtnNotchPos2.getText().charAt(0));
mBtnStartPos3.setText(buchstabe + ""); } else {
break; setzeWalze(2, convertZahlToRoemisch(this.codierer.fetchWalzenNr(1)));
default: new Fehler().showErrorDialog("error",
break; "Walze nicht gefunden",
} "Es scheint so das wir von jeder Walze nur eine da haben");
} }
}
/** if (mBtn.getId().equals(mBtnWalzPos3.getId())) {
* Setzt den aktuellen TagesSchluessel und zeigt diesen in der GUI an setzeWalze(3, mItm.getText());
*/ if (!mBtnWalzPos1.getText().equals(mBtnWalzPos3.getText()) &&
private void setzeTagesSchluessel() { !mBtnWalzPos2.getText().equals(mBtnWalzPos3.getText())) {
this.codierer.setzeWalzeNr(2,
// Umsprungpunkte anzeigen convertRoemischToZahl(mItm.getText()) + 1,
mBtnNotchPos1.setText(String.valueOf(codierer.fetchRingstellung()[0])); mBtnNotchPos3.getText().charAt(0));
mBtnNotchPos2.setText(String.valueOf(codierer.fetchRingstellung()[1])); } else {
mBtnNotchPos3.setText(String.valueOf(codierer.fetchRingstellung()[2])); setzeWalze(3, convertZahlToRoemisch(this.codierer.fetchWalzenNr(2)));
new Fehler().showErrorDialog("error",
// Walzennummern anzeigen "Walze nicht gefunden",
setzeWalze(1, codierer.fetchWalzenNr()[0]); "Es scheint so das wir von jeder Walze nur eine da haben");
setzeWalze(2, codierer.fetchWalzenNr()[1]); }
setzeWalze(3, codierer.fetchWalzenNr()[2]); }
if (mBtn.getId().equals(mBtnNotchPos1.getId())) {
// Position der Walzen anzeigen setzeRing(1, Integer.parseInt(mItm.getText()) - 1);
mBtnStartPos1.setText(String.valueOf(codierer.fetchWalzen()[0])); this.codierer.setzeRing(0, Integer.parseInt(mItm.getText()) - 1);
mBtnStartPos2.setText(String.valueOf(codierer.fetchWalzen()[1])); }
mBtnStartPos3.setText(String.valueOf(codierer.fetchWalzen()[2])); if (mBtn.getId().equals(mBtnNotchPos2.getId())) {
setzeRing(2, Integer.parseInt(mItm.getText()) - 1);
// Steckbrett Felder setzen this.codierer.setzeRing(1, Integer.parseInt(mItm.getText()) - 1);
//setzeSteckverbindungen(); }
if (mBtn.getId().equals(mBtnNotchPos3.getId())) {
myToggleButtons(); setzeRing(3, Integer.parseInt(mItm.getText()) - 1);
this.codierer.setzeRing(2, Integer.parseInt(mItm.getText()) - 1);
// Setzt das Steckbrett }
//generateSteckbrett(); tfCodiert.setText("");
tfKlartext.setText("");
// Felder zurück setzen }
this.textCodiert = "";
this.textEingabe = ""; /**
this.tfKlartext.setText(""); * Die Löschen Funktion löscht das letzte Zeichen im Klartext sowie im Codiert Feld,
this.tfCodiert.setText(""); * der Codierer wird aufgerufen um ebenfalls das letzte Zeichen zu löschen
} */
private void loeschen() {
/** if (textEingabe.length() == 0) {
* TODO: Doku tfKlartext.setText("");
* tfCodiert.setText("");
* @param kenngruppe : String : Die Kenngruppe die gesetzt werden soll } else {
*/ textEingabe = textEingabe.substring(0, textEingabe.length() - 1);
void setKenngruppe(String kenngruppe) { textCodiert = textCodiert.substring(0, textCodiert.length() - 1);
tfKlartext.setText(textEingabe);
// Initialisieren des Codierers und setzen der Kenngruppe tfCodiert.setText(textCodiert);
codierer = new Codierer(kenngruppe.toUpperCase()); codierer.letztesZeichenLoeschen();
mBtnStartPos1.setText(String.valueOf(this.codierer.fetchWalzen()[0]));
this.codierer.resetHardware(); mBtnStartPos2.setText(String.valueOf(this.codierer.fetchWalzen()[1]));
mBtnStartPos3.setText(String.valueOf(this.codierer.fetchWalzen()[2]));
//Setzt die Kenngruppe in der GUI }
lblKenngruppe.setText("Kenngruppe: " + this.codierer.getKenngruppe()); }
// Beim nächsten Tastendruck erstmal das Display löschen damit falschen Nachrichten geschickt werden. /**
resetDisplay = true; * Holt Nachricht von Klasse Codierer und setzt den chiffrierten Text in das Textfeld tfCodiert,
* sowie den Klartext in das Textfeld tfKlartext. Setzt den Spruchschlüssel
// Einstellungen aus dem Logbuch auslesen und setzen */
setzeTagesSchluessel(); private void empfangeFunkspruch() {
//setzeSteckverbindungen(); progressDialogue("rx");
}
try {
private enum BUCHSTABE_LEUCHTET {AN, AUS} if (this.empfangeneNachricht[2] != null && this.empfangeneNachricht[1] != null) {
//endregion setzeTagesSchluessel();
tfKlartext.setText(this.empfangeneNachricht[2]);
tfCodiert.setText(this.empfangeneNachricht[1]);
resetDisplay = true;
// Spruchschluessel in das Feld lblSpruchschluessel schreiben
lblSpruchschluessel.setText(codierer.empfangenerSpruchschluessel(this.empfangeneNachricht[2]));
}
} catch (NullPointerException ignored) {
new Fehler().showErrorDialog(
"warning",
"Keiner schreibt dir...",
"Es liegen keine neuen Nachrichten im Funkraum für Sie vor.");
}
}
/**
* Senden der Nachricht mit Hilfe der Klasse Codierer
* Löscht die Textfelder tfKlartext und tfCodiert
*/
private void sendeFunkspruch() {
this.tfKlartext.setText("");
this.tfCodiert.setText("");
progressDialogue("tx");
}
/**
* Methode die das ProgressDialog Fenster erstellt und verwaltet
*
* @param strRxTx : String : RX => empfangen
* TX => senden
*/
private void progressDialogue(String strRxTx) {
Task copyWorker = createWorker(strRxTx);
ProgressIndicator pi = new ProgressIndicator();
pi.setProgress(-1);
ProgressDialog dialog = new ProgressDialog(copyWorker);
dialog.initStyle(StageStyle.TRANSPARENT);
dialog.setTitle("Kommunikation zum Funkraum");
if (strRxTx.equals("rx")) {
dialog.setContentText("Empfange Nachricht");
} else if (strRxTx.equals("tx")) {
dialog.setContentText("Sende Nachricht");
}
dialog.setHeaderText(null);
dialog.setGraphic(pi);
dialog.initStyle(StageStyle.UTILITY);
new Thread(copyWorker).start();
dialog.showAndWait();
}
/**
* Thread Worker für Nachricht senden / empfangen
*
* @param strRxTx : String : RX => empfangen
* TX => senden
* @return boolean
*/
private Task createWorker(String strRxTx) {
return new Task() {
@Override
protected Object call() {
if (strRxTx.equals("rx")) {
empfangeneNachricht = codierer.empfangeNachricht();
} else if (strRxTx.equals("tx")) {
try {
codierer.sendeNachricht();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
};
}
/**
* Schreibt Buchstaben des gedrückten Button in Textfeld tfKlartext.
* Übergabe des Buchstaben vom gedrückten Button an die Klasse Codierer
* Ablegen des chiffrierten Buchstaben in der char Variable chiffrierterBuchstabe
* Hinzufügen des chiffrierten Buchstaben in Textfeld tfCodiert
* Aktualisierung der Walzenstellung
*
* @param pressedButton : gedrückter Knopf
*/
private boolean setText(Button pressedButton) {
if (textEingabe.length() < 250) {
if (this.resetDisplay) {
this.tfCodiert.setText("");
this.tfKlartext.setText("");
this.lblSpruchschluessel.setText("");
this.resetDisplay = false;
this.codierer.resetHardware();
textCodiert = "";
textEingabe = "";
// Spruchschlüssel generieren und codieren
this.codierer.generateSpruchschluessel();
// Spruchschluessel in das Feld lblSpruchschluessel schreiben
lblSpruchschluessel.setText(this.codierer.getSpruchschluessel());
}
textEingabe += pressedButton.getText();
chiffrierterBuchstabe = codierer.codiere(pressedButton.getText().charAt(0), true);
textCodiert += chiffrierterBuchstabe;
tfKlartext.setText(textEingabe);
tfKlartext.appendText("");
tfCodiert.setText(textCodiert);
tfKlartext.appendText("");
// Position der Walzen aktuallisieren
mBtnStartPos1.setText(String.valueOf(this.codierer.fetchWalzen()[0]));
mBtnStartPos2.setText(String.valueOf(this.codierer.fetchWalzen()[1]));
mBtnStartPos3.setText(String.valueOf(this.codierer.fetchWalzen()[2]));
return true;
} else {
new Fehler().showErrorDialog("error", "Wir wussten das du das testen wirst", "250 Zeichen sind " +
"selbst für die Wehrmacht zu viel!");
return false;
}
}
/**
* Konvertiert eine rämische Zahl in eine arabische Zahl
*
* @param nummer : String : Römische Zahl
* @return int : arabische Zahl
*/
private int convertRoemischToZahl(String nummer) {
int result = 0;
switch (nummer) {
case "I":
result = 0;
break;
case "II":
result = 1;
break;
case "III":
result = 2;
break;
case "IV":
result = 3;
break;
case "V":
result = 4;
break;
default:
break;
}
return result;
}
/**
* Konvertiert eine arabische Zahl in eine rämische Zahl
*
* @param nummer : int : arabische Zahl
* @return String : römische Zahl
*/
private String convertZahlToRoemisch(int nummer) {
String result = "";
switch (nummer) {
case 0:
result = "I";
break;
case 1:
result = "II";
break;
case 2:
result = "III";
break;
case 3:
result = "IV";
break;
case 4:
result = "V";
break;
default:
break;
}
return result;
}
/**
* Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze
* ->d.h. welche Walze sitzt auf welcher Position
*
* @param walzeRoemischNr => gibt die Walzennummer an
* @param walzenPosition => gibt die Position der Walze
*/
private void setzeWalze(int walzenPosition, String walzeRoemischNr) {
switch (walzenPosition) {
case 1:
mBtnWalzPos1.setText(walzenNr[convertRoemischToZahl(walzeRoemischNr)]);
break;
case 2:
mBtnWalzPos2.setText(walzenNr[convertRoemischToZahl(walzeRoemischNr)]);
break;
case 3:
mBtnWalzPos3.setText(walzenNr[convertRoemischToZahl(walzeRoemischNr)]);
break;
default:
break;
}
}
/**
* Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze
* -> d.h. welche Walze sitzt auf welcher Position
*
* @param walzenPosition => gibt die Position der Walze
* @param walzeNr => gibt die Walzennummer an
*/
private void setzeWalze(int walzenPosition, int walzeNr) {
switch (walzenPosition) {
case 1:
mBtnWalzPos1.setText(walzenNr[walzeNr - 1]);
break;
case 2:
mBtnWalzPos2.setText(walzenNr[walzeNr - 1]);
break;
case 3:
mBtnWalzPos3.setText(walzenNr[walzeNr - 1]);
break;
default:
break;
}
}
/**
* Setzt den Notch (position)=> die Mitnahmeposition der Walze (walze) fest
* Mitnahmeposition meint => die nächste Walze wird bei erreichen dieser Position (notch)
* um eine Stelle versetzt
*
* @param ringStellung => gibt die walze an
* @param walzenPosition => gibt den notch der Walze (walze) an
*/
private void setzeRing(int walzenPosition, int ringStellung) {
switch (walzenPosition) {
case 1:
mBtnNotchPos1.setText(ringNr[ringStellung]);
break;
case 2:
mBtnNotchPos2.setText(ringNr[ringStellung]);
break;
case 3:
mBtnNotchPos3.setText(ringNr[ringStellung]);
break;
default:
break;
}
}
/**
* Setzt die Startposition/ aktuelle Position der Walze
*
* @param walze => gibt die walze an
* @param buchstabe gibt den Startwert bzw die aktuelle Position der Walze (walze) an
*/
private void setzePosition(int walze, char buchstabe) {
switch (walze) {
case 1:
mBtnStartPos1.setText(String.valueOf(buchstabe));
break;
case 2:
mBtnStartPos2.setText(buchstabe + "");
break;
case 3:
mBtnStartPos3.setText(buchstabe + "");
break;
default:
break;
}
}
/**
* Setzt den aktuellen TagesSchluessel und zeigt diesen in der GUI an
*/
private void setzeTagesSchluessel() {
// Umsprungpunkte anzeigen
mBtnNotchPos1.setText(String.valueOf(codierer.fetchRingstellung()[0]));
mBtnNotchPos2.setText(String.valueOf(codierer.fetchRingstellung()[1]));
mBtnNotchPos3.setText(String.valueOf(codierer.fetchRingstellung()[2]));
// Walzennummern anzeigen
setzeWalze(1, codierer.fetchWalzenNr()[0]);
setzeWalze(2, codierer.fetchWalzenNr()[1]);
setzeWalze(3, codierer.fetchWalzenNr()[2]);
// Position der Walzen anzeigen
mBtnStartPos1.setText(String.valueOf(codierer.fetchWalzen()[0]));
mBtnStartPos2.setText(String.valueOf(codierer.fetchWalzen()[1]));
mBtnStartPos3.setText(String.valueOf(codierer.fetchWalzen()[2]));
// Steckbrett Felder setzen
myToggleButtons();
// Felder zurück setzen
this.textCodiert = "";
this.textEingabe = "";
this.tfKlartext.setText("");
this.tfCodiert.setText("");
}
/**
* Lädt die Daten aus dem Codebuch und setzt die Kenngruppe in der Gui
*
* @param kenngruppe : String : aktuelle Kenngruppe
*/
void setKenngruppe(String kenngruppe) {
// Initialisieren des Codierers und setzen der Kenngruppe
codierer = new Codierer(kenngruppe.toUpperCase());
this.codierer.resetHardware();
// Setzt die Kenngruppe in der GUI
lblKenngruppe.setText("Kenngruppe: " + this.codierer.getKenngruppe());
// Beim nächsten Tastendruck erstmal das Display löschen damit falschen Nachrichten geschickt werden.
resetDisplay = true;
// Einstellungen aus dem Logbuch auslesen und setzen
setzeTagesSchluessel();
}
private enum BUCHSTABE_LEUCHTET {AN, AUS}
//endregion
} }
...@@ -113,7 +113,7 @@ public class Walze { ...@@ -113,7 +113,7 @@ public class Walze {
* @return char : decodierter Buchstabe. * @return char : decodierter Buchstabe.
*/ */
char codiere2(char buchstabe) { char codiere2(char buchstabe) {
return this.alphabet.charAt((this.fetchWalze().indexOf(buchstabe) - this.turns + 260) % 26); return this.alphabet.charAt((this.fetchWalze().indexOf(buchstabe) - this.turns + 520) % 26);
} }
/** /**
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?> <?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?> <?import javafx.scene.control.Button?>
<?import javafx.scene.layout.*?> <?import javafx.scene.control.Label?>
<?import javafx.scene.shape.*?> <?import javafx.scene.control.MenuButton?>
<?import javafx.scene.text.*?> <?import javafx.scene.control.ProgressIndicator?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.shape.Circle?>
<?import javafx.scene.text.Font?>
<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"> <AnchorPane fx:id="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">
<GridPane layoutX="23.0" layoutY="60.0" prefHeight="158.0" prefWidth="237.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="60.0"> <GridPane layoutX="23.0" layoutY="60.0" prefHeight="158.0" prefWidth="237.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="60.0">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
...@@ -585,12 +593,6 @@ ...@@ -585,12 +593,6 @@
<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> </rowConstraints>
<TextField fx:id="tfKlartext" editable="false" prefHeight="70.0" prefWidth="293.0">
<GridPane.margin>
<Insets />
</GridPane.margin>
</TextField>
<TextField fx:id="tfCodiert" editable="false" prefHeight="70.0" prefWidth="293.0" GridPane.rowIndex="1" />
<Button fx:id="btnSenden" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="70.0" prefWidth="195.0" text="An Funker senden" textAlignment="CENTER" GridPane.columnIndex="1"> <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> <GridPane.margin>
<Insets left="80.0" /> <Insets left="80.0" />
...@@ -601,6 +603,16 @@ ...@@ -601,6 +603,16 @@
<Insets left="80.0" /> <Insets left="80.0" />
</GridPane.margin> </GridPane.margin>
</Button> </Button>
<TextArea fx:id="tfKlartext" prefHeight="66.0" prefWidth="293.0" wrapText="true">
<GridPane.margin>
<Insets bottom="5.0" top="5.0" />
</GridPane.margin>
</TextArea>
<TextArea fx:id="tfCodiert" prefHeight="200.0" prefWidth="200.0" wrapText="true" GridPane.rowIndex="1">
<GridPane.margin>
<Insets bottom="5.0" top="5.0" />
</GridPane.margin>
</TextArea>
</GridPane> </GridPane>
<Label fx:id="lblKenngruppe" layoutX="682.0" layoutY="34.0" prefHeight="17.0" prefWidth="177.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"> <Pane layoutX="266.0" layoutY="194.0" prefHeight="200.0" prefWidth="354.0" style="-fx-background-color: white; -fx-border-color: black;" visible="false">
......