mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			1638 lines
		
	
	
		
			51 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			1638 lines
		
	
	
		
			51 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* JOptionPane.java
 | |
|    Copyright (C) 2004, 2005, 2006, Free Software Foundation, Inc.
 | |
| 
 | |
| This file is part of GNU Classpath.
 | |
| 
 | |
| GNU Classpath is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU General Public License as published by
 | |
| the Free Software Foundation; either version 2, or (at your option)
 | |
| any later version.
 | |
| 
 | |
| GNU Classpath is distributed in the hope that it will be useful, but
 | |
| WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
| General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU General Public License
 | |
| along with GNU Classpath; see the file COPYING.  If not, write to the
 | |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | |
| 02110-1301 USA.
 | |
| 
 | |
| Linking this library statically or dynamically with other modules is
 | |
| making a combined work based on this library.  Thus, the terms and
 | |
| conditions of the GNU General Public License cover the whole
 | |
| combination.
 | |
| 
 | |
| As a special exception, the copyright holders of this library give you
 | |
| permission to link this library with independent modules to produce an
 | |
| executable, regardless of the license terms of these independent
 | |
| modules, and to copy and distribute the resulting executable under
 | |
| terms of your choice, provided that you also meet, for each linked
 | |
| independent module, the terms and conditions of the license of that
 | |
| module.  An independent module is a module which is not derived from
 | |
| or based on this library.  If you modify this library, you may extend
 | |
| this exception to your version of the library, but you are not
 | |
| obligated to do so.  If you do not wish to do so, delete this
 | |
| exception statement from your version. */
 | |
| 
 | |
| 
 | |
| package javax.swing;
 | |
| 
 | |
| import java.awt.AWTEvent;
 | |
| import java.awt.ActiveEvent;
 | |
| import java.awt.Component;
 | |
| import java.awt.Container;
 | |
| import java.awt.EventQueue;
 | |
| import java.awt.Frame;
 | |
| import java.awt.MenuComponent;
 | |
| import java.awt.Toolkit;
 | |
| import java.awt.event.MouseAdapter;
 | |
| import java.awt.event.MouseMotionAdapter;
 | |
| import java.beans.PropertyChangeEvent;
 | |
| import java.beans.PropertyChangeListener;
 | |
| 
 | |
| import javax.accessibility.Accessible;
 | |
| import javax.accessibility.AccessibleContext;
 | |
| import javax.accessibility.AccessibleRole;
 | |
| import javax.swing.plaf.OptionPaneUI;
 | |
| 
 | |
| /**
 | |
|  * This class creates different types of JDialogs and JInternalFrames that can
 | |
|  * ask users for input or pass on information. JOptionPane can be used by
 | |
|  * calling one of the show static methods or  by creating an instance of
 | |
|  * JOptionPane and calling createDialog or createInternalFrame.
 | |
|  */
 | |
| public class JOptionPane extends JComponent implements Accessible
 | |
| {
 | |
|   /**
 | |
|    * Provides the accessibility features for the <code>JOptionPane</code>
 | |
|    * component.
 | |
|    */
 | |
|   protected class AccessibleJOptionPane extends JComponent.AccessibleJComponent
 | |
|   {
 | |
|     private static final long serialVersionUID = 686071432213084821L;
 | |
| 
 | |
|     /**
 | |
|      * Creates a new <code>AccessibleJOptionPane</code> instance.
 | |
|      */
 | |
|     protected AccessibleJOptionPane()
 | |
|     {
 | |
|       // Nothing to do here.
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns the accessible role of this object, which is always
 | |
|      * {@link AccessibleRole#OPTION_PANE}.
 | |
|      *
 | |
|      * @return the accessible role of this object
 | |
|      */
 | |
|     public AccessibleRole getAccessibleRole()
 | |
|     {
 | |
|       return AccessibleRole.OPTION_PANE;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   private static final long serialVersionUID = 5231143276678566796L;
 | |
| 
 | |
|   /** The value returned when cancel option is selected. */
 | |
|   public static final int CANCEL_OPTION = 2;
 | |
| 
 | |
|   /** The value returned when the dialog is closed without a selection. */
 | |
|   public static final int CLOSED_OPTION = -1;
 | |
| 
 | |
|   /** An option used in confirmation dialog methods. */
 | |
|   public static final int DEFAULT_OPTION = -1;
 | |
| 
 | |
|   /** The value returned when the no option is selected. */
 | |
|   public static final int NO_OPTION = 1;
 | |
| 
 | |
|   /** An option used in confirmation dialog methods. */
 | |
|   public static final int OK_CANCEL_OPTION = 2;
 | |
| 
 | |
|   /** The value returned when the ok option is selected. */
 | |
|   public static final int OK_OPTION = 0;
 | |
| 
 | |
|   /** An option used in confirmation dialog methods. */
 | |
|   public static final int YES_NO_CANCEL_OPTION = 1;
 | |
| 
 | |
|   /** An option used in confirmation dialog methods. */
 | |
|   public static final int YES_NO_OPTION = 0;
 | |
| 
 | |
|   /** The value returned when the yes option is selected. */
 | |
|   public static final int YES_OPTION = 0;
 | |
| 
 | |
|   /** Identifier for the error message type. */
 | |
|   public static final int ERROR_MESSAGE = 0;
 | |
| 
 | |
|   /** Identifier for the information message type. */
 | |
|   public static final int INFORMATION_MESSAGE = 1;
 | |
| 
 | |
|   /** Identifier for the plain message type. */
 | |
|   public static final int PLAIN_MESSAGE = -1;
 | |
| 
 | |
|   /** Identifier for the question message type. */
 | |
|   public static final int QUESTION_MESSAGE = 3;
 | |
| 
 | |
|   /** Identifier for the warning message type. */
 | |
|   public static final int WARNING_MESSAGE = 2;
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the icon property
 | |
|    * changes.
 | |
|    */
 | |
|   public static final String ICON_PROPERTY = "icon";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the initialSelectionValue
 | |
|    * property changes.
 | |
|    */
 | |
|   public static final String INITIAL_SELECTION_VALUE_PROPERTY = "initialSelectionValue";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the initialValue property
 | |
|    * changes.
 | |
|    */
 | |
|   public static final String INITIAL_VALUE_PROPERTY = "initialValue";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the inputValue property
 | |
|    * changes.
 | |
|    */
 | |
|   public static final String INPUT_VALUE_PROPERTY = "inputValue";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the message property
 | |
|    * changes.
 | |
|    */
 | |
|   public static final String MESSAGE_PROPERTY = "message";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the messageType property
 | |
|    * changes.
 | |
|    */
 | |
|   public static final String MESSAGE_TYPE_PROPERTY = "messageType";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the optionType property
 | |
|    * changes.
 | |
|    */
 | |
|   public static final String OPTION_TYPE_PROPERTY = "optionType";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the options property
 | |
|    * changes.
 | |
|    */
 | |
|   public static final String OPTIONS_PROPERTY = "options";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the selectionValues
 | |
|    * property changes.
 | |
|    */
 | |
|   public static final String SELECTION_VALUES_PROPERTY = "selectionValues";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the value property
 | |
|    * changes.
 | |
|    */
 | |
|   public static final String VALUE_PROPERTY = "value";
 | |
| 
 | |
|   /**
 | |
|    * The identifier for the propertyChangeEvent when the wantsInput property
 | |
|    * changes.
 | |
|    */
 | |
|   public static final String WANTS_INPUT_PROPERTY = "wantsInput";
 | |
| 
 | |
|   /** The value returned when the inputValue is uninitialized. */
 | |
|   public static final Object UNINITIALIZED_VALUE = "uninitializedValue";
 | |
| 
 | |
|   /** The icon displayed in the dialog/internal frame. */
 | |
|   protected Icon icon;
 | |
| 
 | |
|   /** The initial selected value in the input component. */
 | |
|   protected Object initialSelectionValue;
 | |
| 
 | |
|   /** The object that is initially selected for options. */
 | |
|   protected Object initialValue;
 | |
| 
 | |
|   /** The value the user inputs. */
 | |
|   protected Object inputValue = UNINITIALIZED_VALUE;
 | |
| 
 | |
|   /** The message displayed in the dialog/internal frame. */
 | |
|   protected Object message;
 | |
| 
 | |
|   /** The type of message displayed. */
 | |
|   protected int messageType = PLAIN_MESSAGE;
 | |
| 
 | |
|   /**
 | |
|    * The options (usually buttons) aligned at the bottom for the user to
 | |
|    * select.
 | |
|    */
 | |
|   protected Object[] options;
 | |
| 
 | |
|   /** The type of options to display. */
 | |
|   protected int optionType = DEFAULT_OPTION;
 | |
| 
 | |
|   /** The input values the user can select. */
 | |
|   protected Object[] selectionValues;
 | |
| 
 | |
|   /** The value returned by selecting an option. */
 | |
|   protected Object value = UNINITIALIZED_VALUE;
 | |
| 
 | |
|   /** Whether the Dialog/InternalFrame needs input. */
 | |
|   protected boolean wantsInput;
 | |
| 
 | |
|   /** The common frame used when no parent is provided. */
 | |
|   private static Frame privFrame = (Frame) SwingUtilities.getOwnerFrame(null);
 | |
| 
 | |
|   /**
 | |
|    * Creates a new JOptionPane object using a message of "JOptionPane
 | |
|    * message", using the PLAIN_MESSAGE type and DEFAULT_OPTION.
 | |
|    */
 | |
|   public JOptionPane()
 | |
|   {
 | |
|     this("JOptionPane message", PLAIN_MESSAGE, DEFAULT_OPTION, null, null, null);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new JOptionPane object using the given message using the
 | |
|    * PLAIN_MESSAGE type and DEFAULT_OPTION.
 | |
|    *
 | |
|    * @param message The message to display.
 | |
|    */
 | |
|   public JOptionPane(Object message)
 | |
|   {
 | |
|     this(message, PLAIN_MESSAGE, DEFAULT_OPTION, null, null, null);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new JOptionPane object using the given message and messageType
 | |
|    * and DEFAULT_OPTION.
 | |
|    *
 | |
|    * @param message The message to display.
 | |
|    * @param messageType The type of message.
 | |
|    */
 | |
|   public JOptionPane(Object message, int messageType)
 | |
|   {
 | |
|     this(message, messageType, DEFAULT_OPTION, null, null, null);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new JOptionPane object using the given message, messageType and
 | |
|    * optionType.
 | |
|    *
 | |
|    * @param message The message to display.
 | |
|    * @param messageType The type of message.
 | |
|    * @param optionType The type of options.
 | |
|    */
 | |
|   public JOptionPane(Object message, int messageType, int optionType)
 | |
|   {
 | |
|     this(message, messageType, optionType, null, null, null);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new JOptionPane object using the given message, messageType,
 | |
|    * optionType and icon.
 | |
|    *
 | |
|    * @param message The message to display.
 | |
|    * @param messageType The type of message.
 | |
|    * @param optionType The type of options.
 | |
|    * @param icon The icon to display.
 | |
|    */
 | |
|   public JOptionPane(Object message, int messageType, int optionType, Icon icon)
 | |
|   {
 | |
|     this(message, messageType, optionType, icon, null, null);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new JOptionPane object using the given message, messageType,
 | |
|    * optionType, icon and options.
 | |
|    *
 | |
|    * @param message The message to display.
 | |
|    * @param messageType The type of message.
 | |
|    * @param optionType The type of options.
 | |
|    * @param icon The icon to display.
 | |
|    * @param options The options given.
 | |
|    */
 | |
|   public JOptionPane(Object message, int messageType, int optionType,
 | |
|                      Icon icon, Object[] options)
 | |
|   {
 | |
|     this(message, messageType, optionType, icon, options, null);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new JOptionPane object using the given message, messageType,
 | |
|    * optionType, icon, options and initialValue. The initialValue will be
 | |
|    * focused initially.
 | |
|    *
 | |
|    * @param message The message to display.
 | |
|    * @param messageType The type of message.
 | |
|    * @param optionType The type of options.
 | |
|    * @param icon The icon to display.
 | |
|    * @param options The options given.
 | |
|    * @param initialValue The component to focus on initially.
 | |
|    *
 | |
|    * @throws IllegalArgumentException If the messageType or optionType are not
 | |
|    *         legal values.
 | |
|    */
 | |
|   public JOptionPane(Object message, int messageType, int optionType,
 | |
|                      Icon icon, Object[] options, Object initialValue)
 | |
|   {
 | |
|     this.message = message;
 | |
|     if (! validMessageType(messageType))
 | |
|       throw new IllegalArgumentException("Message Type not legal value.");
 | |
|     this.messageType = messageType;
 | |
|     if (! validOptionType(optionType))
 | |
|       throw new IllegalArgumentException("Option Type not legal value.");
 | |
|     this.optionType = optionType;
 | |
|     this.icon = icon;
 | |
|     this.options = options;
 | |
|     this.initialValue = initialValue;
 | |
| 
 | |
|     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
 | |
| 
 | |
|     updateUI();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method creates a new JDialog that is either centered around the
 | |
|    * parent's frame or centered on the screen (if the parent is null). The
 | |
|    * JDialog will not be resizable and will be modal. Once the JDialog is
 | |
|    * disposed, the inputValue and value properties will  be set by the
 | |
|    * optionPane.
 | |
|    *
 | |
|    * @param parentComponent The parent of the Dialog.
 | |
|    * @param title The title in the bar of the JDialog.
 | |
|    *
 | |
|    * @return A new JDialog based on the JOptionPane configuration.
 | |
|    */
 | |
|   public JDialog createDialog(Component parentComponent, String title)
 | |
|   {
 | |
|     Frame toUse = getFrameForComponent(parentComponent);
 | |
|     if (toUse == null)
 | |
|       toUse = getRootFrame();
 | |
| 
 | |
|     JDialog dialog = new JDialog(toUse, title);
 | |
|     inputValue = UNINITIALIZED_VALUE;
 | |
|     value = UNINITIALIZED_VALUE;
 | |
| 
 | |
|     dialog.getContentPane().add(this);
 | |
|     dialog.setModal(true);
 | |
|     dialog.setResizable(false);
 | |
|     dialog.pack();
 | |
|     dialog.setLocationRelativeTo(parentComponent);
 | |
| 
 | |
|     addPropertyChangeListener(new ValuePropertyHandler(dialog));
 | |
|     return dialog;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Handles changes of the value property. Whenever this property changes,
 | |
|    * the JOptionPane dialog should be closed.
 | |
|    */
 | |
|   private static class ValuePropertyHandler
 | |
|     implements PropertyChangeListener
 | |
|   {
 | |
|     /**
 | |
|      * The dialog to close.
 | |
|      */
 | |
|     JDialog dialog;
 | |
| 
 | |
|     /**
 | |
|      * Creates a new instance.
 | |
|      *
 | |
|      * @param d the dialog to be closed
 | |
|      */
 | |
|     ValuePropertyHandler(JDialog d)
 | |
|     {
 | |
|       dialog = d;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Receives notification when any of the properties change.
 | |
|      */
 | |
|     public void propertyChange(PropertyChangeEvent p)
 | |
|     {
 | |
|       String prop = p.getPropertyName();
 | |
|       Object val = p.getNewValue();
 | |
|       if (prop.equals(VALUE_PROPERTY) && val != null
 | |
|           && val != UNINITIALIZED_VALUE)
 | |
|         {
 | |
|           dialog.setVisible(false);
 | |
|         }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method creates a new JInternalFrame that is in the JLayeredPane
 | |
|    * which contains the parentComponent given. If no suitable JLayeredPane
 | |
|    * can be found from the parentComponent given, a RuntimeException will be
 | |
|    * thrown.
 | |
|    *
 | |
|    * @param parentComponent The parent to find a JDesktopPane from.
 | |
|    * @param title The title of the JInternalFrame.
 | |
|    *
 | |
|    * @return A new JInternalFrame based on the JOptionPane configuration.
 | |
|    *
 | |
|    * @throws RuntimeException If no suitable JDesktopPane is found.
 | |
|    *
 | |
|    * @specnote The specification says that the internal frame is placed
 | |
|    *           in the nearest <code>JDesktopPane</code> that is found in
 | |
|    *           <code>parent</code>'s ancestors. The behaviour of the JDK
 | |
|    *           is that it actually looks up the nearest
 | |
|    *           <code>JLayeredPane</code> in <code>parent</code>'s ancestors.
 | |
|    *           So do we.
 | |
|    */
 | |
|   public JInternalFrame createInternalFrame(Component parentComponent,
 | |
|                                             String title)
 | |
|                                      throws RuntimeException
 | |
|   {
 | |
|     // Try to find a JDesktopPane.
 | |
|     JLayeredPane toUse = getDesktopPaneForComponent(parentComponent);
 | |
|     // If we don't have a JDesktopPane, we try to find a JLayeredPane.
 | |
|     if (toUse == null)
 | |
|       toUse = JLayeredPane.getLayeredPaneAbove(parentComponent);
 | |
|     // If this still fails, we throw a RuntimeException.
 | |
|     if (toUse == null)
 | |
|       throw new RuntimeException
 | |
|         ("parentComponent does not have a valid parent");
 | |
| 
 | |
|     JInternalFrame frame = new JInternalFrame(title);
 | |
| 
 | |
|     inputValue = UNINITIALIZED_VALUE;
 | |
|     value = UNINITIALIZED_VALUE;
 | |
| 
 | |
|     frame.setContentPane(this);
 | |
|     frame.setClosable(true);
 | |
| 
 | |
|     toUse.add(frame);
 | |
|     frame.setLayer(JLayeredPane.MODAL_LAYER);
 | |
| 
 | |
|     frame.pack();
 | |
|     frame.setVisible(true);
 | |
| 
 | |
|     return frame;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the object that provides accessibility features for this
 | |
|    * <code>JOptionPane</code> component.
 | |
|    *
 | |
|    * @return The accessible context (an instance of
 | |
|    *     {@link AccessibleJOptionPane}).
 | |
|    */
 | |
|   public AccessibleContext getAccessibleContext()
 | |
|   {
 | |
|     if (accessibleContext == null)
 | |
|       accessibleContext = new AccessibleJOptionPane();
 | |
|     return accessibleContext;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the JDesktopPane for the given parentComponent or
 | |
|    * null if none can be found.
 | |
|    *
 | |
|    * @param parentComponent The component to look in.
 | |
|    *
 | |
|    * @return The JDesktopPane for the given component or null if none can be
 | |
|    *         found.
 | |
|    */
 | |
|   public static JDesktopPane getDesktopPaneForComponent(Component parentComponent)
 | |
|   {
 | |
|     return (JDesktopPane) SwingUtilities.getAncestorOfClass(JDesktopPane.class,
 | |
|                                                             parentComponent);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the Frame for the given parentComponent or null if
 | |
|    * none can be found.
 | |
|    *
 | |
|    * @param parentComponent The component to look in.
 | |
|    *
 | |
|    * @return The Frame for the given component or null if none can be found.
 | |
|    */
 | |
|   public static Frame getFrameForComponent(Component parentComponent)
 | |
|   {
 | |
|     return (Frame) SwingUtilities.getAncestorOfClass(Frame.class,
 | |
|                                                      parentComponent);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the icon displayed.
 | |
|    *
 | |
|    * @return The icon displayed.
 | |
|    */
 | |
|   public Icon getIcon()
 | |
|   {
 | |
|     return icon;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the value initially selected from the list of values
 | |
|    * the user can input.
 | |
|    *
 | |
|    * @return The initial selection value.
 | |
|    */
 | |
|   public Object getInitialSelectionValue()
 | |
|   {
 | |
|     return initialSelectionValue;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the value that is focused from the list of options.
 | |
|    *
 | |
|    * @return The initial value from options.
 | |
|    */
 | |
|   public Object getInitialValue()
 | |
|   {
 | |
|     return initialValue;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the value that the user input.
 | |
|    *
 | |
|    * @return The user's input value.
 | |
|    */
 | |
|   public Object getInputValue()
 | |
|   {
 | |
|     if (getValue().equals(new Integer(CANCEL_OPTION)))
 | |
|       setInputValue(null);
 | |
|     return inputValue;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the maximum characters per line. By default, this is
 | |
|    * Integer.MAX_VALUE.
 | |
|    *
 | |
|    * @return The maximum characters per line.
 | |
|    */
 | |
|   public int getMaxCharactersPerLineCount()
 | |
|   {
 | |
|     return Integer.MAX_VALUE;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the message displayed.
 | |
|    *
 | |
|    * @return The message displayed.
 | |
|    */
 | |
|   public Object getMessage()
 | |
|   {
 | |
|     return message;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the message type.
 | |
|    *
 | |
|    * @return The message type.
 | |
|    */
 | |
|   public int getMessageType()
 | |
|   {
 | |
|     return messageType;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the options.
 | |
|    *
 | |
|    * @return The options.
 | |
|    */
 | |
|   public Object[] getOptions()
 | |
|   {
 | |
|     return options;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the option type.
 | |
|    *
 | |
|    * @return The option type.
 | |
|    */
 | |
|   public int getOptionType()
 | |
|   {
 | |
|     return optionType;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the Frame used by JOptionPane dialog's that have no
 | |
|    * parent.
 | |
|    *
 | |
|    * @return The Frame used by dialogs that have no parent.
 | |
|    */
 | |
|   public static Frame getRootFrame()
 | |
|   {
 | |
|     return privFrame;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the selection values.
 | |
|    *
 | |
|    * @return The selection values.
 | |
|    */
 | |
|   public Object[] getSelectionValues()
 | |
|   {
 | |
|     return selectionValues;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the UI used by the JOptionPane.
 | |
|    *
 | |
|    * @return The UI used by the JOptionPane.
 | |
|    */
 | |
|   public OptionPaneUI getUI()
 | |
|   {
 | |
|     return (OptionPaneUI) ui;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns an identifier to determine which UI class will act as
 | |
|    * the UI.
 | |
|    *
 | |
|    * @return The UI identifier.
 | |
|    */
 | |
|   public String getUIClassID()
 | |
|   {
 | |
|     return "OptionPaneUI";
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the value that the user selected out of options.
 | |
|    *
 | |
|    * @return The value that the user selected out of options.
 | |
|    */
 | |
|   public Object getValue()
 | |
|   {
 | |
|     return value;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns whether this JOptionPane wants input.
 | |
|    *
 | |
|    * @return Whether this JOptionPane wants input.
 | |
|    */
 | |
|   public boolean getWantsInput()
 | |
|   {
 | |
|     return wantsInput;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns a String that describes this JOptionPane.
 | |
|    *
 | |
|    * @return A String that describes this JOptionPane.
 | |
|    */
 | |
|   protected String paramString()
 | |
|   {
 | |
|     return "JOptionPane";
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method requests focus for the initial value.
 | |
|    */
 | |
|   public void selectInitialValue()
 | |
|   {
 | |
|     if (ui != null)
 | |
|       ((OptionPaneUI) ui).selectInitialValue(this);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the icon property.
 | |
|    *
 | |
|    * @param newIcon The new icon to use.
 | |
|    */
 | |
|   public void setIcon(Icon newIcon)
 | |
|   {
 | |
|     if (icon != newIcon)
 | |
|       {
 | |
|         Icon old = icon;
 | |
|         icon = newIcon;
 | |
|         firePropertyChange(ICON_PROPERTY, old, icon);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the initial selection property.
 | |
|    *
 | |
|    * @param newValue The new initial selection.
 | |
|    */
 | |
|   public void setInitialSelectionValue(Object newValue)
 | |
|   {
 | |
|     if (initialSelectionValue != newValue)
 | |
|       {
 | |
|         Object old = initialSelectionValue;
 | |
|         initialSelectionValue = newValue;
 | |
|         firePropertyChange(INITIAL_SELECTION_VALUE_PROPERTY, old,
 | |
|                            initialSelectionValue);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the initial value property.
 | |
|    *
 | |
|    * @param newValue The new initial value.
 | |
|    */
 | |
|   public void setInitialValue(Object newValue)
 | |
|   {
 | |
|     if (initialValue != newValue)
 | |
|       {
 | |
|         Object old = initialValue;
 | |
|         initialValue = newValue;
 | |
|         firePropertyChange(INITIAL_VALUE_PROPERTY, old, initialValue);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the inputValue property.
 | |
|    *
 | |
|    * @param newValue The new inputValue.
 | |
|    */
 | |
|   public void setInputValue(Object newValue)
 | |
|   {
 | |
|     if (inputValue != newValue)
 | |
|       {
 | |
|         Object old = inputValue;
 | |
|         inputValue = newValue;
 | |
|         firePropertyChange(INPUT_VALUE_PROPERTY, old, inputValue);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the message property.
 | |
|    *
 | |
|    * @param newMessage The new message.
 | |
|    */
 | |
|   public void setMessage(Object newMessage)
 | |
|   {
 | |
|     if (message != newMessage)
 | |
|       {
 | |
|         Object old = message;
 | |
|         message = newMessage;
 | |
|         firePropertyChange(MESSAGE_PROPERTY, old, message);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the messageType property.
 | |
|    *
 | |
|    * @param newType The new messageType.
 | |
|    *
 | |
|    * @throws IllegalArgumentException If the messageType is not valid.
 | |
|    */
 | |
|   public void setMessageType(int newType)
 | |
|   {
 | |
|     if (! validMessageType(newType))
 | |
|       throw new IllegalArgumentException("Message Type not legal value.");
 | |
|     if (newType != messageType)
 | |
|       {
 | |
|         int old = messageType;
 | |
|         messageType = newType;
 | |
|         firePropertyChange(MESSAGE_TYPE_PROPERTY, old, messageType);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the options property.
 | |
|    *
 | |
|    * @param newOptions The new options.
 | |
|    */
 | |
|   public void setOptions(Object[] newOptions)
 | |
|   {
 | |
|     if (options != newOptions)
 | |
|       {
 | |
|         Object[] old = options;
 | |
|         options = newOptions;
 | |
|         firePropertyChange(OPTIONS_PROPERTY, old, options);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the optionType property.
 | |
|    *
 | |
|    * @param newType The new optionType.
 | |
|    *
 | |
|    * @throws IllegalArgumentException If the optionType is not valid.
 | |
|    */
 | |
|   public void setOptionType(int newType)
 | |
|   {
 | |
|     if (! validOptionType(newType))
 | |
|       throw new IllegalArgumentException("Option Type not legal value.");
 | |
|     if (newType != optionType)
 | |
|       {
 | |
|         int old = optionType;
 | |
|         optionType = newType;
 | |
|         firePropertyChange(OPTION_TYPE_PROPERTY, old, optionType);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the Frame used for JOptionPane dialogs that have no
 | |
|    * parent.
 | |
|    *
 | |
|    * @param newRootFrame The Frame to use for dialogs that have no parent.
 | |
|    */
 | |
|   public static void setRootFrame(Frame newRootFrame)
 | |
|   {
 | |
|     privFrame = newRootFrame;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the selectionValues property.
 | |
|    *
 | |
|    * @param newValues The new selectionValues.
 | |
|    */
 | |
|   public void setSelectionValues(Object[] newValues)
 | |
|   {
 | |
|     if (newValues != selectionValues)
 | |
|       {
 | |
|         if (newValues != null)
 | |
|           wantsInput = true;
 | |
|         Object[] old = selectionValues;
 | |
|         selectionValues = newValues;
 | |
|         firePropertyChange(SELECTION_VALUES_PROPERTY, old, selectionValues);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method sets the UI used with the JOptionPane.
 | |
|    *
 | |
|    * @param ui The UI used with the JOptionPane.
 | |
|    */
 | |
|   public void setUI(OptionPaneUI ui)
 | |
|   {
 | |
|     super.setUI(ui);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method sets the value has been selected out of options.
 | |
|    *
 | |
|    * @param newValue The value that has been selected out of options.
 | |
|    */
 | |
|   public void setValue(Object newValue)
 | |
|   {
 | |
|     if (value != newValue)
 | |
|       {
 | |
|         Object old = value;
 | |
|         value = newValue;
 | |
|         firePropertyChange(VALUE_PROPERTY, old, value);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method changes the wantsInput property.
 | |
|    *
 | |
|    * @param newValue Whether this JOptionPane requires input.
 | |
|    */
 | |
|   public void setWantsInput(boolean newValue)
 | |
|   {
 | |
|     if (wantsInput != newValue)
 | |
|       {
 | |
|         boolean old = wantsInput;
 | |
|         wantsInput = newValue;
 | |
|         firePropertyChange(WANTS_INPUT_PROPERTY, old, wantsInput);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows a confirmation dialog with the title "Select an Option"
 | |
|    * and displays the given message. The parent frame will be the same as the
 | |
|    * parent frame of the given parentComponent. This method returns the
 | |
|    * option chosen by the user.
 | |
|    *
 | |
|    * @param parentComponent The parentComponent to find a frame in.
 | |
|    * @param message The message to display.
 | |
|    *
 | |
|    * @return The option that was selected.
 | |
|    */
 | |
|   public static int showConfirmDialog(Component parentComponent, Object message)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, QUESTION_MESSAGE);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, "Select an Option");
 | |
|     dialog.show();
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows a confirmation dialog with the given message,
 | |
|    * optionType and title. The frame that owns the dialog will be the same
 | |
|    * frame that holds the given parentComponent. This method returns the
 | |
|    * option that was chosen.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message displayed.
 | |
|    * @param title The title of the dialog.
 | |
|    * @param optionType The optionType.
 | |
|    *
 | |
|    * @return The option that was chosen.
 | |
|    */
 | |
|   public static int showConfirmDialog(Component parentComponent,
 | |
|                                       Object message, String title,
 | |
|                                       int optionType)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, PLAIN_MESSAGE, optionType);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, title);
 | |
|     dialog.show();
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows a confirmation dialog with the given message, title,
 | |
|    * messageType and optionType. The frame owner will be the same frame as
 | |
|    * the one that holds the given parentComponent. This method returns the
 | |
|    * option selected by the user.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message displayed.
 | |
|    * @param title The title of the dialog.
 | |
|    * @param optionType The optionType.
 | |
|    * @param messageType The messageType.
 | |
|    *
 | |
|    * @return The selected option.
 | |
|    */
 | |
|   public static int showConfirmDialog(Component parentComponent,
 | |
|                                       Object message, String title,
 | |
|                                       int optionType, int messageType)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType, optionType);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, title);
 | |
|     dialog.show();
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows a confirmation dialog with the given message, title,
 | |
|    * optionType, messageType and icon. The frame owner will be the same as
 | |
|    * the one that holds the given parentComponent. This method returns the
 | |
|    * option selected by the user.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message displayed.
 | |
|    * @param title The title of the dialog.
 | |
|    * @param optionType The optionType.
 | |
|    * @param messageType The messsageType.
 | |
|    * @param icon The icon displayed.
 | |
|    *
 | |
|    * @return The selected option.
 | |
|    */
 | |
|   public static int showConfirmDialog(Component parentComponent,
 | |
|                                       Object message, String title,
 | |
|                                       int optionType, int messageType,
 | |
|                                       Icon icon)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType, optionType, icon);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, title);
 | |
|     dialog.show();
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method will show a QUESTION_MESSAGE input dialog with the given
 | |
|    * message. No selectionValues is set so the Look and Feel will usually
 | |
|    * give the user a TextField to fill out. The frame owner will be the same
 | |
|    * frame that holds the given parentComponent. This method will return the
 | |
|    * value entered by the user.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message displayed.
 | |
|    *
 | |
|    * @return The value entered by the user.
 | |
|    */
 | |
|   public static String showInputDialog(Component parentComponent,
 | |
|                                        Object message)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, QUESTION_MESSAGE);
 | |
|     pane.setWantsInput(true);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, null);
 | |
|     dialog.show();
 | |
| 
 | |
|     return (String) pane.getInputValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method will show a QUESTION_MESSAGE type input dialog with the given
 | |
|    * message and initialSelectionValue. Since there is no selectionValues
 | |
|    * set, the Look and Feel will usually give a TextField to fill out. The
 | |
|    * frame owner will be the same as the one that holds the given
 | |
|    * parentComponent. This method will return the value entered by the user.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message to display.
 | |
|    * @param initialSelectionValue The initially selected value.
 | |
|    *
 | |
|    * @return The value the user input.
 | |
|    */
 | |
|   public static String showInputDialog(Component parentComponent,
 | |
|                                        Object message,
 | |
|                                        Object initialSelectionValue)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, QUESTION_MESSAGE);
 | |
|     pane.setInitialSelectionValue(initialSelectionValue);
 | |
|     pane.setWantsInput(true);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, null);
 | |
|     dialog.show();
 | |
| 
 | |
|     return (String) pane.getInputValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method displays a new input dialog with the given message, title and
 | |
|    * messageType. Since no selectionValues value is given, the Look and Feel
 | |
|    * will usually give the user a TextField to input data to. This method
 | |
|    * returns the value the user inputs.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message to display.
 | |
|    * @param title The title of the dialog.
 | |
|    * @param messageType The messageType.
 | |
|    *
 | |
|    * @return The value the user input.
 | |
|    */
 | |
|   public static String showInputDialog(Component parentComponent,
 | |
|                                        Object message, String title,
 | |
|                                        int messageType)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType);
 | |
|     pane.setWantsInput(true);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, title);
 | |
|     dialog.show();
 | |
| 
 | |
|     return (String) pane.getInputValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an input dialog with the given message, title,
 | |
|    * messageType, icon, selectionValues, and initialSelectionValue. This
 | |
|    * method returns the value that the user selects.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message displayed.
 | |
|    * @param title The title of the dialog.
 | |
|    * @param messageType The messageType.
 | |
|    * @param icon The icon displayed.
 | |
|    * @param selectionValues The list of values to select from.
 | |
|    * @param initialSelectionValue The initially selected value.
 | |
|    *
 | |
|    * @return The user selected value.
 | |
|    */
 | |
|   public static Object showInputDialog(Component parentComponent,
 | |
|                                        Object message, String title,
 | |
|                                        int messageType, Icon icon,
 | |
|                                        Object[] selectionValues,
 | |
|                                        Object initialSelectionValue)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType);
 | |
|     pane.setWantsInput(true);
 | |
|     pane.setIcon(icon);
 | |
|     pane.setSelectionValues(selectionValues);
 | |
|     pane.setInitialSelectionValue(initialSelectionValue);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, title);
 | |
|     dialog.show();
 | |
| 
 | |
|     return pane.getInputValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows a QUESTION_MESSAGE type input dialog. Since no
 | |
|    * selectionValues is set, the Look and Feel will usually give the user a
 | |
|    * TextField to input data to. This method returns the value the user
 | |
|    * inputs.
 | |
|    *
 | |
|    * @param message The message to display.
 | |
|    *
 | |
|    * @return The user selected value.
 | |
|    */
 | |
|   public static String showInputDialog(Object message)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, QUESTION_MESSAGE);
 | |
|     pane.setWantsInput(true);
 | |
|     JDialog dialog = pane.createDialog(null, null);
 | |
|     dialog.show();
 | |
| 
 | |
|     return (String) pane.getInputValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows a QUESTION_MESSAGE type input dialog. Since no
 | |
|    * selectionValues is set, the Look and Feel will usually give the user a
 | |
|    * TextField to input data to. The input component will be initialized with
 | |
|    * the initialSelectionValue. This method returns the value the user
 | |
|    * inputs.
 | |
|    *
 | |
|    * @param message The message to display.
 | |
|    * @param initialSelectionValue The initialSelectionValue.
 | |
|    *
 | |
|    * @return The user selected value.
 | |
|    */
 | |
|   public static String showInputDialog(Object message,
 | |
|                                        Object initialSelectionValue)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, QUESTION_MESSAGE);
 | |
|     pane.setWantsInput(true);
 | |
|     pane.setInitialSelectionValue(initialSelectionValue);
 | |
|     JDialog dialog = pane.createDialog(null, null);
 | |
|     dialog.show();
 | |
| 
 | |
|     return (String) pane.getInputValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal confirmation dialog with the given message.
 | |
|    * The internal frame dialog will be placed in the first JDesktopPane
 | |
|    * ancestor of the given parentComponent. This method will return the value
 | |
|    * selected.
 | |
|    *
 | |
|    * @param parentComponent The parent to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    *
 | |
|    * @return The value selected.
 | |
|    */
 | |
|   public static int showInternalConfirmDialog(Component parentComponent,
 | |
|                                               Object message)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, null);
 | |
| 
 | |
|     startModal(frame);
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal confirmation dialog with the given message,
 | |
|    * optionType and title. The internal frame dialog will be placed in the
 | |
|    * first JDesktopPane ancestor of the given parentComponent.  This method
 | |
|    * will return the selected value.
 | |
|    *
 | |
|    * @param parentComponent The parent to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    * @param title The title to display.
 | |
|    * @param optionType The option type.
 | |
|    *
 | |
|    * @return The selected value.
 | |
|    */
 | |
|   public static int showInternalConfirmDialog(Component parentComponent,
 | |
|                                               Object message, String title,
 | |
|                                               int optionType)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, PLAIN_MESSAGE, optionType);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
 | |
| 
 | |
|     startModal(frame);
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal confirmation dialog with the given message,
 | |
|    * title, optionTypes and icon for the given message type. The internal
 | |
|    * confirmation dialog will be placed in the first  instance of
 | |
|    * JDesktopPane ancestor of the given parentComponent.
 | |
|    *
 | |
|    * @param parentComponent The component to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    * @param title The title of the dialog.
 | |
|    * @param optionType The option type.
 | |
|    * @param messageType The message type.
 | |
|    *
 | |
|    * @return The selected value.
 | |
|    */
 | |
|   public static int showInternalConfirmDialog(Component parentComponent,
 | |
|                                               Object message, String title,
 | |
|                                               int optionType, int messageType)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType, optionType);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
 | |
| 
 | |
|     startModal(frame);
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal confirmation dialog with the given message,
 | |
|    * title, option type, message type, and icon. The internal frame dialog
 | |
|    * will be placed in the first JDesktopPane ancestor  that is found in the
 | |
|    * given parentComponent. This method returns  the selected value.
 | |
|    *
 | |
|    * @param parentComponent The parent to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    * @param title The title to display.
 | |
|    * @param optionType The option type.
 | |
|    * @param messageType The message type.
 | |
|    * @param icon The icon to display.
 | |
|    *
 | |
|    * @return The selected value.
 | |
|    */
 | |
|   public static int showInternalConfirmDialog(Component parentComponent,
 | |
|                                               Object message, String title,
 | |
|                                               int optionType, int messageType,
 | |
|                                               Icon icon)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType, optionType, icon);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
 | |
| 
 | |
|     startModal(frame);
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal input dialog with the given message. The
 | |
|    * internal frame dialog will be placed in the first JDesktopPane ancestor
 | |
|    * of the given parent component. This method returns the value input by
 | |
|    * the user.
 | |
|    *
 | |
|    * @param parentComponent The parent to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    *
 | |
|    * @return The user selected value.
 | |
|    */
 | |
|   public static String showInternalInputDialog(Component parentComponent,
 | |
|                                                Object message)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message);
 | |
|     pane.setWantsInput(true);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, null);
 | |
| 
 | |
|     startModal(frame);
 | |
| 
 | |
|     return (String) pane.getInputValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal input dialog with the given message,  title
 | |
|    * and message type. The internal input dialog will be placed in the first
 | |
|    * JDesktopPane ancestor found in the given parent component. This method
 | |
|    * will return the input value given by the user.
 | |
|    *
 | |
|    * @param parentComponent The component to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    * @param title The title to display.
 | |
|    * @param messageType The message type.
 | |
|    *
 | |
|    * @return The user input value.
 | |
|    */
 | |
|   public static String showInternalInputDialog(Component parentComponent,
 | |
|                                                Object message, String title,
 | |
|                                                int messageType)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType);
 | |
|     pane.setWantsInput(true);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
 | |
| 
 | |
|     startModal(frame);
 | |
| 
 | |
|     return (String) pane.getInputValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal input dialog with the given message, title
 | |
|    * message type, icon, selection value list and initial selection value.
 | |
|    * The internal frame dialog will be placed in the first JDesktopPane
 | |
|    * ancestor found in the given parent component. This method returns the
 | |
|    * input value from the user.
 | |
|    *
 | |
|    * @param parentComponent The parent to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    * @param title The title to display.
 | |
|    * @param messageType The message type.
 | |
|    * @param icon The icon to display.
 | |
|    * @param selectionValues The selection value list.
 | |
|    * @param initialSelectionValue The initial selection value.
 | |
|    *
 | |
|    * @return The user input value.
 | |
|    */
 | |
|   public static Object showInternalInputDialog(Component parentComponent,
 | |
|                                                Object message, String title,
 | |
|                                                int messageType, Icon icon,
 | |
|                                                Object[] selectionValues,
 | |
|                                                Object initialSelectionValue)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType);
 | |
|     pane.setWantsInput(true);
 | |
|     pane.setIcon(icon);
 | |
|     pane.setSelectionValues(selectionValues);
 | |
|     pane.setInitialSelectionValue(initialSelectionValue);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
 | |
| 
 | |
|     startModal(frame);
 | |
| 
 | |
|     return pane.getInputValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal message dialog with the given message. The
 | |
|    * internal frame dialog will be placed in the first JDesktopPane ancestor
 | |
|    * found in the given parent component.
 | |
|    *
 | |
|    * @param parentComponent The component to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    */
 | |
|   public static void showInternalMessageDialog(Component parentComponent,
 | |
|                                                Object message)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, null);
 | |
| 
 | |
|     startModal(frame);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal message dialog with the given message,
 | |
|    * title and message type. The internal message dialog is placed in the
 | |
|    * first JDesktopPane ancestor found in the given parent component.
 | |
|    *
 | |
|    * @param parentComponent The parent component to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    * @param title The title to display.
 | |
|    * @param messageType The message type.
 | |
|    */
 | |
|   public static void showInternalMessageDialog(Component parentComponent,
 | |
|                                                Object message, String title,
 | |
|                                                int messageType)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
 | |
| 
 | |
|     startModal(frame);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an internal message dialog with the given message,
 | |
|    * title, message type and icon. The internal message dialog is placed in
 | |
|    * the first JDesktopPane ancestor found in the given parent component.
 | |
|    *
 | |
|    * @param parentComponent The component to find a JDesktopPane in.
 | |
|    * @param message The message to display.
 | |
|    * @param title The title to display.
 | |
|    * @param messageType The message type.
 | |
|    * @param icon The icon to display.
 | |
|    */
 | |
|   public static void showInternalMessageDialog(Component parentComponent,
 | |
|                                                Object message, String title,
 | |
|                                                int messageType, Icon icon)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType);
 | |
|     pane.setIcon(icon);
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
 | |
| 
 | |
|     startModal(frame);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method displays an internal option dialog with the given message,
 | |
|    * title, option type, message type, icon, option list, and initial option
 | |
|    * value. The internal option dialog is placed in the first JDesktopPane
 | |
|    * ancestor found in the parent component. This method returns the option
 | |
|    * selected.
 | |
|    *
 | |
|    * @param parentComponent The parent to find a JDesktopPane in.
 | |
|    * @param message The message displayed.
 | |
|    * @param title The title displayed.
 | |
|    * @param optionType The option type.
 | |
|    * @param messageType The message type.
 | |
|    * @param icon The icon to display.
 | |
|    * @param options The array of options.
 | |
|    * @param initialValue The initial value selected.
 | |
|    *
 | |
|    * @return The option that was selected.
 | |
|    */
 | |
|   public static int showInternalOptionDialog(Component parentComponent,
 | |
|                                              Object message, String title,
 | |
|                                              int optionType, int messageType,
 | |
|                                              Icon icon, Object[] options,
 | |
|                                              Object initialValue)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType, optionType, icon,
 | |
|                                        options, initialValue);
 | |
| 
 | |
|     JInternalFrame frame = pane.createInternalFrame(parentComponent, title);
 | |
| 
 | |
|     startModal(frame);
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an INFORMATION_MESSAGE type message dialog.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message displayed.
 | |
|    */
 | |
|   public static void showMessageDialog(Component parentComponent,
 | |
|                                        Object message)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, INFORMATION_MESSAGE);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, null);
 | |
|     dialog.show();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows a message dialog with the given message, title and
 | |
|    * messageType.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message displayed.
 | |
|    * @param title The title of the dialog.
 | |
|    * @param messageType The messageType.
 | |
|    */
 | |
|   public static void showMessageDialog(Component parentComponent,
 | |
|                                        Object message, String title,
 | |
|                                        int messageType)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, title);
 | |
|     dialog.show();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows a message dialog with the given message, title,
 | |
|    * messageType and icon.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message displayed.
 | |
|    * @param title The title of the dialog.
 | |
|    * @param messageType The messageType.
 | |
|    * @param icon The icon displayed.
 | |
|    */
 | |
|   public static void showMessageDialog(Component parentComponent,
 | |
|                                        Object message, String title,
 | |
|                                        int messageType, Icon icon)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType);
 | |
|     pane.setIcon(icon);
 | |
|     JDialog dialog = pane.createDialog(parentComponent, title);
 | |
|     dialog.show();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method shows an option dialog with the given message, title,
 | |
|    * optionType, messageType, icon, options and initialValue. This method
 | |
|    * returns the option that was selected.
 | |
|    *
 | |
|    * @param parentComponent The component to find a frame in.
 | |
|    * @param message The message displayed.
 | |
|    * @param title The title of the dialog.
 | |
|    * @param optionType The optionType.
 | |
|    * @param messageType The messageType.
 | |
|    * @param icon The icon displayed.
 | |
|    * @param options The options to choose from.
 | |
|    * @param initialValue The initial value.
 | |
|    *
 | |
|    * @return The selected option.
 | |
|    */
 | |
|   public static int showOptionDialog(Component parentComponent,
 | |
|                                      Object message, String title,
 | |
|                                      int optionType, int messageType,
 | |
|                                      Icon icon, Object[] options,
 | |
|                                      Object initialValue)
 | |
|   {
 | |
|     JOptionPane pane = new JOptionPane(message, messageType, optionType, icon,
 | |
|                                        options, initialValue);
 | |
| 
 | |
|     JDialog dialog = pane.createDialog(parentComponent, title);
 | |
|     dialog.show();
 | |
| 
 | |
|     if (pane.getValue() instanceof Integer)
 | |
|       return ((Integer) pane.getValue()).intValue();
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method resets the UI to the Look and Feel default.
 | |
|    */
 | |
|   public void updateUI()
 | |
|   {
 | |
|     setUI((OptionPaneUI) UIManager.getUI(this));
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns true if the key is a valid messageType.
 | |
|    *
 | |
|    * @param key The key to check.
 | |
|    *
 | |
|    * @return True if key is valid.
 | |
|    */
 | |
|   private boolean validMessageType(int key)
 | |
|   {
 | |
|     switch (key)
 | |
|       {
 | |
|       case ERROR_MESSAGE:
 | |
|       case INFORMATION_MESSAGE:
 | |
|       case PLAIN_MESSAGE:
 | |
|       case QUESTION_MESSAGE:
 | |
|       case WARNING_MESSAGE:
 | |
|         return true;
 | |
|       }
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns true if the key is a valid optionType.
 | |
|    *
 | |
|    * @param key The key to check.
 | |
|    *
 | |
|    * @return True if key is valid.
 | |
|    */
 | |
|   private boolean validOptionType(int key)
 | |
|   {
 | |
|     switch (key)
 | |
|       {
 | |
|       case DEFAULT_OPTION:
 | |
|       case OK_CANCEL_OPTION:
 | |
|       case YES_NO_CANCEL_OPTION:
 | |
|       case YES_NO_OPTION:
 | |
|         return true;
 | |
|       }
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This helper method makes the JInternalFrame wait until it is notified by
 | |
|    * an InternalFrameClosing event. This method also adds the given
 | |
|    * JOptionPane to the JInternalFrame and sizes it according to the
 | |
|    * JInternalFrame's preferred size.
 | |
|    *
 | |
|    * @param f The JInternalFrame to make modal.
 | |
|    */
 | |
|   private static void startModal(JInternalFrame f)
 | |
|   {
 | |
|     // We need to add an additional glasspane-like component directly
 | |
|     // below the frame, which intercepts all mouse events that are not
 | |
|     // directed at the frame itself.
 | |
|     JPanel modalInterceptor = new JPanel();
 | |
|     modalInterceptor.setOpaque(false);
 | |
|     JLayeredPane lp = JLayeredPane.getLayeredPaneAbove(f);
 | |
|     lp.setLayer(modalInterceptor, JLayeredPane.MODAL_LAYER.intValue());
 | |
|     modalInterceptor.setBounds(0, 0, lp.getWidth(), lp.getHeight());
 | |
|     modalInterceptor.addMouseListener(new MouseAdapter(){});
 | |
|     modalInterceptor.addMouseMotionListener(new MouseMotionAdapter(){});
 | |
|     lp.add(modalInterceptor);
 | |
|     f.toFront();
 | |
| 
 | |
|     // We need to explicitly dispatch events when we are blocking the event
 | |
|     // dispatch thread.
 | |
|     EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
 | |
|     try
 | |
|       {
 | |
|         while (! f.isClosed())
 | |
|           {
 | |
|             if (EventQueue.isDispatchThread())
 | |
|               {
 | |
|                 // The getNextEventMethod() issues wait() when no
 | |
|                 // event is available, so we don't need do explicitly wait().
 | |
|                 AWTEvent ev = queue.getNextEvent();
 | |
|                 // This mimics EventQueue.dispatchEvent(). We can't use
 | |
|                 // EventQueue.dispatchEvent() directly, because it is
 | |
|                 // protected, unfortunately.
 | |
|                 if (ev instanceof ActiveEvent)
 | |
|                   ((ActiveEvent) ev).dispatch();
 | |
|                 else if (ev.getSource() instanceof Component)
 | |
|                   ((Component) ev.getSource()).dispatchEvent(ev);
 | |
|                 else if (ev.getSource() instanceof MenuComponent)
 | |
|                   ((MenuComponent) ev.getSource()).dispatchEvent(ev);
 | |
|                 // Other events are ignored as per spec in
 | |
|                 // EventQueue.dispatchEvent
 | |
|               }
 | |
|             else
 | |
|               {
 | |
|                 // Give other threads a chance to become active.
 | |
|                 Thread.yield();
 | |
|               }
 | |
|           }
 | |
|       }
 | |
|     catch (InterruptedException ex)
 | |
|       {
 | |
|         // If we get interrupted, then leave the modal state.
 | |
|       }
 | |
|     finally
 | |
|       {
 | |
|         // Clean up the modal interceptor.
 | |
|         lp.remove(modalInterceptor);
 | |
| 
 | |
|         // Remove the internal frame from its parent, so it is no longer
 | |
|         // lurking around and clogging memory.
 | |
|         Container parent = f.getParent();
 | |
|         if (parent != null)
 | |
|           parent.remove(f);
 | |
|       }
 | |
|   }
 | |
| }
 |