diff options
Diffstat (limited to 'src/de/fhswf/in/inf/se/projektthemenvergabe/view')
7 files changed, 641 insertions, 3 deletions
diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java index 499c04e..7562866 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java @@ -144,7 +144,7 @@ public class AnsprechpartnerListeController dialog.setHeaderText("Geben Sie der Organisation einen Namen."); dialog.setContentText("Name der Organisation:"); - dialog.initOwner(main.getPrimaryStage()); + dialog.initOwner(main.getAnsprechpartnerverwaltungsStage()); Optional<String> result = dialog.showAndWait(); if (result.isPresent() && !result.get().trim().isEmpty()) @@ -169,7 +169,7 @@ public class AnsprechpartnerListeController dialog.setHeaderText("Ändern Sie den Namen der Organisation."); dialog.setContentText("Name der Organisation:"); - dialog.initOwner(main.getPrimaryStage()); + dialog.initOwner(main.getAnsprechpartnerverwaltungsStage()); Optional<String> result = dialog.showAndWait(); if (result.isPresent() && !result.get().trim().isEmpty()) @@ -242,7 +242,7 @@ public class AnsprechpartnerListeController dialog = new AnsprechpartnerHinzufuegenController(); - dialog.initOwner(main.getPrimaryStage()); + dialog.initOwner(main.getAnsprechpartnerverwaltungsStage()); Optional<Pair<String, String>> result = dialog.showAndWait(); diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektHinzufuegen.fxml b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektHinzufuegen.fxml new file mode 100644 index 0000000..b321378 --- /dev/null +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektHinzufuegen.fxml @@ -0,0 +1,145 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.text.*?> +<?import javafx.geometry.*?> +<?import javafx.scene.control.*?> +<?import java.lang.*?> +<?import javafx.scene.layout.*?> + +<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="650.0" prefWidth="743.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.fhswf.in.inf.se.projektthemenvergabe.view.ProjektHinzufuegenController"> + <center> + <GridPane BorderPane.alignment="CENTER"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="120.0" minHeight="10.0" prefHeight="111.0" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="144.0" minHeight="10.0" prefHeight="88.0" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="67.0" minHeight="0.0" prefHeight="43.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <Label text="Projektthema"> + <GridPane.margin> + <Insets left="10.0" /> + </GridPane.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <Label text="Skizze" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="10.0" /> + </GridPane.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <Label text="Beschreibung des Projekthintergrundes" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="10.0" /> + </GridPane.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <Label text="Beschreibung der wesentlichen Projektinhalte" GridPane.rowIndex="3"> + <GridPane.margin> + <Insets left="10.0" /> + </GridPane.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <Label text="Ansprechpartner" GridPane.rowIndex="4"> + <GridPane.margin> + <Insets left="10.0" /> + </GridPane.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <Label text="1. Student" GridPane.rowIndex="5"> + <GridPane.margin> + <Insets left="10.0" /> + </GridPane.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <Label text="2. Student" GridPane.rowIndex="6"> + <GridPane.margin> + <Insets left="10.0" /> + </GridPane.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <Label text="3. Student" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" /> + </GridPane.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <ComboBox fx:id="ansprechpartnerComboBox" prefHeight="25.0" prefWidth="500.0" GridPane.columnIndex="1" GridPane.rowIndex="4"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </ComboBox> + <ComboBox fx:id="student1ComboBox" prefHeight="25.0" prefWidth="500.0" GridPane.columnIndex="1" GridPane.rowIndex="5"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </ComboBox> + <ComboBox fx:id="student2ComboBox" prefHeight="25.0" prefWidth="500.0" GridPane.columnIndex="1" GridPane.rowIndex="6"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </ComboBox> + <ComboBox fx:id="student3ComboBox" minHeight="-Infinity" prefHeight="25.0" prefWidth="500.0" GridPane.columnIndex="1" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </ComboBox> + <TextField fx:id="projektthemaTextField" prefWidth="500.0" GridPane.columnIndex="1"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextArea fx:id="projektskizzeTextField" prefHeight="200.0" prefWidth="50.0" GridPane.columnIndex="1" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextArea> + <TextArea fx:id="projekthintergrundTextField" prefHeight="65.0" prefWidth="500.0" GridPane.columnIndex="1" GridPane.rowIndex="2"> + <GridPane.margin> + <Insets left="10.0" right="10.0" top="5.0" /> + </GridPane.margin> + </TextArea> + <TextArea fx:id="projektinhalteTextField" prefHeight="200.0" prefWidth="500.0" GridPane.columnIndex="1" GridPane.rowIndex="3"> + <GridPane.margin> + <Insets left="10.0" right="10.0" top="5.0" /> + </GridPane.margin> + </TextArea> + <Button fx:id="saveButton" disable="true" mnemonicParsing="false" onAction="#handleSave" prefHeight="25.0" prefWidth="500.0" text="Speichern" GridPane.rowIndex="8"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button mnemonicParsing="false" onAction="#handleCancel" prefHeight="25.0" prefWidth="500.0" text="Abbrechen" GridPane.columnIndex="1" GridPane.rowIndex="8"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + </children> + </GridPane> + </center> +</BorderPane> diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektHinzufuegenController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektHinzufuegenController.java new file mode 100644 index 0000000..f5a1491 --- /dev/null +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektHinzufuegenController.java @@ -0,0 +1,131 @@ +package de.fhswf.in.inf.se.projektthemenvergabe.view; + +import de.fhswf.in.inf.se.projektthemenvergabe.Main; +import de.fhswf.in.inf.se.projektthemenvergabe.model.Ansprechpartner; +import de.fhswf.in.inf.se.projektthemenvergabe.model.Projekt; +import de.fhswf.in.inf.se.projektthemenvergabe.model.Student; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.stage.Stage; + +public class ProjektHinzufuegenController +{ + @FXML + private TextField projektthemaTextField; + + @FXML + private TextArea projektskizzeTextField; + + @FXML + private TextArea projekthintergrundTextField; + + @FXML + private TextArea projektinhalteTextField; + + @FXML + private ComboBox<Ansprechpartner> ansprechpartnerComboBox; + + @FXML + private ComboBox<Student> student1ComboBox; + + @FXML + private ComboBox<Student> student2ComboBox; + + @FXML + private ComboBox<Student> student3ComboBox; + + @FXML + private Button saveButton; + + private Projekt projekt; + + private Stage projekthinzufuegenStage; + + private boolean wasAborted = true; + + public void setMain(Main main, Projekt projekt) + { + this.projekt = projekt; + + projekthinzufuegenStage = main.getProjekthinzufuegenStage(); + + ansprechpartnerComboBox.setItems(main.getAnsprechpartner()); + + student1ComboBox.setItems(main.getStudenten()); + student2ComboBox.setItems(main.getStudenten()); + student3ComboBox.setItems(main.getStudenten()); + + if (projekt != null) + { + ansprechpartnerComboBox.setDisable(true); + student1ComboBox.setDisable(true); + student2ComboBox.setDisable(true); + student3ComboBox.setDisable(true); + + projektthemaTextField.setText(projekt.getProjektthema()); + projektskizzeTextField.setText(projekt.getSkizze()); + projekthintergrundTextField + .setText(projekt.getProjektbeschreibung()); + projektinhalteTextField.setText(projekt.getProjekteinhalte()); + + ansprechpartnerComboBox.setValue(projekt.getAnsprechpartner()); + student1ComboBox.setValue(projekt.getStudents().get(0)); + student2ComboBox.setValue(projekt.getStudents().get(1)); + student3ComboBox.setValue(projekt.getStudents().get(2)); + } + + // It's art + saveButton.disableProperty().bind(projektthemaTextField.textProperty() + .isEmpty() + .or(projektskizzeTextField.textProperty().isEmpty() + .or(projekthintergrundTextField.textProperty().isEmpty() + .or(projektinhalteTextField.textProperty().isEmpty() + .or(ansprechpartnerComboBox.valueProperty() + .isNull() + .or(student1ComboBox.valueProperty() + .isNull() + .or(student2ComboBox.valueProperty() + .isNull() + .or(student3ComboBox + .valueProperty() + .isNull())))))))); + } + + public Projekt getProjekt() + { + if (wasAborted) + { + return null; + } + return projekt; + } + + @FXML + private void handleSave() + { + if (projekt == null) + { + projekt = new Projekt(student1ComboBox.getValue(), + student2ComboBox.getValue(), student3ComboBox.getValue(), + ansprechpartnerComboBox.getValue()); + } + + projekt.setProjektthema(projektthemaTextField.getText().trim()); + projekt.setSkizze(projektskizzeTextField.getText().trim()); + projekt.setProjektbeschreibung( + projekthintergrundTextField.getText().trim()); + projekt.setProjekteinhalte(projektinhalteTextField.getText().trim()); + + wasAborted = false; + projekthinzufuegenStage.close(); + } + + @FXML + private void handleCancel() + { + projekthinzufuegenStage.close(); + } +} diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/Projektthemenverwaltung.fxml b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/Projektthemenverwaltung.fxml new file mode 100644 index 0000000..00be218 --- /dev/null +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/Projektthemenverwaltung.fxml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.*?> +<?import javafx.scene.control.*?> +<?import java.lang.*?> +<?import javafx.scene.layout.*?> +<?import javafx.scene.control.Label?> + +<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="543.0" prefWidth="1089.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.fhswf.in.inf.se.projektthemenvergabe.view.ProjektthemenverwaltungsController"> + <center> + <VBox prefHeight="541.0" prefWidth="1089.0" BorderPane.alignment="CENTER"> + <children> + <TableView fx:id="projektTableView" editable="true" prefHeight="506.0" prefWidth="1089.0"> + <columns> + <TableColumn fx:id="projektThemaTableColumn" prefWidth="244.0" text="Projektthema" /> + <TableColumn fx:id="ansprechpatnerTableColumn" prefWidth="118.0" text="Ansprechpartner" /> + <TableColumn prefWidth="570.0" text="Student"> + <columns> + <TableColumn fx:id="student1TableColumn" prefWidth="75.0" text="1" /> + <TableColumn fx:id="student2TableColumn" prefWidth="75.0" text="2" /> + <TableColumn fx:id="student3TableColumn" prefWidth="75.0" text="3" /> + </columns> + </TableColumn> + <TableColumn fx:id="statusTableColumn" prefWidth="237.0" text="Status" /> + </columns> + <columnResizePolicy> + <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> + </columnResizePolicy> + <VBox.margin> + <Insets right="10.0" top="2.0" /> + </VBox.margin> + <placeholder> + <Label text="Keine Projekte angelegt." /> + </placeholder> + </TableView> + <HBox prefHeight="67.0" prefWidth="615.0"> + <children> + <Button maxWidth="100.0" minWidth="100.0" mnemonicParsing="false" onAction="#handleAddProjekt" text="Anlegen"> + <HBox.margin> + <Insets right="5.0" /> + </HBox.margin> + </Button> + <Button fx:id="editProjektButton" disable="true" maxWidth="200.0" minWidth="100.0" mnemonicParsing="false" onAction="#handleEditProjekt" text="Bearbeiten"> + <HBox.margin> + <Insets right="5.0" /> + </HBox.margin> + </Button> + <Button fx:id="deleteProjektButton" disable="true" minWidth="100.0" mnemonicParsing="false" onAction="#handleDeleteProjekt" text="Löschen" /> + <Separator prefHeight="0.0" prefWidth="373.0" visible="false" /> + <Button maxWidth="200.0" minWidth="200.0" mnemonicParsing="false" onAction="#handleStudentenverwaltung" text="Studentenverwaltung"> + <HBox.margin> + <Insets right="5.0" /> + </HBox.margin> + </Button> + <Button minWidth="200.0" mnemonicParsing="false" onAction="#handleAnsprechpartnerverwaltungs" prefWidth="200.0" text="Ansprechpartnerverwaltung" /> + </children> + <VBox.margin> + <Insets top="10.0" /> + </VBox.margin> + </HBox> + </children> + </VBox> + </center> + <top> + <MenuBar prefHeight="35.0" prefWidth="1089.0" BorderPane.alignment="CENTER"> + <menus> + <Menu mnemonicParsing="false" text="Datei"> + <items> + <MenuItem mnemonicParsing="false" onAction="#handleClose" text="Schließen" /> + </items> + </Menu> + <Menu mnemonicParsing="false" text="Bearbeiten"> + <items> + <MenuItem mnemonicParsing="false" onAction="#handleStudentenverwaltung" text="Studentenverwaltung" /> + <MenuItem mnemonicParsing="false" onAction="#handleAnsprechpartnerverwaltungs" text="Ansprechpartnerverwaltung" /> + </items> + </Menu> + <Menu mnemonicParsing="false" text="Ansicht ändern"> + <items> + <MenuItem mnemonicParsing="false" text="Eingereicht" /> + <MenuItem mnemonicParsing="false" text="In Überarbeitung" /> + <MenuItem mnemonicParsing="false" text="Angenommen" /> + <MenuItem mnemonicParsing="false" text="Abgelehnt" /> + </items> + </Menu> + </menus> + </MenuBar> + </top> +</BorderPane> diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektthemenverwaltungsController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektthemenverwaltungsController.java new file mode 100644 index 0000000..7d0badb --- /dev/null +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektthemenverwaltungsController.java @@ -0,0 +1,125 @@ +package de.fhswf.in.inf.se.projektthemenvergabe.view; + +import de.fhswf.in.inf.se.projektthemenvergabe.Main; +import de.fhswf.in.inf.se.projektthemenvergabe.model.Projekt; +import javafx.application.Platform; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.ComboBoxTableCell; + +public class ProjektthemenverwaltungsController +{ + @FXML + private TableView<Projekt> projektTableView; + + @FXML + private TableColumn<Projekt, String> projektThemaTableColumn; + + @FXML + private TableColumn<Projekt, String> ansprechpatnerTableColumn; + + @FXML + private TableColumn<Projekt, Integer> student1TableColumn; + + @FXML + private TableColumn<Projekt, Integer> student2TableColumn; + + @FXML + private TableColumn<Projekt, Integer> student3TableColumn; + + @FXML + private TableColumn<Projekt, String> statusTableColumn; + + @FXML + private Button editProjektButton; + + @FXML + private Button deleteProjektButton; + + private Main main; + + @FXML + private void initialize() + { + projektThemaTableColumn.setCellValueFactory( + (data) -> data.getValue().projektthemaProperty()); + ansprechpatnerTableColumn.setCellValueFactory((data) -> data.getValue() + .getAnsprechpartner().nachnameProperty()); + student1TableColumn.setCellValueFactory((data) -> data.getValue() + .getStudents().get(0).matrikelnummerProperty().asObject()); + student2TableColumn.setCellValueFactory((data) -> data.getValue() + .getStudents().get(1).matrikelnummerProperty().asObject()); + student3TableColumn.setCellValueFactory((data) -> data.getValue() + .getStudents().get(2).matrikelnummerProperty().asObject()); + statusTableColumn + .setCellValueFactory((data) -> data.getValue().statusProperty()); + statusTableColumn.setCellFactory( + ComboBoxTableCell.forTableColumn(Projekt.getStatusList())); + + editProjektButton.disableProperty().bind(projektTableView + .getSelectionModel().selectedItemProperty().isNull()); + deleteProjektButton.disableProperty().bind(projektTableView + .getSelectionModel().selectedItemProperty().isNull()); + } + + public void setMain(Main main) + { + this.main = main; + projektTableView.setItems(main.getProjekte()); + } + + @FXML + private void handleAddProjekt() + { + Projekt projekt = main.showProjekthinzufuegenStage(null); + + if (projekt != null) + { + main.getProjekte().add(projekt); + } + } + + @FXML + private void handleEditProjekt() + { + Projekt selectedItem = projektTableView.getSelectionModel() + .getSelectedItem(); + + if (selectedItem != null) + { + main.showProjekthinzufuegenStage(selectedItem); + } + } + + @FXML + private void handleDeleteProjekt() + { + Projekt selectedItem = projektTableView.getSelectionModel() + .getSelectedItem(); + + if (selectedItem != null) + { + main.getProjekte().remove(selectedItem); + } + } + + @FXML + private void handleStudentenverwaltung() + { + main.showStudentenverwaltung(); + } + + @FXML + private void handleAnsprechpartnerverwaltungs() + { + main.showAnsprechpartnerverwaltungsStage(); + } + + @FXML + private void handleClose() + { + Platform.exit(); + } +} diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/Studentenverwaltung.fxml b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/Studentenverwaltung.fxml new file mode 100644 index 0000000..09b5404 --- /dev/null +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/Studentenverwaltung.fxml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.*?> +<?import javafx.scene.control.*?> +<?import java.lang.*?> +<?import javafx.scene.layout.*?> + +<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="298.0" prefWidth="586.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.fhswf.in.inf.se.projektthemenvergabe.view.StudentenverwaltungsController"> + <center> + <VBox prefHeight="200.0" prefWidth="100.0" BorderPane.alignment="CENTER"> + <children> + <TableView fx:id="studentTableView" editable="true" prefHeight="422.0" prefWidth="600.0"> + <columns> + <TableColumn fx:id="matrikelnummerTableColumn" prefWidth="75.0" text="Matrikelnummer" /> + <TableColumn fx:id="vornameTableColumn" prefWidth="75.0" text="Vorname" /> + <TableColumn fx:id="nachnameTableColumn" prefWidth="75.0" text="Nachname" /> + </columns> + <columnResizePolicy> + <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> + </columnResizePolicy> + <placeholder> + <Label text="Keine Studenten angelegt." /> + </placeholder> + </TableView> + <HBox prefHeight="100.0" prefWidth="200.0"> + <children> + <Button minWidth="200.0" mnemonicParsing="false" onAction="#handleAddStudent" text="Anlegen" /> + <Button fx:id="deleteStudentButton" disable="true" minWidth="200.0" mnemonicParsing="false" onAction="#handleDeleteStudent" text="Löschen"> + <HBox.margin> + <Insets left="10.0" /> + </HBox.margin> + </Button> + </children> + <VBox.margin> + <Insets top="10.0" /> + </VBox.margin> + </HBox> + </children> + </VBox> + </center> +</BorderPane> diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/StudentenverwaltungsController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/StudentenverwaltungsController.java new file mode 100644 index 0000000..17a874d --- /dev/null +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/StudentenverwaltungsController.java @@ -0,0 +1,107 @@ +package de.fhswf.in.inf.se.projektthemenvergabe.view; + +import java.util.Optional; + +import de.fhswf.in.inf.se.projektthemenvergabe.Main; +import de.fhswf.in.inf.se.projektthemenvergabe.model.Student; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextInputDialog; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.util.converter.IntegerStringConverter; + +public class StudentenverwaltungsController +{ + @FXML + private TableView<Student> studentTableView; + + @FXML + private TableColumn<Student, Integer> matrikelnummerTableColumn; + + @FXML + private TableColumn<Student, String> vornameTableColumn; + + @FXML + private TableColumn<Student, String> nachnameTableColumn; + + @FXML + private Button deleteStudentButton; + + private Main main; + + @FXML + private void initialize() + { + matrikelnummerTableColumn.setCellValueFactory( + (data) -> data.getValue().matrikelnummerProperty().asObject()); + matrikelnummerTableColumn.setCellFactory( + TextFieldTableCell.forTableColumn(new IntegerStringConverter())); + + vornameTableColumn + .setCellValueFactory((data) -> data.getValue().vornameProperty()); + vornameTableColumn.setCellFactory(TextFieldTableCell.forTableColumn()); + vornameTableColumn.setOnEditCommit((data) -> { + data.getRowValue().setVorname(data.getNewValue().trim()); + + // Hack, aktualisiert TableView, da Observable beim setzen nicht neu + // abgefragt wird + vornameTableColumn.setVisible(false); + vornameTableColumn.setVisible(true); + }); + + nachnameTableColumn.setCellValueFactory( + (data) -> data.getValue().nachnameProperty()); + nachnameTableColumn.setCellFactory(TextFieldTableCell.forTableColumn()); + nachnameTableColumn.setOnEditCommit((data) -> { + data.getRowValue().setNachname(data.getNewValue().trim()); + + // Hack, aktualisiert TableView, da Observable beim setzen nicht neu + // abgefragt wird + nachnameTableColumn.setVisible(false); + nachnameTableColumn.setVisible(true); + }); + + deleteStudentButton.disableProperty().bind(studentTableView + .getSelectionModel().selectedItemProperty().isNull()); + } + + public void setMain(Main main) + { + this.main = main; + studentTableView.setItems(main.getStudenten()); + } + + @FXML + private void handleAddStudent() + { + TextInputDialog dialog = new TextInputDialog(); + dialog.setTitle("Füge neuen Studenten hinzu"); + dialog.setHeaderText("Geben Sie die Matrikelnummer des Studenten ein."); + dialog.setContentText("Matrikelnummer des Stundenten:"); + + dialog.initOwner(main.getStudentenverwaltungsStage()); + + Optional<String> result = dialog.showAndWait(); + if (result.isPresent() && !result.get().trim().isEmpty()) + { + Student student = new Student(); + student.setMatrikelnummer(Integer.parseInt(result.get().trim(), 10)); + main.getStudenten().add(student); + } + } + + @FXML + private void handleDeleteStudent() + { + Student selectedItem = studentTableView.getSelectionModel() + .getSelectedItem(); + + if (selectedItem != null) + { + main.getProjekte().remove(selectedItem.getProjekt()); + main.getStudenten().remove(selectedItem); + } + } +} |
