windowClosing() - JFrame nicht durch X knopf gleich beenden?

  • Themenstarter Themenstarter ein verzweifelter
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
E

ein verzweifelter

Gast
Code:
import java.awt.event.WindowAdapter;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class FrameTester extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 4261975535381435203L;

	public FrameTester(String title) {
		super(title);
		setSize(200, 200);
		setLocation(200, 200);
		setResizable(false);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		addWindowListener(new WindowAdapter() {
			public void windowClosing() {
				if (JOptionPane.showConfirmDialog(null, "wirklich schliessen?",
						"Bestaetigung", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
					System.exit(0);
				}
			}
		});
	}

	public static void main(String[] args) {
		FrameTester test = new FrameTester("hund");
		test.setVisible(true);
	}

}

Warum geht das nicht, dass ich dadurch den ConfirmationDialog bekomme!?
Und wie muss ich es machen, dass ich wenn ich auf das X drücke eben erst so eine bestätigungs anforderung bekomme?

danke schonmal im Voraus!!!
 
public void windowClosing() ist eine völlig beliebige von dir ausgedachte Operation,
warum sollte irgendjemand diese Operation aufrufen?

du musst schon eine der Operationen des Interfaces überschreiben, da ist jedes Detail wichtig

(edit: wenn du diesen geschickten Hinweis nicht verstehst weil du gar nicht weißt, was da grundsätzlich passiert, dann sag Bescheid)
 
zu beachten sind die genaue Schreibweise des Operationsnamens als auch Anzahl + Typ aller Parameter (!)
 
@Override hilft übrigens solche Fehler zu vermeiden - Methoden, die eine andere überschreiben sollen als @Override taggen und gucken, ob der Compiler mit dir einer Meinung ist 😉.
 
Wer implementiert eigentlich hier das Interface WindowsAdapter? Deine Klasse FrameTester sollte es tun und du solltest der Funktion AddWindowsListener this übergeben. Du erzeugst da ein anonymes WindowsAdapter-Objekt und übergibst es dieser Methode. aber dein eigentliches Frame hat damit überhaupt nichts zu tun!
Du gibst da einen Link als Referenz dann soltest du das Beispiel dir genauer ansehen.

Das Beispiel aus deinem Link:

Code:
import javax.swing.*;
import java.awt.event.*;

class FensterWegImplementsAll extends JFrame implements WindowListener
{
  public FensterWegImplementsAll()
  {
    setSize( 400, 400 );

    addWindowListener( this );

    setVisible( true );
  }

  // Implementiere WindowListener

  public void windowClosing( WindowEvent event ) {
    System.exit( 0 );
  }

  public void windowClosed( WindowEvent event ) {}

  public void windowDeiconified( WindowEvent event ) {}

  public void windowIconified( WindowEvent event ) {}

  public void windowActivated( WindowEvent event ) {}

  public void windowDeactivated( WindowEvent event ) {}

  public void windowOpened( WindowEvent event ) {}

  public static void main( String args[] )
  {
    new FensterWegImplementsAll();
  }
}
 
Nirgends steht geschrieben, das das Frame selbst sein WindowListener sein muss. Da kann auch jedes beliebige andere Objekt stehen - mit einer inneren anonymen Klasse hat's halt den Vorteil des Vollzugriffs auf alle Member des Frames. Ich verstehe nicht, was du uns sagen willst.

mpG
Tobias
 
der Link war nur wichtig für die genaue Signatur der Operation,

man wird doch wohl mal WindowAdapter überschreiben dürfen oder nicht? 😉
wieso auf einmal der unschöne Vorschlag, das JFrame mit leeren Operationen zu verunstalten?

es ist sicherer, das stimmt allerdings, bei falschen Operationen meckert der Compiler,
 
Deshalb in Eclipse einschalten, dass eine Warning augegeben wird, wenn eine überschriebene Methode nicht mit @Override markiert ist und brav taggen. Schon gibt es keine Probleme mehr. Alternativ Source->Override/Implement Methods.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben