Java Tutorial/Swing Event/InternalFrameListener

Материал из Java эксперт
Перейти к: навигация, поиск

InternalFrameEvent Event Subtypes

Event Subtype IDAssociated Interface MethodINTERNAL_FRAME_ACTIVATEDinternalFrameActivatedINTERNAL_FRAME_CLOSEDinternalFrameClosedINTERNAL_FRAME_CLOSINGinternalFrameClosingINTERNAL_FRAME_DEACTIVATEDinternalFrameDeactivatedINTERNAL_FRAME_DEICONIFIEDinternalFrameDeiconifiedINTERNAL_FRAME_FIRSTN/AINTERNAL_FRAME_ICONIFIEDinternalFrameIconifiedINTERNAL_FRAME_LASTN/AINTERNAL_FRAME_OPENEDinternalFrameOpened


InternalFrameListener and InternalFrameEvent

   <source lang="java">

/*

* 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();
     }
   });
 }

}</source>





Listening to InternalFrameListener

   <source lang="java">

public interface InternalFrameListener extends EventListener {

 public void internalFrameActivated(InternalFrameEvent internalFrameEvent);
 public void internalFrameClosed(InternalFrameEvent internalFrameEvent);
 public void internalFrameClosing(InternalFrameEvent internalFrameEvent);
 public void internalFrameDeactivated(InternalFrameEvent internalFrameEvent);
 public void internalFrameDeiconified(InternalFrameEvent internalFrameEvent);
 public void internalFrameIconified(InternalFrameEvent internalFrameEvent);
 public void internalFrameOpened(InternalFrameEvent internalFrameEvent);

}</source>





Reports all internal frame events that occur on one internal frame

   <source lang="java">

import java.awt.BorderLayout; import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.event.InternalFrameEvent; import javax.swing.event.InternalFrameListener;

public class InternalFrameListenerDemo {

 public static void main(final String[] args) {
   JFrame frame = new JFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JDesktopPane desktop = new JDesktopPane();
   JInternalFrame internalFrame = new JInternalFrame("Can Do All", true, true, true, true);
   desktop.add(internalFrame);
   internalFrame.setBounds(25, 25, 200, 100);
   JLabel label = new JLabel(internalFrame.getTitle(), JLabel.CENTER);
   internalFrame.add(label, BorderLayout.CENTER);
   internalFrame.setVisible(true);
   internalFrame.addInternalFrameListener(new InternalFrameListener(){
     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);
     }
      void displayMessage(String prefix, InternalFrameEvent e) {
         System.out.println(prefix + ": " + e.getSource());
     }
     
   });
   
   desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
   
   frame.add(desktop, BorderLayout.CENTER);
   frame.setSize(500, 300);
   frame.setVisible(true);
 }

}</source>