Files
ProgrammierenSemester2/gui/InternalFrameElternklasse.java
2025-07-25 11:32:24 +02:00

86 lines
2.4 KiB
Java

/**
* 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();
}