219 lines
7.3 KiB
Java
219 lines
7.3 KiB
Java
/**
|
|
* 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);
|
|
}
|
|
}
|
|
|
|
}
|