summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf/in/inf/se/projektthemenvergabe/view
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2015-12-16 02:24:36 +0100
committerStefan Suhren <suhren.stefan@fh-swf.de>2015-12-16 02:24:36 +0100
commit869bbdd24a6c360cb2aab91d7c925d7191a5f07e (patch)
treea5ca0f8fa9f18c2b52bd0e650ce5222ae39a726e /src/de/fhswf/in/inf/se/projektthemenvergabe/view
parentbdec8b2ed49f0473168638c9220209dc77a3afd8 (diff)
downloadProjektthemenvergabe-869bbdd24a6c360cb2aab91d7c925d7191a5f07e.tar.gz
Projektthemenvergabe-869bbdd24a6c360cb2aab91d7c925d7191a5f07e.zip
It partially works (TM)
Diffstat (limited to 'src/de/fhswf/in/inf/se/projektthemenvergabe/view')
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java6
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektHinzufuegen.fxml145
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektHinzufuegenController.java131
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/Projektthemenverwaltung.fxml89
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/ProjektthemenverwaltungsController.java125
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/Studentenverwaltung.fxml41
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/StudentenverwaltungsController.java107
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);
+ }
+ }
+}