From 22f5d6d57dd6b64cf6bca155b4027a304e171306 Mon Sep 17 00:00:00 2001 From: mofixx Date: Fri, 25 Jul 2025 13:00:46 +0200 Subject: [PATCH] gui Folder entfernt --- gui/AngestellterGui.java | 207 --------------- gui/DHStudentGui.java | 212 --------------- gui/Gui.java | 274 -------------------- gui/InternalFrameElternklasse.java | 85 ------ gui/InternalFrameHilfsklasseZumOeffnen.java | 139 ---------- gui/StudentGui.java | 218 ---------------- gui/package-info.java | 9 - 7 files changed, 1144 deletions(-) delete mode 100644 gui/AngestellterGui.java delete mode 100644 gui/DHStudentGui.java delete mode 100644 gui/Gui.java delete mode 100644 gui/InternalFrameElternklasse.java delete mode 100644 gui/InternalFrameHilfsklasseZumOeffnen.java delete mode 100644 gui/StudentGui.java delete mode 100644 gui/package-info.java diff --git a/gui/AngestellterGui.java b/gui/AngestellterGui.java deleted file mode 100644 index e6b6aa9..0000000 --- a/gui/AngestellterGui.java +++ /dev/null @@ -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); - } - } - -} diff --git a/gui/DHStudentGui.java b/gui/DHStudentGui.java deleted file mode 100644 index 691c8ee..0000000 --- a/gui/DHStudentGui.java +++ /dev/null @@ -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); - } - } - -} diff --git a/gui/Gui.java b/gui/Gui.java deleted file mode 100644 index 82f5c16..0000000 --- a/gui/Gui.java +++ /dev/null @@ -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 studentenOpener; - private InternalFrameHilfsklasseZumOeffnen dhStudentenOpener; - private InternalFrameHilfsklasseZumOeffnen 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(); - } - } - -} - - diff --git a/gui/InternalFrameElternklasse.java b/gui/InternalFrameElternklasse.java deleted file mode 100644 index 60ae81f..0000000 --- a/gui/InternalFrameElternklasse.java +++ /dev/null @@ -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(); - -} - diff --git a/gui/InternalFrameHilfsklasseZumOeffnen.java b/gui/InternalFrameHilfsklasseZumOeffnen.java deleted file mode 100644 index 61ed8e4..0000000 --- a/gui/InternalFrameHilfsklasseZumOeffnen.java +++ /dev/null @@ -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 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 create(); - } - - private InternalFrameFactory frameFactory; - - /** - * Konstruktor. - * - * @param desktop - * @param mainGui - * @param factory - */ - public InternalFrameHilfsklasseZumOeffnen(JDesktopPane desktop, Gui mainGui, InternalFrameFactory 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(); - } - }); - } -} diff --git a/gui/StudentGui.java b/gui/StudentGui.java deleted file mode 100644 index 4448dd3..0000000 --- a/gui/StudentGui.java +++ /dev/null @@ -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); - } - } - -} diff --git a/gui/package-info.java b/gui/package-info.java deleted file mode 100644 index 72910ac..0000000 --- a/gui/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - * - */ -/** - * @author konrad - * - */ -package gui; -