public class Dlg extends JDialog {
  /** Gibt an, ob das Dialogfenster ohne Bedingungen geschlossen werden soll */
  private boolean forceClose=false;
  public Dlg(Dialog owner, String title, boolean modal)	{
    super(owner,title,modal);
    initDialog();
  }
  public Dlg(Frame owner, String title, boolean modal) {
    super(owner,title,modal);
    initDialog();
  }
  protected void initDialog() {
    this.setResizable(true);
    setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    this.addWindowListener(
      new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          if(forceClose || canClose()) {
            windowClosing();
            setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
          }
        }
      }
    );
  }
  public boolean canClose() {
    // Hier sagst Du, ob es OK ist oder nicht
    // z.B. abhängig davon, ob sich Daten geändert haben oder nicht; Dialog mit Frage etc.
    return false;
  }
  protected void windowClosing() {
    // Hier kannst Du noch was machen, bevor das Dialogfenster geschlossen wird
  }
  public void closeDialog() {
    // Mit dieser Methode wird das Dialogfenster ohne Bedingungen geschlossen
    // Es bleibt dem Programmierer überlassen vorher canClose() aufzurufen
    this.forceClose = true;
    dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
  }
}