Mega Code Archive

 
Categories / Java Tutorial / Swing Event
 

InternalFrameListener and InternalFrameEvent

/*  * 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.  */ /*  * InternalFrameEventDemo.java requires no other files.  */ import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.WindowConstants; import javax.swing.event.InternalFrameEvent; import javax.swing.event.InternalFrameListener; public class InternalFrameEventDemo extends JFrame implements     InternalFrameListener, ActionListener {   JTextArea display;   JDesktopPane desktop;   JInternalFrame displayWindow;   JInternalFrame listenedToWindow;   static final String SHOW = "show";   static final String CLEAR = "clear";   String newline = "\n";   static final int desktopWidth = 500;   static final int desktopHeight = 300;   public InternalFrameEventDemo(String title) {     super(title);     // Set up the GUI.     desktop = new JDesktopPane();     desktop.putClientProperty("JDesktopPane.dragMode", "outline");     // Because we use pack, it's not enough to call setSize.     // We must set the desktop's preferred size.     desktop.setPreferredSize(new Dimension(desktopWidth, desktopHeight));     setContentPane(desktop);     createDisplayWindow();     desktop.add(displayWindow); // DON'T FORGET THIS!!!     Dimension displaySize = displayWindow.getSize();     displayWindow.setSize(desktopWidth, displaySize.height);   }   // Create the window that displays event information.   protected void createDisplayWindow() {     JButton b1 = new JButton("Show internal frame");     b1.setActionCommand(SHOW);     b1.addActionListener(this);     JButton b2 = new JButton("Clear event info");     b2.setActionCommand(CLEAR);     b2.addActionListener(this);     display = new JTextArea(3, 30);     display.setEditable(false);     JScrollPane textScroller = new JScrollPane(display);     // Have to supply a preferred size, or else the scroll     // area will try to stay as large as the text area.     textScroller.setPreferredSize(new Dimension(200, 75));     textScroller.setMinimumSize(new Dimension(10, 10));     displayWindow = new JInternalFrame("Event Watcher", true, // resizable         false, // not closable         false, // not maximizable         true); // iconifiable     JPanel contentPane = new JPanel();     contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));     contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));     b1.setAlignmentX(CENTER_ALIGNMENT);     contentPane.add(b1);     contentPane.add(Box.createRigidArea(new Dimension(0, 5)));     contentPane.add(textScroller);     contentPane.add(Box.createRigidArea(new Dimension(0, 5)));     b2.setAlignmentX(CENTER_ALIGNMENT);     contentPane.add(b2);     displayWindow.setContentPane(contentPane);     displayWindow.pack();     displayWindow.setVisible(true);   }   public void internalFrameClosing(InternalFrameEvent e) {     displayMessage("Internal frame closing", e);   }   public void internalFrameClosed(InternalFrameEvent e) {     displayMessage("Internal frame closed", e);   }   public void internalFrameOpened(InternalFrameEvent e) {     displayMessage("Internal frame opened", e);   }   public void internalFrameIconified(InternalFrameEvent e) {     displayMessage("Internal frame iconified", e);   }   public void internalFrameDeiconified(InternalFrameEvent e) {     displayMessage("Internal frame deiconified", e);   }   public void internalFrameActivated(InternalFrameEvent e) {     displayMessage("Internal frame activated", e);   }   public void internalFrameDeactivated(InternalFrameEvent e) {     displayMessage("Internal frame deactivated", e);   }   // Add some text to the text area.   void displayMessage(String prefix, InternalFrameEvent e) {     String s = prefix + ": " + e.getSource();     display.append(s + newline);     display.setCaretPosition(display.getDocument().getLength());   }   // Handle events on the two buttons.   public void actionPerformed(ActionEvent e) {     if (SHOW.equals(e.getActionCommand())) {       // They clicked the Show button.       // Create the internal frame if necessary.       if (listenedToWindow == null) {         listenedToWindow = new JInternalFrame("Event Generator", true, // resizable             true, // closable             true, // maximizable             true); // iconifiable         // We want to reuse the internal frame, so we need to         // make it hide (instead of being disposed of, which is         // the default) when the user closes it.         listenedToWindow             .setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);         // Add an internal frame listener so we can see         // what internal frame events it generates.         listenedToWindow.addInternalFrameListener(this);         // And we mustn't forget to add it to the desktop pane!         desktop.add(listenedToWindow);         // Set its size and location. We'd use pack() to set the size         // if the window contained anything.         listenedToWindow.setSize(300, 100);         listenedToWindow.setLocation(desktopWidth / 2             - listenedToWindow.getWidth() / 2, desktopHeight             - listenedToWindow.getHeight());       }       // Show the internal frame.       listenedToWindow.setVisible(true);     } else { // They clicked the Clear button.       display.setText("");     }   }   /**    * Create the GUI and show it. For thread safety, this method should be    * invoked from the event-dispatching thread.    */   private static void createAndShowGUI() {     // Make sure we have nice window decorations.     JFrame.setDefaultLookAndFeelDecorated(true);     // Create and set up the window.     JFrame frame = new InternalFrameEventDemo("InternalFrameEventDemo");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // Display the window.     frame.pack();     frame.setVisible(true);   }   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();       }     });   } }