WindowClosing probleme

Abbadon

Mitglied
Hallo zusammen,

habe da grade ein kleines Problem. In einem JTree verwalte ich unterschiedliche Dokumente MP3, Wav etc. sowie Bilddatein. Die man auch öffnen kann und die dann dementsprechen abgebildet werden bzw abgespielt werden.
Die Dokumente erzeuge ich in einer Typen Spezifizierten Klasse für Mp3, Ton und Bilder.
Ich verwalte dazu eine Liste die alle Elemente aufnehmen soll und sobald das dispose event eintritt werden die aus der Liste entfernd.
In der Hauptklasse füge ich dann alles zusammen. Jetzt will ich mit einem Menü punkt alle noch offenen Fenster Schließen. Nur stoße ich da auf ein Problem und die frage wie.
Java:
public class DokumentAusgabeEventHandler extends WindowAdapter {
	
	@Override
	public void windowClosing(WindowEvent we) {
		Window w = we.getWindow();
		((DokumentBeenden) w).ausgabeBeenden();
		w.dispose();
	}
}

Das ist die Handlerklasse die ich jedem Frame mitgebe indem ich this.addWindowListener aufrufe und die Klasse als Parameter angebe.

Java:
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Graphics;
import java.io.File;
import java.net.MalformedURLException;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TonDokumentAusgeben extends DokumentBeenden {

	private String tonName;
	private AudioClip audioClip;
	
	/**
	 * Konstruktor der Klasse in der die Tonverarbeitung vorgenommen wird. 
	 * 
	 * @param tonDokument
	 *            zu verarbeitene Ton datei
	 */
	public TonDokumentAusgeben(TonDokument tonDokument) {
		// Übergabe des Namens der Ton datei
		tonName = tonDokument.getName();
		// Erzeugung eines File-Objektes der den Pfad der tonDatei übergeben wird
		File file = new File(tonDokument.getFilePath());
		try {
			// Übergabe des Pfades an den audioClip 
			audioClip = Applet.newAudioClip(file.toURI().toURL());
		} catch (MalformedURLException malurle) {
			System.out.println(malurle.toString());
			System.exit(0);
		}
		this.setTitle("Tondokument Ausgabe");
		this.setSize(400, 300);
		this.setResizable(false);
		this.setLocations();
		Main.getList().add(tonDokument.getName());
		this.addWindowListener(new DokumentAusgabeEventHandler());
		this.setContentPane(new JPanel() {
			@Override
			public void paintComponent(Graphics g) {
				g.drawString("Es erklingt \"" + tonName + "\"", 30, 60);
			}
		});
		audioClip.loop();
		this.setVisible(true);
	}

	/**
	 * Überschreibung der Methode "ausgabeBeenden" aus dem interface
	 * "DokumentAusgabeIF" Sorgt für das Ordnungsgemäße beenden des audioClips.
	 * 
	 * @see lektion3.DokumentAusgabeIF#ausgabeBeenden()
	 */
	@Override
	public void ausgabeBeenden() {
		if (audioClip != null) {
			audioClip.stop();
		}
		if (this.DISPOSE_ON_CLOSE != 1){
			System.out.println("close");
			Main.getList().remove(this.tonName);
			System.out.println(Main.getList().size());
		}
	}
	
}
Das jetzt eine Ausgabe klasse die anderen sind auch so aufgebaut mit leichten anpassungen.
Die System anweisungen sind nur test weise da zum prüfen ob das auch alles eintritt. Die Liste habe ich in der Hauptklasse erzeugt weil ich dort nun auch die Fenster schließen will die nun noch offen sind. Die Methode ausgabeBeenden erzeugte ich in einer abstrakten Klasse die auch gleich von JFrame erbt weil mehrfachvererbung ja nicht unterstüzt wird.

Java:
public abstract class DokumentBeenden extends JFrame{
	
	
	
	abstract void ausgabeBeenden();
}
Doch wie gehe ich am besten daran?
Ich habe schon rum probiert doch werden diese Fenster einfach nicht geschlossen entweder wird mein Hauptfenster geschlossen oder es passiert gar nichts.
Hat da jemand eine gute Idee von euch.

Grüßle
 

KrokoDiehl

Top Contributor
Da du deinen WindowListener nur an den Frame hängst, kriegt auch nur der das Schließen-Ereignis von dem Frame mit.
Für eine Funktion, die alle offenen Fenster schließt, wäre ein WindowListener auch der falsche Ansatz. Vielversprechender scheint mir hier die statische Methode
Code:
Window.getWindows()
:
Java:
for (Window win : Window.getWindows())
{
    if (win /*irgendeine Prüfung für Fenster die du schließen willst*/)    
        win.setVisible(false);
}
So in etwa zumindest. Das könntest du im ActionListener deiner Aktion ausführen. Allerdings muss man wohl aufpassen, was zB in dem Fall ist, wenn du das Hauptfenster schließt und deine Anwendung damit beendest, oder wenn du Parent-Fenster vor den Kindern schließt.
 

