Bestätigung vor Programmende (Java): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
Zeile 35: Zeile 35:
 
import javax.swing.*;  
 
import javax.swing.*;  
  
public class WindowClosingDemo extends JFrame {  
+
public class WindowClosingDemo {  
 
   //Konstruktor
 
   //Konstruktor
 
   public WindowClosingDemo(String title) {  
 
   public WindowClosingDemo(String title) {  
       super(title);  
+
       JFrame frame = new JFrame(title);  
 
       Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();  
 
       Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();  
       setSize((int)dim.width*60/100, (int)dim.height*60/100);  
+
       frame.setSize((int)dim.width*60/100, (int)dim.height*60/100);  
       setLocationRelativeTo(null);  
+
       frame.setLocationRelativeTo(null);  
       setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); //Abschalten der Standard-Verhaltens für das Schließen des Fensters  
+
       frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); //Abschalten des Standard-Verhaltens für das Schließen des Fensters  
 
        
 
        
 
       //Neues Verhalten für das Schließen des Fensters
 
       //Neues Verhalten für das Schließen des Fensters
       addWindowListener(new WindowAdapter() {  
+
       frame.addWindowListener(new WindowAdapter() {  
 
         public void windowClosing(WindowEvent e) {  
 
         public void windowClosing(WindowEvent e) {  
 
             exit();  
 
             exit();  
Zeile 64: Zeile 64:
 
       menuBar.add(fileMenu);  
 
       menuBar.add(fileMenu);  
 
        
 
        
       setJMenuBar(menuBar);  
+
       frame.setJMenuBar(menuBar);  
 
   }  
 
   }  
 
      
 
      
Zeile 85: Zeile 85:
 
   //Einstiegspunkt in die Applikation
 
   //Einstiegspunkt in die Applikation
 
   public static void main(String[] args) {  
 
   public static void main(String[] args) {  
       new WindowClosingDemo("WindowClosingDemo").setVisible(true);  
+
       SwingUtilities.invokeLater(new Runnable() {
 +
        public void run() {
 +
            WindowClosingDemo wcd = new WindowClosingDemo("WindowClosingDemo");
 +
            wcd.setVisible(true);
 +
        }
 +
      });
 +
     
 
   }  
 
   }  
 
}
 
}

Version vom 26. Mai 2014, 12:41 Uhr

Häufig kommt es vor, dass man vor Beenden eines Programmes noch Aktionen durchführen möchte. Zum Teil werden dazu Bestätigungen des Benutzers benötigt, die man sich noch vor Programmende einholen kann.


An einem kleinen Beispiel soll nun eine mögliche Lösung vorgestellt werden.

Um die gewünschte Funktion möglichst einfach, übersichtlich und wiederverwendbar zu halten, schreiben wir uns zunächst eine private Methode, die die Funktionalität bereit stellt. Auf diese Art und Weise können wir die Methode unabhängig vom Listener verwenden. <code=java>

  //Methode zur Anzeige eines Bestätigungsdialoges
  private void exit() { 
     int result = JOptionPane.showConfirmDialog(null, 
     "Möchten Sie das Programm beenden?", 
     "Programm beenden", 
     JOptionPane.YES_NO_CANCEL_OPTION); 
     switch(result) { 
        case JOptionPane.YES_OPTION: 
        System.exit(0); //Aktion(en) bei Klicken auf den "Ja-Button"
        case JOptionPane.NO_OPTION: 
        //vielleicht ist hier was zu tun, z.B. Datenbank Rollback etc.
     } 
  }

</code=java> Für die Bestätigung der Aktion vor Programmende benutzen wir eine JOptionPane-Instanz, die einen einfachen Dialog präsentiert. Den Rückgabewert der Benutzeraktion in Form eines int-Wertes werten wir in einem switch-Konstrukt aus.


Ein fertiges Beispiel demonstriert die Verwendung für Menüs und Buttons (ActionListener) und Fenster-Komponenten (WindowListener). <code=java> import java.awt.*; import java.awt.event.*; import javax.swing.*;

public class WindowClosingDemo {

  //Konstruktor
  public WindowClosingDemo(String title) { 
     JFrame frame = new JFrame(title); 
     Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
     frame.setSize((int)dim.width*60/100, (int)dim.height*60/100); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); //Abschalten des Standard-Verhaltens für das Schließen des Fensters 
     
     //Neues Verhalten für das Schließen des Fensters
     frame.addWindowListener(new WindowAdapter() { 
        public void windowClosing(WindowEvent e) { 
           exit(); 
        } 
     }); 
     
     JMenuBar menuBar = new JMenuBar(); 
     
     JMenu fileMenu = new JMenu("Datei"); 
     JMenuItem exitItem = new JMenuItem("Beenden"); 
     exitItem.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
           exit(); 
        } 
     }); 
     fileMenu.add(exitItem); 
     menuBar.add(fileMenu); 
     
     frame.setJMenuBar(menuBar); 
  } 
   
  //Methode zur Anzeige eines Bestätigungsdialoges
  private void exit() { 
     int result = JOptionPane.showConfirmDialog(null, 
     "Möchten Sie das Programm beenden?", 
     "Programm beenden", 
     JOptionPane.YES_NO_CANCEL_OPTION); 
     switch(result) { 
        case JOptionPane.YES_OPTION: 
        System.exit(0); //Aktion(en) bei Klicken auf den "Ja-Button"
        case JOptionPane.NO_OPTION: 
        //vielleicht ist hier was zu tun, z.B. Datenbank Rollback etc.
     } 
  } 
  //Einstiegspunkt in die Applikation
  public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() {
        public void run() {
           WindowClosingDemo wcd = new WindowClosingDemo("WindowClosingDemo");
           wcd.setVisible(true);
        }
     });
      
  } 

} </code=java>