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.
Das ist die Handlerklasse die ich jedem Frame mitgebe indem ich this.addWindowListener aufrufe und die Klasse als Parameter angebe.
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.
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
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());
}
}
}
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();
}
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