Tharsonius

Bekanntes Mitglied
Erstelle Dir doch einen FensterManager, der für Dich die Fenster öffnet und auch wieder schließt. Alle offenen Fenster hält der in einer Liste und wenn Du alles Schließen willst dann gehst einfach die Liste durch.

Hier mal ein Fenstermanager für JInternalFrame, den ich in meinem Programm verwende:

Java:
package basis;

import java.util.LinkedList;
import java.util.List;

import javax.swing.JDesktopPane;

final class FensterManager
{
	private Sitzung session;
	private JDesktopPane desktop;
	private int fensterpositionx;
	private int fensterpositiony;
	private List<InternesBasisFenster> fensterliste;

	protected FensterManager(Sitzung session, JDesktopPane desktop)
	{
		this.session = session;
		this.desktop = desktop;
		fensterpositionx = 0;
		fensterpositiony = 0;
		fensterliste = new LinkedList<InternesBasisFenster>();
	}
	
	protected final void exit()
	{
		schliesseAlleFenster();
	}

	protected final void schliesseAlleFenster()
	{
		InternesBasisFenster fenster;
		while(fensterliste.isEmpty() == false)
		{
			fenster = fensterliste.remove(0);
			fenster.exit();
			fenster.dispose();
		}
	}

	protected final void zeigeFenster(InternesBasisFenster fenster)
	{
		zeigeFenster(fenster, fensterpositionx, fensterpositiony);
		fensterpositionx = fensterpositionx + 15;
		if(fensterpositionx >= 300)
			fensterpositionx = fensterpositionx - 300;
		fensterpositiony = fensterpositiony + 15;
		if(fensterpositiony >= 200)
			fensterpositiony = fensterpositiony - 200;
	}

	protected final void zeigeFenster(InternesBasisFenster fenster, int posx, int posy)
	{
		fenster.setLocation(posx, posy);
		desktop.add(fenster);
		fenster.setVisible(true);
		fensterliste.add(fenster);
	}
	
	public final void schliesseFenster(InternesBasisFenster fenster)
	{
		int index = fensterliste.indexOf(fenster);
		if(index == -1)
		{
			session.showError("000040", "Fehler in der Fensterverwaltung.");
			return;
		}
		fenster.exit();
		fensterliste.remove(index);
		fenster.dispose();
	}
}
 

Abbadon

Mitglied
Hi,

wollte euch zwei eben Danken für die schnellen Informationen. Habe das jetzt mit der einfachen for schleife gelöst nachdem ich einen Owner anmelden musste klappt das nun perfekt.
Dank dir erstmal KrokoDiehl

Den FensterManger bzw den Code habe ich mir mal abgeschrieben weil der ist doch sehr praktisch für spätere Anwendungen.
Dank dir für die schnelle hilfe Tharsonius
 
S

SOS

Gast
Der Thread mag etwas alt sein ich probier es trotzdem...
Ich sitze nämlich an selben Problem und probier verschiedene Sachen...
erstmal hatte Ich eine List und habe die BildDokumentAusgabe zb reingesteckt und in dieser List iteriert
und beim klick einfach geschlossen das ging, war aber nicht elegant
wie kann ich alle geöffneten frames in einer Liste speichern mithilfe von WindowEvent we.getWindow() ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M AWT WindowClosing wird nicht aufgerufen AWT, Swing, JavaFX & SWT 4
R WindowClosing Event - Schließen rückgängig machen? AWT, Swing, JavaFX & SWT 2
E windowClosing() - JFrame nicht durch X knopf gleich beenden? AWT, Swing, JavaFX & SWT 9
N windowClosing() Frage AWT, Swing, JavaFX & SWT 9
C WindowClosing in UNIX Systemen AWT, Swing, JavaFX & SWT 2
H WindowClosing Event abbrechen AWT, Swing, JavaFX & SWT 2
P windowClosing bei JDialog wird nicht ausgeführt AWT, Swing, JavaFX & SWT 6
G windowClosing Problem AWT, Swing, JavaFX & SWT 2
A windowClosing AWT, Swing, JavaFX & SWT 2
T windowClosing-Event wird 2x aufgerufen AWT, Swing, JavaFX & SWT 5
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5
C 3 kleine Probleme... AWT, Swing, JavaFX & SWT 13
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
H JTree Probleme AWT, Swing, JavaFX & SWT 9
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
K 2D-Grafik .GIF macht mir Probleme AWT, Swing, JavaFX & SWT 14
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
T JTable Graphik probleme AWT, Swing, JavaFX & SWT 3
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
P Probleme mit setIconImage AWT, Swing, JavaFX & SWT 8
U Swing Probleme mit Asynchronen Prozessen und Swing: AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben