gui Folder entfernt
This commit is contained in:
@ -1,207 +0,0 @@
|
|||||||
/**
|
|
||||||
* Klasse für die Darstellung von Angestellten.
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JDesktopPane;
|
|
||||||
import javax.swing.JInternalFrame;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
|
||||||
|
|
||||||
import personen.Angestellter;
|
|
||||||
import personen.Person;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Diese Klasse ist für die Darstellung der Angestellten
|
|
||||||
* zuständig.
|
|
||||||
*
|
|
||||||
* @author konrad
|
|
||||||
*/
|
|
||||||
public class AngestellterGui extends InternalFrameElternklasse {
|
|
||||||
|
|
||||||
/** Referenz auf das Feld der Angestellten. */
|
|
||||||
private Angestellter angestelltenFeld[];
|
|
||||||
|
|
||||||
// Graphische Elemente der Oberfläche
|
|
||||||
private JTable table;
|
|
||||||
private DefaultTableModel model;
|
|
||||||
private JPanel panel;
|
|
||||||
private JScrollPane scrollPane;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Angestellten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public AngestellterGui(String title, Angestellter angestelltenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, true, angestelltenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Angestellten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public AngestellterGui(String title, boolean resizable,
|
|
||||||
Angestellter angestelltenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, resizable, true, angestelltenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param closable Flag, ob das Fenster ganz geschlossen werden kann.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Angestellten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public AngestellterGui(String title, boolean resizable, boolean closable,
|
|
||||||
Angestellter angestelltenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, resizable, closable, true, angestelltenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param closable Flag, ob das Fenster ganz geschlossen werden kann.
|
|
||||||
* @param maximizable Flag, ob das Fenster maximiert werden kann.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Angestellten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public AngestellterGui(String title, boolean resizable, boolean closable, boolean maximizable,
|
|
||||||
Angestellter angestelltenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, resizable, closable, maximizable, true, angestelltenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Umfangreichster Konstruktor zum Erzeugen eines Fensters
|
|
||||||
* für Angestellte, das als JInternalFrame einem JDesktop
|
|
||||||
* hinzugefügt werden kann.
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param closable Flag, ob das Fenster ganz geschlossen werden kann.
|
|
||||||
* @param maximizable Flag, ob das Fenster maximiert werden kann.
|
|
||||||
* @param iconifiable Flag, ob das Fenster zum Icon minimiert werden kann.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Angestellten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public AngestellterGui(String title, boolean resizable, boolean closable, boolean maximizable,
|
|
||||||
boolean iconifiable,
|
|
||||||
Angestellter angestelltenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
super(title, resizable, closable, maximizable, iconifiable,
|
|
||||||
desktop, gui);
|
|
||||||
|
|
||||||
this.angestelltenFeld = angestelltenFeld;
|
|
||||||
|
|
||||||
this.model = new DefaultTableModel();
|
|
||||||
this.table = new JTable(this.model);
|
|
||||||
|
|
||||||
// Erstellen eines Panels für den Inhalt des internen Frames
|
|
||||||
this.panel = new JPanel(new BorderLayout());
|
|
||||||
|
|
||||||
this.scrollPane = new JScrollPane(this.table);
|
|
||||||
panel.add(scrollPane, BorderLayout.CENTER);
|
|
||||||
|
|
||||||
// Knopf zum Speichern von Änderungen erstellen
|
|
||||||
JButton speichernButton = new JButton("Änderungen speichern");
|
|
||||||
speichernButton.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
aenderungenSpeichern();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
panel.add(speichernButton, BorderLayout.SOUTH);
|
|
||||||
|
|
||||||
this.add(panel);
|
|
||||||
|
|
||||||
// x, y, breite, hoehe
|
|
||||||
this.setBounds(33, 47, 192, 202);
|
|
||||||
this.setVisible(true);
|
|
||||||
String spaltenNamen[] = { "Name", "Personalnummer" };
|
|
||||||
erzeugeTabelle(angestelltenFeld, spaltenNamen);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementierung der abstrakten Methode aus InternalFrameElternklasse.
|
|
||||||
* Diese Methode wird aufgerufen, wenn das Fenster geschlossen wird.
|
|
||||||
* Sie ist dafür zuständig, die spezifische Referenz in der Gui-Klasse
|
|
||||||
* auf null zu setzen.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void handleFrameClosed() {
|
|
||||||
if (mainGuiRef != null) { // mainGuiRef kommt von InternalFrameElternklasse
|
|
||||||
mainGuiRef.setAngestelltenGuiToNull();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Das Datenmodell der Tabelle mit Daten befüllen.
|
|
||||||
* @param datenQuelle 1D-Feld mit Angestellten-Objekten.
|
|
||||||
* @param spaltenNamen 1D-Feld mit den Namen bzw.
|
|
||||||
* Überschriften der Spalten.
|
|
||||||
*/
|
|
||||||
private void erzeugeTabelle(Object datenQuelle[], String spaltenNamen[]) {
|
|
||||||
// Erstellen der Daten für die Tabelle
|
|
||||||
Object[][] daten = new Object[datenQuelle.length][spaltenNamen.length];
|
|
||||||
for(int zeile = 0; zeile < datenQuelle.length; zeile++) {
|
|
||||||
int spalte = 0;
|
|
||||||
daten[zeile][spalte] = ((Person)datenQuelle[zeile]).getName();
|
|
||||||
spalte++;
|
|
||||||
daten[zeile][spalte] = ((Angestellter)datenQuelle[zeile]).getPersonalNr();
|
|
||||||
}
|
|
||||||
this.model.setRowCount(datenQuelle.length);
|
|
||||||
this.model.setDataVector(daten, spaltenNamen);
|
|
||||||
this.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Die interaktiven Änderungen in der Tabelle
|
|
||||||
* im Feld der Angestellten speichern.
|
|
||||||
*/
|
|
||||||
private void aenderungenSpeichern() {
|
|
||||||
int zeilenN = this.model.getRowCount();
|
|
||||||
int spaltenN = this.model.getColumnCount();
|
|
||||||
String name;
|
|
||||||
int personalNr;
|
|
||||||
for(int zeile = 0; zeile < zeilenN; zeile++) {
|
|
||||||
name = (String)(this.model.getValueAt(zeile, 0));
|
|
||||||
Object o = this.model.getValueAt(zeile, 1);
|
|
||||||
personalNr = 0;
|
|
||||||
// Greift, sobald einmal eine Zelle geändert worden ist
|
|
||||||
if(o instanceof String) {
|
|
||||||
String text = (String)o;
|
|
||||||
personalNr = Integer.parseInt(text);
|
|
||||||
}
|
|
||||||
// Greift, solange eine Zelle noch nicht geändert worden ist
|
|
||||||
if(o instanceof Integer) {
|
|
||||||
personalNr = (Integer)(this.model.getValueAt(zeile, 1));
|
|
||||||
}
|
|
||||||
angestelltenFeld[zeile].setName(name);
|
|
||||||
angestelltenFeld[zeile].setPersonalNr(personalNr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,212 +0,0 @@
|
|||||||
/**
|
|
||||||
* Klasse für die Darstellung von DH-Studenten.
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JDesktopPane;
|
|
||||||
import javax.swing.JInternalFrame;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
|
||||||
|
|
||||||
import personen.Person;
|
|
||||||
import personen.studenten.DHStudent;
|
|
||||||
import personen.studenten.Student;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Diese Klasse ist für die Darstellung der DH-Studenten
|
|
||||||
* zuständig.
|
|
||||||
*
|
|
||||||
* @author konrad
|
|
||||||
*/
|
|
||||||
public class DHStudentGui extends InternalFrameElternklasse {
|
|
||||||
|
|
||||||
/** Referenz auf das Feld der DH-Studenten. */
|
|
||||||
private DHStudent dhStudentenFeld[];
|
|
||||||
|
|
||||||
// Graphische Elemente der Oberfläche
|
|
||||||
private JTable table;
|
|
||||||
private DefaultTableModel model;
|
|
||||||
private JPanel panel;
|
|
||||||
private JScrollPane scrollPane;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der DH-Studenten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public DHStudentGui(String title, DHStudent dhStudentenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, true, dhStudentenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der DH-Studenten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public DHStudentGui(String title, boolean resizable,
|
|
||||||
DHStudent dhStudentenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, resizable, true, dhStudentenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param closable Flag, ob das Fenster ganz geschlossen werden kann.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der DH-Studenten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public DHStudentGui(String title, boolean resizable, boolean closable,
|
|
||||||
DHStudent dhStudentenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, resizable, closable, true, dhStudentenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param closable Flag, ob das Fenster ganz geschlossen werden kann.
|
|
||||||
* @param maximizable Flag, ob das Fenster maximiert werden kann.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der DH-Studenten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public DHStudentGui(String title, boolean resizable, boolean closable, boolean maximizable,
|
|
||||||
DHStudent dhStudentenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, resizable, closable, maximizable, true,
|
|
||||||
dhStudentenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Umfangreichster Konstruktor zum Erzeugen eines Fensters
|
|
||||||
* für DH-Studenten, das als JInternalFrame einem JDesktop
|
|
||||||
* hinzugefügt werden kann.
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param closable Flag, ob das Fenster ganz geschlossen werden kann.
|
|
||||||
* @param maximizable Flag, ob das Fenster maximiert werden kann.
|
|
||||||
* @param iconifiable Flag, ob das Fenster zum Icon minimiert werden kann.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Angestellten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public DHStudentGui(String title, boolean resizable, boolean closable, boolean maximizable,
|
|
||||||
boolean iconifiable,
|
|
||||||
DHStudent dhStudentenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
super(title, resizable, closable, maximizable, iconifiable,
|
|
||||||
desktop, gui);
|
|
||||||
|
|
||||||
this.dhStudentenFeld = dhStudentenFeld;
|
|
||||||
|
|
||||||
this.model = new DefaultTableModel();
|
|
||||||
this.table = new JTable(this.model);
|
|
||||||
|
|
||||||
// Erstellen eines Panels für den Inhalt des internen Frames
|
|
||||||
this.panel = new JPanel(new BorderLayout());
|
|
||||||
|
|
||||||
this.scrollPane = new JScrollPane(this.table);
|
|
||||||
panel.add(scrollPane, BorderLayout.CENTER);
|
|
||||||
|
|
||||||
// Knopf zum Speichern von Änderungen erstellen
|
|
||||||
JButton speichernButton = new JButton("Änderungen speichern");
|
|
||||||
speichernButton.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
aenderungenSpeichern();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
panel.add(speichernButton, BorderLayout.SOUTH);
|
|
||||||
|
|
||||||
this.add(panel);
|
|
||||||
|
|
||||||
// x, y, breite, hoehe
|
|
||||||
this.setBounds(180, 250, 400, 250);
|
|
||||||
this.setVisible(true);
|
|
||||||
String spaltenNamen[] = { "Name", "Semester", "Kurs" };
|
|
||||||
erzeugeTabelle(dhStudentenFeld, spaltenNamen);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementierung der abstrakten Methode aus InternalFrameElternklasse.
|
|
||||||
* Diese Methode wird aufgerufen, wenn das Fenster geschlossen wird.
|
|
||||||
* Sie ist dafür zuständig, die spezifische Referenz in der Gui-Klasse
|
|
||||||
* auf null zu setzen.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void handleFrameClosed() {
|
|
||||||
if (mainGuiRef != null) { // mainGuiRef kommt von InternalFrameElternklasse
|
|
||||||
mainGuiRef.setDhStudentGuiToNull();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Das Datenmodell der Tabelle mit Daten befüllen.
|
|
||||||
* @param datenQuelle 1D-Feld mit DH-Studenten-Objekten.
|
|
||||||
* @param spaltenNamen 1D-Feld mit den Namen bzw.
|
|
||||||
* Überschriften der Spalten.
|
|
||||||
*/
|
|
||||||
private void erzeugeTabelle(Object datenQuelle[], String spaltenNamen[]) {
|
|
||||||
// Erstellen der Daten für die Tabelle
|
|
||||||
Object[][] daten = new Object[datenQuelle.length][spaltenNamen.length];
|
|
||||||
for(int zeile = 0; zeile < datenQuelle.length; zeile++) {
|
|
||||||
int spalte = 0;
|
|
||||||
daten[zeile][spalte++] = ((Person)datenQuelle[zeile]).getName();
|
|
||||||
daten[zeile][spalte++] = ((Student)datenQuelle[zeile]).getSemester();
|
|
||||||
daten[zeile][spalte] = ((DHStudent)datenQuelle[zeile]).getKurs();
|
|
||||||
}
|
|
||||||
this.model.setRowCount(datenQuelle.length);
|
|
||||||
this.model.setDataVector(daten, spaltenNamen);
|
|
||||||
this.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Die interaktiven Änderungen in der Tabelle
|
|
||||||
* im Feld der DH-Studenten speichern.
|
|
||||||
*/
|
|
||||||
private void aenderungenSpeichern() {
|
|
||||||
int zeilenN = this.model.getRowCount();
|
|
||||||
int spaltenN = this.model.getColumnCount();
|
|
||||||
String name;
|
|
||||||
int semester;
|
|
||||||
String kurs;
|
|
||||||
for(int zeile = 0; zeile < zeilenN; zeile++) {
|
|
||||||
name = (String)(this.model.getValueAt(zeile, 0));
|
|
||||||
Object o = this.model.getValueAt(zeile, 1);
|
|
||||||
semester = 0;
|
|
||||||
// Greift, sobald einmal eine Zelle geändert worden ist
|
|
||||||
if(o instanceof String) {
|
|
||||||
String text = (String)o;
|
|
||||||
semester = Integer.parseInt(text);
|
|
||||||
}
|
|
||||||
// Greift, solange eine Zelle noch nicht geändert worden ist
|
|
||||||
if(o instanceof Integer) {
|
|
||||||
semester = (Integer)(this.model.getValueAt(zeile, 1));
|
|
||||||
}
|
|
||||||
kurs = (String)(this.model.getValueAt(zeile, 2));
|
|
||||||
dhStudentenFeld[zeile].setName(name);
|
|
||||||
dhStudentenFeld[zeile].setSemester(semester);
|
|
||||||
dhStudentenFeld[zeile].setKurs(kurs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
274
gui/Gui.java
274
gui/Gui.java
@ -1,274 +0,0 @@
|
|||||||
/**
|
|
||||||
* Zentrale Klassee für das Erstellen des GUI.
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
||||||
import javax.swing.JDesktopPane;
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JInternalFrame;
|
|
||||||
import javax.swing.JMenu;
|
|
||||||
import javax.swing.JMenuBar;
|
|
||||||
import javax.swing.JMenuItem;
|
|
||||||
import javax.swing.JOptionPane;
|
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
|
|
||||||
import personen.Angestellter;
|
|
||||||
import personen.IKlausurSchreiber;
|
|
||||||
import personen.IMitarbeiter;
|
|
||||||
import personen.Lehrbeauftragter;
|
|
||||||
import personen.studenten.DHStudent;
|
|
||||||
import personen.studenten.Student;
|
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.awt.event.ComponentAdapter;
|
|
||||||
import java.awt.event.ComponentEvent;
|
|
||||||
import java.beans.PropertyVetoException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Diese Klasse ist die zentrale Klasse zum Erstellen des GUI
|
|
||||||
*
|
|
||||||
* @author konrad
|
|
||||||
*/
|
|
||||||
public class Gui extends JFrame {
|
|
||||||
|
|
||||||
private IMitarbeiter mitarbeiterFeld[];
|
|
||||||
private Lehrbeauftragter lehrbeauftragtenFeld[];
|
|
||||||
private IKlausurSchreiber prueflinge[];
|
|
||||||
private DHStudent dhStudentenFeld[];
|
|
||||||
private Student studentenFeld[];
|
|
||||||
|
|
||||||
private JDesktopPane desktop;
|
|
||||||
private JMenuBar menuBar;
|
|
||||||
|
|
||||||
private AngestellterGui angestellterGui;
|
|
||||||
private StudentGui studentGui;
|
|
||||||
private DHStudentGui dhStudentGui;
|
|
||||||
|
|
||||||
// Instanzen der Klasse InternalFrameHilfsklasseZumOeffnen für jeden Fenstertyp
|
|
||||||
private InternalFrameHilfsklasseZumOeffnen<StudentGui> studentenOpener;
|
|
||||||
private InternalFrameHilfsklasseZumOeffnen<DHStudentGui> dhStudentenOpener;
|
|
||||||
private InternalFrameHilfsklasseZumOeffnen<AngestellterGui> angestelltenOpener;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Konstruktor.
|
|
||||||
*
|
|
||||||
* @param angestelltenFeld
|
|
||||||
* @param mitarbeiterFeld
|
|
||||||
* @param lehrbeauftragtenFeld
|
|
||||||
* @param prueflinge
|
|
||||||
* @param studentenFeld
|
|
||||||
* @param dhStudentenFeld
|
|
||||||
*/
|
|
||||||
public Gui(
|
|
||||||
Angestellter angestelltenFeld[],
|
|
||||||
IMitarbeiter mitarbeiterFeld[],
|
|
||||||
Lehrbeauftragter lehrbeauftragtenFeld[],
|
|
||||||
IKlausurSchreiber prueflinge[],
|
|
||||||
Student studentenFeld[],
|
|
||||||
DHStudent dhStudentenFeld[]) {
|
|
||||||
// Konstruktor von JFrame mit Fenstertitel
|
|
||||||
super("TINF24CS1");
|
|
||||||
|
|
||||||
this.mitarbeiterFeld = mitarbeiterFeld;
|
|
||||||
this.lehrbeauftragtenFeld = lehrbeauftragtenFeld;
|
|
||||||
this.prueflinge = prueflinge;
|
|
||||||
this.studentenFeld = studentenFeld;
|
|
||||||
this.dhStudentenFeld = dhStudentenFeld;
|
|
||||||
|
|
||||||
// Erstellen des Fensters
|
|
||||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
||||||
this.setSize(800, 600);
|
|
||||||
|
|
||||||
// Erstellen der Menüleiste
|
|
||||||
this.menuBar = new JMenuBar();
|
|
||||||
|
|
||||||
// Erstellen des "Datei"-Menüs
|
|
||||||
JMenu fileMenu = new JMenu("Datei");
|
|
||||||
JMenuItem newMenuItem = new JMenuItem("Neu");
|
|
||||||
JMenuItem openMenuItem = new JMenuItem("Öffnen");
|
|
||||||
JMenuItem saveMenuItem = new JMenuItem("Speichern");
|
|
||||||
JMenuItem exitMenuItem = new JMenuItem("Beenden");
|
|
||||||
|
|
||||||
// Hinzufügen der Menüelemente zum "Datei"-Menü
|
|
||||||
fileMenu.add(newMenuItem);
|
|
||||||
fileMenu.add(openMenuItem);
|
|
||||||
fileMenu.add(saveMenuItem);
|
|
||||||
fileMenu.addSeparator();
|
|
||||||
fileMenu.add(exitMenuItem);
|
|
||||||
|
|
||||||
// Erstellen des "Bearbeiten"-Menüs
|
|
||||||
JMenu editMenu = new JMenu("Bearbeiten");
|
|
||||||
JMenuItem cutMenuItem = new JMenuItem("Ausschneiden");
|
|
||||||
JMenuItem copyMenuItem = new JMenuItem("Kopieren");
|
|
||||||
JMenuItem pasteMenuItem = new JMenuItem("Einfügen");
|
|
||||||
|
|
||||||
// Hinzufügen der Menüelemente zum "Bearbeiten"-Menü
|
|
||||||
editMenu.add(cutMenuItem);
|
|
||||||
editMenu.add(copyMenuItem);
|
|
||||||
editMenu.add(pasteMenuItem);
|
|
||||||
|
|
||||||
// Erstellen des "Anzeigen"-Menüs
|
|
||||||
JMenu anzeigeMenu = new JMenu("Anzeigen");
|
|
||||||
JMenuItem angestelltenMenuItem = new JMenuItem("Angestellte");
|
|
||||||
JMenuItem mitarbeiterMenuItem = new JMenuItem("Mitarbeiter");
|
|
||||||
JMenuItem lehrbeauftragterMenuItem = new JMenuItem("Lehrbeauftragte");
|
|
||||||
JMenuItem prueflingeMenuItem = new JMenuItem("Prüflinge");
|
|
||||||
JMenuItem studentenMenuItem = new JMenuItem("Studenten");
|
|
||||||
JMenuItem dhStudentenMenuItem = new JMenuItem("DH-Studenten");
|
|
||||||
|
|
||||||
// Hinzufügen der Menüelemente zum "Anzeigen"-Menü
|
|
||||||
anzeigeMenu.add(angestelltenMenuItem);
|
|
||||||
anzeigeMenu.add(mitarbeiterMenuItem);
|
|
||||||
anzeigeMenu.add(lehrbeauftragterMenuItem);
|
|
||||||
anzeigeMenu.add(prueflingeMenuItem);
|
|
||||||
anzeigeMenu.add(studentenMenuItem);
|
|
||||||
anzeigeMenu.add(dhStudentenMenuItem);
|
|
||||||
|
|
||||||
// Hinzufügen der Menüs zur Menüleiste
|
|
||||||
menuBar.add(fileMenu);
|
|
||||||
menuBar.add(editMenu);
|
|
||||||
menuBar.add(anzeigeMenu);
|
|
||||||
|
|
||||||
// Hinzufügen der Menüleiste zum JFrame
|
|
||||||
this.setJMenuBar(menuBar);
|
|
||||||
|
|
||||||
// Desktop-Fläche für die "JInternalFrame"-Fenster erstellen
|
|
||||||
this.desktop = new JDesktopPane();
|
|
||||||
setContentPane(desktop);
|
|
||||||
|
|
||||||
// Erzeuge die 3 Instanzen der InternalFrameHilfsklasseZumOeffnen
|
|
||||||
|
|
||||||
studentenOpener = new InternalFrameHilfsklasseZumOeffnen<>(desktop, this, () -> {
|
|
||||||
String title = "Studenten (KEINE DH!)";
|
|
||||||
boolean resizable = true;
|
|
||||||
boolean closable = true;
|
|
||||||
boolean maximizable = true;
|
|
||||||
boolean iconifiable = true;
|
|
||||||
StudentGui newStudentGui = new StudentGui(
|
|
||||||
title, resizable, closable, maximizable,
|
|
||||||
iconifiable, studentenFeld, desktop, this);
|
|
||||||
// Referenz in Gui.java aktualisieren
|
|
||||||
this.studentGui = newStudentGui;
|
|
||||||
return newStudentGui;
|
|
||||||
});
|
|
||||||
|
|
||||||
dhStudentenOpener = new InternalFrameHilfsklasseZumOeffnen<>(desktop, this, () -> {
|
|
||||||
String title = "DHBW-Studenten";
|
|
||||||
boolean resizable = true;
|
|
||||||
boolean closable = true;
|
|
||||||
boolean maximizable = true;
|
|
||||||
boolean iconifiable = true;
|
|
||||||
DHStudentGui newDhStudentGui = new DHStudentGui(
|
|
||||||
title, resizable, closable, maximizable,
|
|
||||||
iconifiable, dhStudentenFeld, desktop, this);
|
|
||||||
// Referenz in Gui.java aktualisieren
|
|
||||||
this.dhStudentGui = newDhStudentGui;
|
|
||||||
return newDhStudentGui;
|
|
||||||
});
|
|
||||||
|
|
||||||
angestelltenOpener = new InternalFrameHilfsklasseZumOeffnen<>(desktop, this, () -> {
|
|
||||||
String title = "Angestellte";
|
|
||||||
boolean resizable = true;
|
|
||||||
boolean closable = true;
|
|
||||||
boolean maximizable = true;
|
|
||||||
boolean iconifiable = true;
|
|
||||||
AngestellterGui newAngestellterGui = new AngestellterGui(
|
|
||||||
title, resizable, closable, maximizable,
|
|
||||||
iconifiable, angestelltenFeld, desktop, this);
|
|
||||||
// Referenz in Gui.java aktualisieren
|
|
||||||
this.angestellterGui = newAngestellterGui;
|
|
||||||
return newAngestellterGui;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Hinzufügen der ActionListener zu den Menüelementen
|
|
||||||
exitMenuItem.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
System.exit(0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
newMenuItem.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
JOptionPane.showMessageDialog(Gui.this, "Neu ausgewählt");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
openMenuItem.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
JOptionPane.showMessageDialog(Gui.this, "Öffnen ausgewählt");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
saveMenuItem.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
JOptionPane.showMessageDialog(Gui.this, "Speichern ausgewählt");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
cutMenuItem.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
JOptionPane.showMessageDialog(Gui.this, "Ausschneiden ausgewählt");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
copyMenuItem.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
JOptionPane.showMessageDialog(Gui.this, "Kopieren ausgewählt");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
pasteMenuItem.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
JOptionPane.showMessageDialog(Gui.this, "Einfügen ausgewählt");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Hier ganz kurzer Quelltext dank der Hilfsklassenobjekte!
|
|
||||||
angestelltenMenuItem.addActionListener(angestelltenOpener);
|
|
||||||
|
|
||||||
// Hier ganz kurzer Quelltext dank der Hilfsklassenobjekte!
|
|
||||||
studentenMenuItem.addActionListener(studentenOpener);
|
|
||||||
|
|
||||||
// Hier ganz kurzer Quelltext dank der Hilfsklassenobjekte!
|
|
||||||
dhStudentenMenuItem.addActionListener(dhStudentenOpener);
|
|
||||||
|
|
||||||
// Anzeigen des Fensters
|
|
||||||
this.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dient zum Informieren des Openers.
|
|
||||||
*/
|
|
||||||
public void setStudentGuiToNull() {
|
|
||||||
this.studentGui = null;
|
|
||||||
// Sicherstellen, dass der Opener schon initialisiert ist
|
|
||||||
if (studentenOpener != null) {
|
|
||||||
studentenOpener.clearManagedFrame();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dient zum Informieren des Openers.
|
|
||||||
*/
|
|
||||||
public void setDhStudentGuiToNull() {
|
|
||||||
this.dhStudentGui = null;
|
|
||||||
if (dhStudentenOpener != null) {
|
|
||||||
dhStudentenOpener.clearManagedFrame();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dient zum Informieren des Openers.
|
|
||||||
*/
|
|
||||||
public void setAngestelltenGuiToNull() {
|
|
||||||
this.angestellterGui = null;
|
|
||||||
if (angestelltenOpener != null) {
|
|
||||||
angestelltenOpener.clearManagedFrame();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,85 +0,0 @@
|
|||||||
/**
|
|
||||||
* Elternklasse für die einzelnen Fenster auf dem Desktop
|
|
||||||
* der Anwendung.
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
import javax.swing.JDesktopPane;
|
|
||||||
import javax.swing.JInternalFrame;
|
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
import java.awt.event.ComponentAdapter;
|
|
||||||
import java.awt.event.ComponentEvent;
|
|
||||||
import javax.swing.event.InternalFrameAdapter;
|
|
||||||
import javax.swing.event.InternalFrameEvent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Elternklasse für die einzelnen Fenster auf dem Desktop
|
|
||||||
* der Anwendung.
|
|
||||||
*/
|
|
||||||
public abstract class InternalFrameElternklasse extends JInternalFrame {
|
|
||||||
|
|
||||||
/** Referenz auf den Desktop. */
|
|
||||||
protected JDesktopPane desktopRef;
|
|
||||||
/** Referenz zur Haupt-GUI-Klasse */
|
|
||||||
protected Gui mainGuiRef;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Konstruktor.
|
|
||||||
*
|
|
||||||
* @param title
|
|
||||||
* @param resizable
|
|
||||||
* @param closable
|
|
||||||
* @param maximizable
|
|
||||||
* @param iconifiable
|
|
||||||
* @param desktop
|
|
||||||
* @param mainGui
|
|
||||||
*/
|
|
||||||
public InternalFrameElternklasse(String title, boolean resizable, boolean closable,
|
|
||||||
boolean maximizable, boolean iconifiable,
|
|
||||||
JDesktopPane desktop, Gui mainGui) {
|
|
||||||
super(title, resizable, closable, maximizable, iconifiable);
|
|
||||||
this.desktopRef = desktop;
|
|
||||||
this.mainGuiRef = mainGui;
|
|
||||||
|
|
||||||
// Füge den Listener für das Schließen des Fensters hinzu
|
|
||||||
this.addInternalFrameListener(new InternalFrameAdapter() {
|
|
||||||
@Override
|
|
||||||
public void internalFrameClosed(InternalFrameEvent e) {
|
|
||||||
// Diese Methode muss in der abgeleiteten Klasse implementiert
|
|
||||||
// oder überschrieben werden, oder man verlässt sich darauf, dass
|
|
||||||
// mainGuiRef die entsprechende setXxxGuiToNull aufruft.
|
|
||||||
handleFrameClosed();
|
|
||||||
|
|
||||||
// Allgemeine Desktop-Aktualisierung nach dem Schließen
|
|
||||||
if (desktopRef != null) {
|
|
||||||
SwingUtilities.invokeLater(() -> {
|
|
||||||
desktopRef.revalidate();
|
|
||||||
desktopRef.repaint();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Füge den ComponentListener für das Beseitigen von möglichem
|
|
||||||
// "Pixel-Schmutz" beim Verschieben hinzu
|
|
||||||
this.addComponentListener(new ComponentAdapter() {
|
|
||||||
@Override
|
|
||||||
public void componentMoved(ComponentEvent e) {
|
|
||||||
if (desktopRef != null) {
|
|
||||||
SwingUtilities.invokeLater(() -> desktopRef.repaint());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstrakte Methode, die von den Unterklassen implementiert werden muss,
|
|
||||||
* um die spezifische Referenz in der Gui-Klasse auf null zu setzen.
|
|
||||||
*/
|
|
||||||
protected abstract void handleFrameClosed();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,139 +0,0 @@
|
|||||||
/**
|
|
||||||
* Hilfsklasse zum Öffnen der einzelnen Fenster.
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
||||||
import javax.swing.JDesktopPane;
|
|
||||||
import javax.swing.JInternalFrame;
|
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.beans.PropertyVetoException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hilfsklasse zum Öffnen der einzelnen Fenster.
|
|
||||||
*
|
|
||||||
* Die Handhabung der Fenster ist besonders dadurch kompliziert,
|
|
||||||
* weil sie in diesem Programm alle Optionen haben:
|
|
||||||
* - Erstmals ganz neu nach Programmstart öffnen.
|
|
||||||
* - Erneut öffnen nach vorherigem Schließen.
|
|
||||||
* - Öffnen nach voherigem Umwandeln in Icon und Klicken auf das Icon.
|
|
||||||
* - Öffnen über das Menü nach voherigem Umwandeln in Icon.
|
|
||||||
*/
|
|
||||||
public class InternalFrameHilfsklasseZumOeffnen<T extends JInternalFrame> implements ActionListener {
|
|
||||||
|
|
||||||
private boolean DEBUG = false;
|
|
||||||
|
|
||||||
private JDesktopPane desktop;
|
|
||||||
/** Die Referenz zum spezifischen JInternalFrame (z.B. studentGui) */
|
|
||||||
private T frameToManage;
|
|
||||||
/** Referenz zur Haupt-GUI-Klasse */
|
|
||||||
private Gui mainGui;
|
|
||||||
|
|
||||||
/** Funktionales Interface zum Erzeugen der JInternalFrame-Instanzen */
|
|
||||||
@FunctionalInterface
|
|
||||||
public interface InternalFrameFactory<F extends JInternalFrame> {
|
|
||||||
F create();
|
|
||||||
}
|
|
||||||
|
|
||||||
private InternalFrameFactory<T> frameFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Konstruktor.
|
|
||||||
*
|
|
||||||
* @param desktop
|
|
||||||
* @param mainGui
|
|
||||||
* @param factory
|
|
||||||
*/
|
|
||||||
public InternalFrameHilfsklasseZumOeffnen(JDesktopPane desktop, Gui mainGui, InternalFrameFactory<T> factory) {
|
|
||||||
this.desktop = desktop;
|
|
||||||
this.mainGui = mainGui;
|
|
||||||
this.frameFactory = factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Diese Methode MUSS von der Gui-Klasse aufgerufen werden,
|
|
||||||
* nachdem der Opener ein neues Fenster erzeugt hat.
|
|
||||||
* Das ist nicht mehr direkt notwendig, da der Lambda-Ausdruck
|
|
||||||
* in Gui.java die Referenz direkt aktualisiert.
|
|
||||||
* Diese Methode dient hauptsächlich dazu, die
|
|
||||||
* frameToManage-Referenz in diesem Opener zu setzen.
|
|
||||||
* @param frame
|
|
||||||
*/
|
|
||||||
public void setManagedFrame(T frame) {
|
|
||||||
this.frameToManage = frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Methode, um die Instanz auf null zu setzen, wenn das Fenster geschlossen
|
|
||||||
* wird. Wird von den setXXXGuiToNull() Methoden in Gui.java aufgerufen.
|
|
||||||
*/
|
|
||||||
public void clearManagedFrame() {
|
|
||||||
this.frameToManage = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
SwingUtilities.invokeLater(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
// Prüfen, ob das Fenster bereits im Desktop ist (inkl. minimierter Zustand)
|
|
||||||
boolean frameFound = false;
|
|
||||||
if (frameToManage != null) {
|
|
||||||
JInternalFrame[] allFrames = desktop.getAllFrames();
|
|
||||||
for (JInternalFrame frame : allFrames) {
|
|
||||||
if (frame == frameToManage) {
|
|
||||||
frameFound = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!frameFound) {
|
|
||||||
// Wenn das Fenster NICHT gefunden wurde
|
|
||||||
if(DEBUG) System.out.println("DEBUG (Opener): Neues Fenster wird erzeugt.");
|
|
||||||
// Fenster über die Factory-Methode erstellen
|
|
||||||
T newFrame = frameFactory.create();
|
|
||||||
// Referenz im Opener aktualisieren
|
|
||||||
// (optional, aber zur Klarstellung)
|
|
||||||
setManagedFrame(newFrame);
|
|
||||||
|
|
||||||
desktop.add(newFrame);
|
|
||||||
// Optional: Feste Startposition für neue Fenster.
|
|
||||||
if(false) newFrame.setLocation(50, 50);
|
|
||||||
try {
|
|
||||||
// Direkt in den Vordergrund bringen
|
|
||||||
newFrame.setSelected(true);
|
|
||||||
} catch (PropertyVetoException pve) {
|
|
||||||
System.err.println(
|
|
||||||
"Fehler beim Setzen des neuen Fensters in den Vordergrund: "+
|
|
||||||
pve.getMessage());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Fenster existiert bereits im Desktop
|
|
||||||
if(DEBUG) System.out.println(
|
|
||||||
"DEBUG (Opener): Bestehendes Fenster wird behandelt.");
|
|
||||||
try {
|
|
||||||
if (frameToManage.isIcon()) {
|
|
||||||
if(DEBUG) System.out.println(
|
|
||||||
"DEBUG (Opener): Fenster war minimiert, wird wiederhergestellt.");
|
|
||||||
frameToManage.setIcon(false);
|
|
||||||
}
|
|
||||||
frameToManage.setVisible(true);
|
|
||||||
frameToManage.setSelected(true);
|
|
||||||
} catch (PropertyVetoException pve) {
|
|
||||||
System.err.println(
|
|
||||||
"Fehler beim Setzen des bestehenden Fensters in den Vordergrund: " +
|
|
||||||
pve.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
desktop.revalidate();
|
|
||||||
desktop.repaint();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,218 +0,0 @@
|
|||||||
/**
|
|
||||||
* Klasse für die Darstellung von Studenten.
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JDesktopPane;
|
|
||||||
import javax.swing.JInternalFrame;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
|
||||||
|
|
||||||
import personen.Person;
|
|
||||||
import personen.studenten.Student;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Diese Klasse ist für die Darstellung der Studenten
|
|
||||||
* zuständig.
|
|
||||||
*
|
|
||||||
* @author konrad
|
|
||||||
*/
|
|
||||||
public class StudentGui extends InternalFrameElternklasse {
|
|
||||||
|
|
||||||
/** Referenz auf das Feld der Studenten. */
|
|
||||||
private Student studentenFeld[];
|
|
||||||
|
|
||||||
// Graphische Elemente der Oberfläche
|
|
||||||
private JTable table;
|
|
||||||
private DefaultTableModel model;
|
|
||||||
private JPanel panel;
|
|
||||||
private JScrollPane scrollPane;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Studenten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public StudentGui(String title, Student studentenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, true, studentenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Studenten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public StudentGui(String title, boolean resizable,
|
|
||||||
Student studentenFeld[], JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, resizable, true, studentenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param closable Flag, ob das Fenster ganz geschlossen werden kann.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Studenten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public StudentGui(String title, boolean resizable, boolean closable,
|
|
||||||
Student studentenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, resizable, closable, true, studentenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param closable Flag, ob das Fenster ganz geschlossen werden kann.
|
|
||||||
* @param maximizable Flag, ob das Fenster maximiert werden kann.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Studenten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public StudentGui(String title, boolean resizable, boolean closable, boolean maximizable,
|
|
||||||
Student studentenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
this(title, resizable, closable, maximizable, true,
|
|
||||||
studentenFeld, desktop, gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Umfangreichster Konstruktor zum Erzeugen eines Fensters
|
|
||||||
* für Studenten, das als JInternalFrame einem JDesktop
|
|
||||||
* hinzugefügt werden kann.
|
|
||||||
* @param title Titel im Kopf des Fensters.
|
|
||||||
* @param resizable Flag, ob die Größe des Fensters änderbar ist.
|
|
||||||
* @param closable Flag, ob das Fenster ganz geschlossen werden kann.
|
|
||||||
* @param maximizable Flag, ob das Fenster maximiert werden kann.
|
|
||||||
* @param iconifiable Flag, ob das Fenster zum Icon minimiert werden kann.
|
|
||||||
* @param angestelltenFeld Referenz auf das Feld der Angestellten.
|
|
||||||
* @param desktop Referenz auf die Arbeitsfläche.
|
|
||||||
* @param gui Referenz auf die zentrale GUI-Klasse.
|
|
||||||
*/
|
|
||||||
public StudentGui(String title, boolean resizable, boolean closable, boolean maximizable,
|
|
||||||
boolean iconifiable,
|
|
||||||
Student studentenFeld[],
|
|
||||||
JDesktopPane desktop, Gui gui) {
|
|
||||||
super(title, resizable, closable, maximizable, iconifiable,
|
|
||||||
desktop, gui);
|
|
||||||
|
|
||||||
this.studentenFeld = studentenFeld;
|
|
||||||
|
|
||||||
this.model = new DefaultTableModel();
|
|
||||||
this.table = new JTable(this.model);
|
|
||||||
|
|
||||||
// Erstellen eines Panels für den Inhalt des internen Frames
|
|
||||||
this.panel = new JPanel(new BorderLayout());
|
|
||||||
|
|
||||||
this.scrollPane = new JScrollPane(this.table);
|
|
||||||
panel.add(scrollPane, BorderLayout.CENTER);
|
|
||||||
|
|
||||||
// Knopf zum Speichern von Änderungen erstellen
|
|
||||||
JButton speichernButton = new JButton("Änderungen speichern");
|
|
||||||
speichernButton.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
aenderungenSpeichern();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
panel.add(speichernButton, BorderLayout.SOUTH);
|
|
||||||
|
|
||||||
this.add(panel);
|
|
||||||
|
|
||||||
// x, y, breite, hoehe
|
|
||||||
this.setBounds(250, 20, 300, 200);
|
|
||||||
this.setVisible(true);
|
|
||||||
String spaltenNamen[] = { "Name", "Semester", "BAföG-Schulden [€]" };
|
|
||||||
erzeugeTabelle(studentenFeld, spaltenNamen);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementierung der abstrakten Methode aus InternalFrameElternklasse.
|
|
||||||
* Diese Methode wird aufgerufen, wenn das Fenster geschlossen wird.
|
|
||||||
* Sie ist dafür zuständig, die spezifische Referenz in der Gui-Klasse
|
|
||||||
* auf null zu setzen.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void handleFrameClosed() {
|
|
||||||
if (mainGuiRef != null) { // mainGuiRef kommt von InternalFrameElternklasse
|
|
||||||
mainGuiRef.setStudentGuiToNull();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Das Datenmodell der Tabelle mit Daten befüllen.
|
|
||||||
* @param datenQuelle 1D-Feld mit Studenten-Objekten.
|
|
||||||
* @param spaltenNamen 1D-Feld mit den Namen bzw.
|
|
||||||
* Überschriften der Spalten.
|
|
||||||
*/
|
|
||||||
private void erzeugeTabelle(Object datenQuelle[], String spaltenNamen[]) {
|
|
||||||
// Erstellen der Daten für die Tabelle
|
|
||||||
Object[][] daten = new Object[datenQuelle.length][spaltenNamen.length];
|
|
||||||
for(int zeile = 0; zeile < datenQuelle.length; zeile++) {
|
|
||||||
int spalte = 0;
|
|
||||||
daten[zeile][spalte++] = ((Person)datenQuelle[zeile]).getName();
|
|
||||||
daten[zeile][spalte++] = ((Student)datenQuelle[zeile]).getSemester();
|
|
||||||
daten[zeile][spalte] = ((Student)datenQuelle[zeile]).getBafoegSchulden();
|
|
||||||
}
|
|
||||||
this.model.setRowCount(datenQuelle.length);
|
|
||||||
this.model.setDataVector(daten, spaltenNamen);
|
|
||||||
this.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Die interaktiven Änderungen in der Tabelle
|
|
||||||
* im Feld der Studenten speichern.
|
|
||||||
*/
|
|
||||||
private void aenderungenSpeichern() {
|
|
||||||
int zeilenN = this.model.getRowCount();
|
|
||||||
int spaltenN = this.model.getColumnCount();
|
|
||||||
String name;
|
|
||||||
int semester;
|
|
||||||
double bafoegSchulden;
|
|
||||||
for(int zeile = 0; zeile < zeilenN; zeile++) {
|
|
||||||
name = (String)(this.model.getValueAt(zeile, 0));
|
|
||||||
Object o = this.model.getValueAt(zeile, 1);
|
|
||||||
semester = 0;
|
|
||||||
// Greift, sobald einmal eine Zelle geändert worden ist
|
|
||||||
if(o instanceof String) {
|
|
||||||
String text = (String)o;
|
|
||||||
semester = Integer.parseInt(text);
|
|
||||||
}
|
|
||||||
// Greift, solange eine Zelle noch nicht geändert worden ist
|
|
||||||
if(o instanceof Integer) {
|
|
||||||
semester = (Integer)(this.model.getValueAt(zeile, 1));
|
|
||||||
}
|
|
||||||
o = this.model.getValueAt(zeile, 2);
|
|
||||||
bafoegSchulden = 0.0;
|
|
||||||
if(o instanceof String) {
|
|
||||||
String text = (String)o;
|
|
||||||
bafoegSchulden = Double.parseDouble(text);
|
|
||||||
}
|
|
||||||
if(o instanceof Double) {
|
|
||||||
bafoegSchulden = (double)(this.model.getValueAt(zeile, 2));
|
|
||||||
}
|
|
||||||
studentenFeld[zeile].setName(name);
|
|
||||||
studentenFeld[zeile].setSemester(semester);
|
|
||||||
studentenFeld[zeile].setBafoegSchulden(bafoegSchulden);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* @author konrad
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
Reference in New Issue
Block a user