Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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){
}
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?
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
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