Mega Code Archive

 
Categories / Java Tutorial / Swing Event
 

Extends WindowAdapter

/*  * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  *  *   - Redistributions of source code must retain the above copyright  *     notice, this list of conditions and the following disclaimer.  *  *   - Redistributions in binary form must reproduce the above copyright  *     notice, this list of conditions and the following disclaimer in the  *     documentation and/or other materials provided with the distribution.  *  *   - Neither the name of Sun Microsystems nor the names of its  *     contributors may be used to endorse or promote products derived  *     from this software without specific prior written permission.  *  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */ import java.awt.Dimension; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; /* Framework.java requires no other files. */ public class Framework extends WindowAdapter {   public int numWindows = 0;   private Point lastLocation = null;   private int maxX = 500;   private int maxY = 500;   public Framework() {     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();     maxX = screenSize.width - 50;     maxY = screenSize.height - 50;     makeNewWindow();   }   public void makeNewWindow() {     JFrame frame = new MyFrame(this);     numWindows++;     System.out.println("Number of windows: " + numWindows);     if (lastLocation != null) {       // Move the window over and down 40 pixels.       lastLocation.translate(40, 40);       if ((lastLocation.x > maxX) || (lastLocation.y > maxY)) {         lastLocation.setLocation(0, 0);       }       frame.setLocation(lastLocation);     } else {       lastLocation = frame.getLocation();     }     System.out.println("Frame location: " + lastLocation);     frame.setVisible(true);   }   // This method must be evoked from the event-dispatching thread.   public void quit(JFrame frame) {     if (quitConfirmed(frame)) {       System.out.println("Quitting.");       System.exit(0);     }     System.out.println("Quit operation not confirmed; staying alive.");   }   private boolean quitConfirmed(JFrame frame) {     String s1 = "Quit";     String s2 = "Cancel";     Object[] options = { s1, s2 };     int n = JOptionPane.showOptionDialog(frame,         "Windows are still open.\nDo you really want to quit?",         "Quit Confirmation", JOptionPane.YES_NO_OPTION,         JOptionPane.QUESTION_MESSAGE, null, options, s1);     if (n == JOptionPane.YES_OPTION) {       return true;     } else {       return false;     }   }   public void windowClosed(WindowEvent e) {     numWindows--;     System.out.println("Number of windows = " + numWindows);     if (numWindows <= 0) {       System.out.println("All windows gone.  Bye bye!");       System.exit(0);     }   }   /**    * Create the GUI and show it. For thread safety, this method should be    * invoked from the event-dispatching thread.    */   private static void createAndShowGUI() {     Framework framework = new Framework();   }   public static void main(String[] args) {     // Schedule a job for the event-dispatching thread:     // creating and showing this application's GUI.     javax.swing.SwingUtilities.invokeLater(new Runnable() {       public void run() {         createAndShowGUI();       }     });   }   class MyFrame extends JFrame {     protected Dimension defaultSize = new Dimension(200, 200);     protected Framework framework = null;     public MyFrame(Framework controller) {       super("New Frame");       framework = controller;       setDefaultCloseOperation(DISPOSE_ON_CLOSE);       addWindowListener(framework);       JMenu menu = new JMenu("Window");       menu.setMnemonic(KeyEvent.VK_W);       JMenuItem item = null;       // close       item = new JMenuItem("Close");       item.setMnemonic(KeyEvent.VK_C);       item.addActionListener(new ActionListener() {         public void actionPerformed(ActionEvent e) {           System.out.println("Close window");           MyFrame.this.setVisible(false);           MyFrame.this.dispose();         }       });       menu.add(item);       // new       item = new JMenuItem("New");       item.setMnemonic(KeyEvent.VK_N);       item.addActionListener(new ActionListener() {         public void actionPerformed(ActionEvent e) {           System.out.println("New window");           framework.makeNewWindow();         }       });       menu.add(item);       // quit       item = new JMenuItem("Quit");       item.setMnemonic(KeyEvent.VK_Q);       item.addActionListener(new ActionListener() {         public void actionPerformed(ActionEvent e) {           System.out.println("Quit request");           framework.quit(MyFrame.this);         }       });       menu.add(item);       JMenuBar menuBar = new JMenuBar();       menuBar.add(menu);       setJMenuBar(menuBar);       setSize(defaultSize);     }   } }