[Java] JFrame onClose-Event behandeln (windowClosing)

public class Form1 extends javax.swing.JFrame
{
    public Form1()
    {
        initComponents();
        
        // windowClosing-Event anmelden        
        this.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                closeMainForm();
            }
        });
    }
    
    // wenn gewünscht ein Eventhandler für einen Menüpunkt "Schließen"
    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt)
    {                                             
        closeMainForm();
    }                                            

    // Schließen-Funktion mit Abfrage
    private void closeMainForm()
    {
        if (JOptionPane.showConfirmDialog(null, "Fenster schließen?", "Frage", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
        {
            System.exit(0);
        }
    }
    
    ...
    
}

[Java] Einen modalen Dialog anzeigen

Voraussetzung für die Nutzung eines modalen Dialoges ist die Nutzung eines JDialog. Folgende Eigenschaften sollten gesetzt sein:

  • defaultCloseOperation = DISPOSE
  • modal = true
  • modalityType = APPLICATION_MODAL
  • Form Size Policy = Generate Resize Code
  • Generate Size = true
  • Generate Center = true

Innerhalb des Dialog-Codes sollte folgende Funktion definiert werden:

/**
 * globale Variable, die den Status des Modaldialoges zurückgibt
 */
private int iDialogResult;

/**
 * Dialog anzeigen, auf Abarbeitung warten und iDialogResult zurückgeben
 * @return int-Status
 */
public int showDialog()
{
    // Code-Abarbeitung hält hier an,
    // bis Button "Ok" geklickt wurde
    this.setVisible(true);
    // nach Klick auf Button "Ok" springt die
    // Methode hier mit dem iDialogResult raus
    return iDialogResult;
}

/**
 * Methode des Ok-Buttons
 */
private void btnOkActionPerformed(java.awt.event.ActionEvent evt) {
    // iDialogResult setzen
    if ( ... )
    {
        iDialogResult = 0;
    }
    else
    {
        iDialogResult = 1;
    }

    // Dialog ausblenden
    this.setVisible(false);
    // Dialog zerstören und automatisch zurück
    // zur Abarbeitung von showDialog() springen
    this.dispose();
}

Der Aufruf des Dialoges muss wie folgt aussehen:

// Dialogobjekt erzeugen
DialogClassName dlg = new DialogClassName(this, true);
// auf DialogResult blockierend warten, bis Dialog geschlossen wird
int result = dlg.showDialog();

[Java] MDI-Child hinzufügen

// Funktion addChild fügt ein neues MDI-Child vom Typ JInternalFrame zum MDIParent (JDesktopPane) hinzu
private void addChild(javax.swing.JDesktopPane MDIParent, String caption, int x , int y, int w, int h,
        boolean selected, boolean maximizable, boolean closeable,
        boolean iconifiable, boolean resizable)
{
    MDIChild c = new MDIChild();
    
    MDIParent.add(c);
    
    c.setTitle(caption);
    c.setVisible(true);
    c.setLocation(x, y);
    c.setSize(w, h);
    
    c.setMaximizable(maximizable);
    c.setClosable(closeable);
    c.setIconifiable(iconifiable);
    c.setResizable(resizable);
    
    try
    {
        c.setSelected(selected);
    }
    catch (java.beans.PropertyVetoException e) {}
}

[Java] Mit MDI-Forms arbeiten

  1. neues Projekt anlegen: File->New Project->Java->Java Application
  2. MDI-Parent Formular im Projekt anlegen: File->New File->Swing GUI Forms->JFrame Form
  3. Desktoppane (jDesktopPane1) auf das MDI-Parent ziehen: Design->Palette->Desktop Pane
  4. MDI-Child Formular im Projekt anlegen: File->New File->Swing GUI Forms->JInternalFrame Form
  5. MDI-Child im Code erzeugen:
    NewJInternalFrame c = new NewJInternalFrame();
    jDesktopPane1.add(c);
    c.setVisible(true);
    

Links: