WindowStateListener selbst implementieren

Bitte aktiviere JavaScript!
Guten Tag!

Ich möchte gern dass meine Fenstern (Frames) ein selbst programmiertes WindowsStateListener namens "FrameEventHandler " haben.
Ich möchte zum Beispiel, dass alle WindowEvents eine zeile ausgeben. Ich habe es so gemacht:
Im Frame:
Attribut:
protected FrameEventHandler eventHandler;
Im Constructor:
eventHandler = new FrameEventHandler(this);
this.addWindowStateListener(eventHandler);

Die klasse "FrameEventHandler" enthält eine Funktion windowStateChanged und ist so:
"
public class FrameEventHandler extends WindowAdapter{
….
@Override
public void windowStateChanged(WindowEvent we){

//Event anzeigen
System.out.println("windowStateChanged"+ we.toString());

}
Ich möchte bewusst eine eigene Klasse für den neuen WindowStateListener.
Ich sehe zwar, dass ein neues FrameEventhandler gebaut wird, aber die FunktionwindowStateChanged wird nie ausgeführt, egal, was ich mit dem Fenster mache (schliessen, verkleinern, etc...)
Kann mir jemand erklären was fehlt?

Vielen Dank im Voraus
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Hast Du auch minimieren, maximieren probiert? Wenn ja, dann poste mal kompletten Code (bitte in Code-Tags setzen: [code=Java]Dein Code[/code])
 
Entschuldigung, mein Notebook war eine Weile außer Gefecht.
Hier ist der Code der Klasse, die ich als EventHandler benutzen möchte:
Java:
import java.awt.*;
import java.awt.event.*;
import java.util.Hashtable;
import java.util.Enumeration;
public class FrameEventHandler extends WindowAdapter{
   
     private DokumentAusgabeIF ausgabeModel;
     private int zeile, spalte;
     Hashtable modelTable;
     Object key;
     private DokumentAusgabe ausgabe;
    
  /**
     *Diese Funktion schliesst das Frame und beendet das Ton abspielen
     *wenn es ein Ton/MP3 Dokument war
     *@param we WindowsEvent
   
     */
     @Override
     public void windowStateChanged(WindowEvent we){
       System.out.println("frameEventHandler WindowsEvent");  
     }
    
     public void windowClosing(WindowEvent we) {
       System.out.println("frameEventHandler WindowsClosing");
       ausgabe.actionBeenden();
     }
    
     public FrameEventHandler(DokumentAusgabe ausgabe)
     {
         System.out.println("frameEventHandler");
      modelTable = new Hashtable();
      addModel(ausgabe);
     }
    
     public void addModel(DokumentAusgabe model) {
      key=new Integer(model.hashCode());
      modelTable.put(key, model);
     }
    
     public void removeModel(DokumentAusgabe ausgabe) {
      key=new Integer(ausgabe.hashCode());
      modelTable.remove(key);
     }
Und hier ist der Code, vom Frame, bei dem ich den WindowState in einer separaten Klasse behandeln möchte
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.WindowEvent;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class DokumentAusgabe extends JFrame{
   
    static public LinkedList fensterListe= new LinkedList();
    protected int topInset;
    protected static Dimension mainSize;
    protected FrameEventHandler eventHandler;
   
    private static final int  X_POS=200;
    private static final int  Y_POS=200;
    private static final int  INDENT=30;
   
    public DokumentAusgabe() {
       }
   
    public DokumentAusgabe(Dimension mainSize) {
 this.mainSize = mainSize;
    }
   
   
   
    public void erzeugeFenster(DokumentAusgabe ausgabe, Dokument doc, String titel) {
 int index;
 this.setTitle(titel);
 this.setSize(300,100);
 this.topInset = Main.getTopInset();
 
 index= addAusgabeToList((JFrame)this);
 this.setLocation(Main.getTopInset()+ this.mainSize.width + (index*INDENT), Y_POS + (index*INDENT));
 this.setResizable(false);
 this.setVisible(true);
 eventHandler = new FrameEventHandler(ausgabe);
 ausgabe.addWindowStateListener(eventHandler);
    }
Die Funktion "erzeugeFenster" wird ausgeführt, wenn ich ein Fenster öffne (ein Frame "ausgabe")
In der Ausgabe sehe ich "frameEventHandler" also wird der Konstruktor von "FrameEventHandler" ausgeführt.
Aber wenn ich ein Fenster "ausgabe" Schliessen, wird es zwar geschlossen aber keine Funktion von "frameEventHandler" wird ausgeführt

Was mache ich das falsch?
Vielen Dank im Voraus
 
Zeig mal, wo du Fenster erzeugst.

Das da mit ausgabe und this in der Methode den gleichen Typ haben und beide benutzt werden, ist zumindest verdächtig, vermutlich erzeugst du zwei Fenster, von denen nur eins angezeigt wird
 
Das Fenster wird erzeugt, wenn man auf einen Knoten in einem Treeview doppelklickt.
Jeder Knoten ist entweder ein Ordner, ein Bild oder ein Tondokument.
Die Klasse DokumentAusgabe erbt von JFrame

Java:
package medien;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
public class BildDokumentAusgabe  extends DokumentAusgabe implements DokumentAusgabeIF{
  
    private Image bild;
    private String bildName;
  
    public BildDokumentAusgabe(BildDokument bildDokument) {
 
 bildName = bildDokument.getName();
 [B]erzeugeFenster[/B](this, (Dokument) bildDokument, "BilddokumentAusgabe Ausgabe");
 if(this.bildLaden(bildDokument.getFilePath())) {
     this.setSize(this.limitSize(bild.getWidth(this), bild.getHeight(this)));
 }
 else
 {
     this.setSize(400,  100);
 }
 this.setContentPane(new JPanel() {
     @Override
     public void paintComponent(Graphics g) {
  g.drawImage(bild,  0, 0, this);
     }
   
 });

    }
  
 
 
    private boolean bildLaden(String filePath) {
 
 
 this.bild = Toolkit.getDefaultToolkit().getImage(filePath);
     MediaTracker tracker = new MediaTracker(this);
     tracker.addImage(this.bild, 0);
     try {
   tracker.waitForID(0);
   return true;
 }
 catch (InterruptedException ie){
   System.out.println(ie.toString() + " beim Laden des Bildes "+ filePath);
   return false;
 }
 
    }
 
Erstmal: Wenn du irgendwo casten musst, machst du was falsch. Alle casts in deinem Code sind überflüssig und machen das ganze nur schlechter lesbar.

Dann: an eine Methode von sich selbst this zu übergeben, ist Unsinn und nur Fehlerquelle, streich das auch aus deinem obigen Code.

Dann: erbe nicht von Frame, sondern nutz einfach ein JFrame.

Dann: Generics gibts nicht ohne Grund.

Und dann der Grund für den Probleme: nutz addWindowListener anstatt addWindowStateListener
 
Ja mit dem addWindowListener klappt es, da bin ich schon ein Stück weiter, vielen Dank!
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben