gcc/libjava/javax/swing/JOptionPane.java
Graydon Hoare 8e99fb4f70 [multiple changes]
2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JTextArea.java
	(setLineWrap): Fire property change event after new value is set.
	(setTabSize): Likewise.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JTable.java
	(autoCreateColumnsFromModel): New field.
	(autoResizeMode): Likewise.
	(cellEditor): Likewise.
	(cellSelectionEnabled): Likewise.
	(columnModel): Likewise.
	(dataModel): Likewise.
	(defaultEditorsByColumnClass): Likewise.
	(defaultRenderersByColumnClass): Likewise.
	(editingColumn): Likewise.
	(editingRow): Likewise.
	(gridColor): Likewise.
	(preferredViewportSize): Likewise.
	(rowHeight): Likewise.
	(rowMargin): Likewise.
	(rowSelectionAllowed): Likewise.
	(selectionBackground): Likewise.
	(selectionForeground): Likewise.
	(selectionModel): Likewise.
	(showHorizontalLines): Likewise.
	(showVerticalLines): Likewise.
	(tableHeader): Likewise.
	(JTable): Implemented.
	(getColumnModel): Likewise.
	(getSelectedRow): Likewise.
	(getSelectionModel): Likewise.
	(setModel): Likewise.
	(setSelectionModel): Likewise.
	(createScrollPaneForTable): New method.
	(createDefaultDataModel): Likewise.
	(createDefaultListSelectionModel): Likewise.
	(getModel): Likewise.
	(getTableHeader): Likewise.
	(setTableHeader): Likewise.
	(getColumnSelectionAllowed): Likewise.
	(setColumnSelectionAllowed): Likewise.
	(getRowSelectionAllowed): Likewise.
	(setRowSelectionAllowed): Likewise.
	(getAutoResizeMode): Likewise.
	(setAutoResizeMode): Likewise.
	(getColumnCount): Likewise.
	(getRowCount): Likewise.
	(getCellRenderer): Likewise.
	* javax/swing/JTree.java
	(cellRenderer): New field.
	(editable): Likewise.
	(rootVisible): Likewise.
	(showsRootHandles): Likewise.
	(getModel): New method.
	(setModel): Likewise.
	(isEditable): Likewise.
	(setEditable): Likewise.
	(isRootVisbile): Likewise.
	(setRootVisible): Likewise.
	(getShowsRootHandles): Likewise.
	(setShowRootHandles): Likewise.
	(getCellRenderer): Likewise.
	(setCellRenderer): Likewise.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JFormattedTextField.java
	(setDocument): Implemented.
	* javax/swing/JRootPane.java:
	Fixed javadocs.
	* javax/swing/JTable.java
	(getDefaultRenderer): New method.
	* javax/swing/JTextField.java
	(setFont): Likewise.
	(getPreferredSize): Likewise.
	* javax/swing/JToggleButton.java
	(getAccessibleContext): Fix javadoc.
	* javax/swing/JTree.java:
	Add some javadocs.
	* javax/swing/JViewport.java:
	Likewise.

2004-07-21  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java:
	Collect all native method declaration at the top.
	(create): Set the filename filter if necessary.
	(setDirectory): Call nativeSetDirectory().
	(setFilenameFilter): Implement.
	(filenameFilterCallback): New method.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
	(create): Configure dialog to show hidden files.
	(filenameFilterCallback): New function.
	(nativeSetFilenameFilter): New function.
	(nativeSetDirectory): New function.

2004-07-21  Kim Ho  <kho@redhat.com>

	* javax/swing/plaf/basic/BasicSliderUI.java:
	Ran Jalopy.
	(paintTrack): Fill the track before painting
	the borders.

2004-07-21  Graydon Hoare  <graydon@redhat.com>

	patch from Roman Kennke <roman@ontographics.com>
	* javax/swing/Spring.java: New file.
	* javax/swing/SpringLayout.java: New file.
	* Makefile.am: Add new files.
	* Makefile.in: Regenerate.

2004-07-21  Graydon Hoare  <graydon@redhat.com>

	* javax/swing/plaf/basic/BasicSplitPaneUI.java: Minor layout fixes.
	* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Likewise.
	* javax/swing/ScrollPaneLayout.java: Likewise.

2004-07-21  Kim Ho  <kho@redhat.com>

	* javax/swing/DefaultDesktopManager.java:
	(findMinimum): Removed.
	(resizeFrame): Trust the UI to pass valid
	bounds.
	* javax/swing/JOptionPane.java:
	Implemented showInternalXXXDialog methods.
	(startModal): New method.
	* javax/swing/plaf/basic/BasicInternalFrameUI.java:
	(BorderListener::mouseDragged): Verify that the new
	bounds are valid before passing them to the DesktopManager.
	(preferredLayoutSize): Delegate
	to getSize.
	(minimumLayoutSize): Ditto.
	(getSize): New method.
	(GlassPaneDispatcher): Reimplemented by copying
	a stripped down LightweightDispatcher from Container.
	(getMinimumSize): Call minimumLayoutSize.
	* javax/swing/plaf/basic/BasicOptionPaneUI.java:
	Ran Jalopy.
	(mousePressed): Add ability to properly close
	JInternalFrames.
	* javax/swing/plaf/basic/BasicToolBarUI.java:
	(DragWindow): Set owner for DragWindow.

2004-07-21  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/ShortLookupTable.java: New file.
	* java/awt/image/ByteLookupTable.java: New file.
	* Makefile.am: Added new files.
	* Makefile.in: Regenerated.

2004-07-21  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
	(create(GtkContainerPeer)): New native method.
	(create()): Call native create(), passing in the parent frame
	as the paramter. Natively set the current file and directory.
	(setFile): Construct an absolute filename before passing it to
	the native peer.
	(nativeGetDirectory): New method.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
	(window_closed): Removed.
	(ok_clicked): Likewise.
	(cancel_clicked): Likewise.
	(handle_response): New method.
	(create): Use GtkFileChooserDialog.
	(connectSignals): Connect to handle_response.
	(nativeGetDirectory): New method.
	(nativeSetFile): Use GtkFileChooserDialog.

2004-07-21  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/LookupTable.java: New file.
	* Makefile.am: Added new file.
	* Makefile.in: Regenerated.

2004-07-21  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/Kernel.java: New file.
	* Makefile.am: Added new file.
	* Makefile.in: Regenerated.

2004-07-21  Olga Rodimina  <rodimina@redhat.com>

	* javax/swing/JCheckBoxMenuItem.java: Fixed Javadocs.
	* javax/swing/JMenu.java: Likewise.
	* javax/swing/JMenuBar.java: Likewise.
	(MARGIN_CHANGED_PROPERTY): New property.
	(setMargin): Implemented.
	* javax/swing/JMenuItem.java: Fixed javadocs.
	* javax/swing/JPopupMenuUI.java: Fixed javadocs.
	(LABEL_CHANGED_PROPERTY): New property.
	(add): changed to use createActionComponent.
	(createActionComponent): Implemented.
	(setLabel): Fire PropertyChangeEvent if label property
	changes.
	* javax/swing/JRadioButtonMenuItem.java: Fixed javadocs.
	* javax/swing/plaf/basic/BasicMenuBarUI.java: Likewise.
	(ContainerHandler): Repaint if margin property has changed.
	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	(installUI): Call installComponents().
	(uninstallUI): Call uinstallComponents().
	* javax/swing/plaf/basic/BasicMenuUI.java:
	Fixed javadocs.
	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
	Likewise.

2004-07-21  Kim Ho  <kho@redhat.com>

	* javax/swing/plaf/basic/BasicToolBarUI.java:
	(DragWindow): Use the right constructor.

2004-07-21  Kim Ho  <kho@redhat.com>

	* javax/swing/JToolBar.java:
	(layoutContainer): Use getComponents.
	* javax/swing/plaf/basic/BasicToolBarUI.java:
	(DragWindow): Don't use SwingUtilities'
	getOwnerFrame
	(ToolBarDialog): ditto.

2004-07-21  Kim Ho  <kho@redhat.com>

	* javax/swing/JRootPane.java:
	Ran jalopy.
	(layoutContainer): Set the glasspane's size to
	be the same as the content pane.
	(createGlassPane): Set opaque property to false.

2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* java/awt/Component.java (requestFocus()): Don't handle Panels
	specially.
	(requestFocus(boolean)): Likewise.
	(requestFocusInWindow(boolean)): Likewise.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
	Set GTK_CAN_FOCUS flag.

2004-07-21  Kim Ho  <kho@redhat.com>

	* Makefile.am: Added new file.
	* Makefile.in: Regenerated.
	* gcj/Makefile.in: Regenerated.
	* include/Makefile.in: Regenerated.
	* javax/swing/AbstractButton.java:
	Add rollOverEnabled property.
	(setRolloverEnabled): Use new property.
	(isRolloverEnabled): Use new property.
	* javax/swing/JTabbedPane.java:
	(setComponent): Remove useless JTabbedPane.this.
	* javax/swing/JToolBar.java: Finish implementation.
	* javax/swing/plaf/basic/BasicArrowButton.java:
	(paint): Moved border painting to a border.
	* javax/swing/plaf/basic/BasicLookAndFeel.java:
	Change JToolBar look and feel defaults.
	* javax/swing/plaf/basic/BasicOptionPaneUI.java
	(actionPerformed): Return Integer index instead of name.
	(addButtonComponents): Check to see if component is
	JButton last.
	(createMessageArea): Don't use components that are not
	completed yet.
	(getIconForType): Use temporary icons.
	* javax/swing/plaf/basic/BasicSliderUI.java:
	(mousePressed): Do not return if it's on thumb.
	(paintMinorTickForHorizSlider): Use BLACK to paint ticks.
	(paintMinorTickForVertSlider): ditto.
	(paintMajorTickForHorizSlider): ditto.
	(paintMajorTickForVertSlider): ditto.
	* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
	Add a border around the SplitPaneDivider.
	* javax/swing/plaf/basic/BasicSplitPaneUI.java:
	Remove comments.
	* javax/swing/plaf/basic/BasicToolBarSeparatorUI.java:
	New file. Implemented.
	* javax/swing/plaf/basic/BasicToolBarUI.java:
	Implemented.
	* testsuite/Makefile.in: Regenerated.

2004-07-21  Graydon Hoare  <graydon@redhat.com>

	* javax/swing/Timer.java (run): Queue events each time cycle.

2004-07-21  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkImagePainter.java
	(imageComplete): Call image.imageComplete().
	* java/awt/image/MemoryImageSource.java:
	Reimplement consumers as a Vector instead of a Hashtable.  This is
	because enumeration on a Hashtable is not thread-safe.
	(addConsumer): Adapt to Vector consumers.
	(isConsumer): Adapt to Vector consumers.
	(removeConsumer): Adapt to Vector consumers.
	(startProduction): Adapt to Vector consumers. Call imageComplete()
	with STATICIMAGEDONE flag instead of SINGLEFRAME flag.
	(newPixels): Adapt to Vector consumers.
	(sendPicture): Set the color model of the image consumer.
	(newPixels(IIII)): Adapt to Vector consumers.
	(newPixels(IIIIB)): Adapt to Vector consumers.

2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* java/awt/Component.java (deliverEvent): Implement.
	(postEvent): Implement.
	(handleEvent): Implement.
	(translateEvent): New method.
	(dispatchEventImpl): Document.  Add AWT 1.0 event handling.
	* java/awt/Container.java (deliverEvent): Implement.
	* java/awt/Event.java (paramString): Fix formatting.
	* java/awt/Font.java (toString): Likewise.
	* java/awt/Window.java (postEvent): Implement.

2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
	Set window's focus owner upon receiving a FOCUS_LOST event.
	* java/awt/Window.java (Window()): Refocus the previously
	focused component within the window when the window regains the
	top-level focus.
	(setFocusOwner): New method.
	* java/awt/Component.java (requestFocus): Add FIXME.

	* libgcj.pc.in: Remove library flags.

2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkPanelPeer.java (handleEvent): Handle
	MOUSE_PRESSED event.
	* java/awt/Component.java (requestFocus()): Handle Panel
	specially.  Post FOCUS_LOST event on opposite component.
	(requestFocus(boolean)): Likewise.
	(requestFocusInWindow(boolean)): Likewise.
	(paramString): Reorder dimension fields.
	* java/awt/Container.java (paramString): Fix string format.
	* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
	Handle FOCUS_LOST events.  Don't handle Windows specially.  Only
	process key events if the focus owner is non-null.
	(dispatchKeyEvent): Likewise.
	* java/awt/Frame.java (paramString): Fix formatting.
	(generateName): New method.
	(getUniqueLong): Likewise.
	* java/awt/KeyboardFocusManager.java (getFocusOwner): Check if
	the temporary focus owner is null.  If so, return the permanent
	focus owner.
	* java/awt/Panel.java (generateName): New method.
	(getUniqueLong): Likewise.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Rework
	signal handling to make callbacks more specific.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/Position.java
	(Bias): Implemented.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/LookAndFeel.java
	(provideErrorFeedback): New method.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JTextArea.java
	(tabSize): New field.
	(getTabSize): New method.
	(setTabSize): Likewise.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/ActionMap.java:
	Fixed javadocs all over.
	(serialVersionUID): Made private.
	(parent): Don't explicitely initialize with default value.
	(get): SImplified.
	(keys): Reimplemented.
	(allKeys): Likewise.
	(convertSet): Removed.
	* javax/swing/ComponentInputMap.java:
	Fixed javadocs all over.
	(ComponentInputMap): Implemented.
	(put): Likewise.
	(clear): Likewise.
	(remove): Likewise.
	(SetParent): Likewise.
	(getComponent): Likewise.
	* javax/swing/InputMap.java:
	Fixed javadocs all over.
	(serialVersionUID): Made private.
	(parent): Don't explicitely initialize with default value.
	(get): SImplified.
	(keys): Reimplemented.
	(allKeys): Likewise.
	(convertSet): Removed.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/ActionMap.java,
	javax/swing/ComponentInputMap.java,
	javax/swing/InputMap.java,
	javax/swing/table/DefaultTableColumnModel.java,
	javax/swing/table/TableColumn.java,
	javax/swing/table/TableColumnModel.java,
	javax/swing/table/TableModel.java,
	javax/swing/text/AbstractDocument.java,
	javax/swing/text/TextAction.java:
	Reformated.

2004-07-21  Graydon Hoare  <graydon@redhat.com>

	* gnu/java/awt/peer/gtk/GtkToolkit.java (bufferedImageOrError):
	Make method non-static.
	* javax/swing/AbstractButton.java:
	Rename fields to match property names where possible.
	(iconTextGap): New property.
	* javax/swing/JCheckBox.java: Match AbstractButton changes.
	(init) New method, call from after various constructors.
	* javax/swing/JComponent.java (revalidate):
	Invalidate before queueing repair.
	* javax/swing/JList.java (getPreferredScrollableViewportSize):
	Reimplement in terms of visibleRowCount property.
	* javax/swing/JMenuButton.java: Match AbstractButton changes.
	* javax/swing/JScrollPane.java (createScrollListener):
	Remove tracing chatter.
	* javax/swing/JToggleButton.java: Match AbstractButton changes.
	* javax/swing/RepaintManager.java (addInvalidComponent):
	Don't invalidate.
	* javax/swing/ScrollPaneLayout.java: Various corrections to layout
	calculations.
	* javax/swing/SwingUtilities.java (layoutCompoundLabel):
	Mimic sun behavior on top left/right positioning.
	* javax/swing/ViewportLayout.java (preferredLayoutSize):
	Remove mistaken use of preferredScrollableViewportSize here.
	(layoutContainer): Use view's preferred size as basis.
	* javax/swing/plaf/basic/BasicButtonUI.java:
	Set, get, and use textIconGap property.
	(paint) Paint text returned from layout (with ellipsis).
	* javax/swing/plaf/basic/BasicListUI.java:
	Remove tracing chatter, correct various minor calculations.
	(getCellBounds): Update layout state before calculating.
	* javax/swing/plaf/basic/BasicLookAndFeel.java (Button.Margin):
	Use margin default similar to sun's.
	* javax/swing/plaf/basic/BasicScrollBarUI.java (ArrowIcon):
	(createIncreaseIcon): Center icon, minimize margins.
	(createDecreaseIcon): Likewise.
	* javax/swing/plaf/basic/BasicScrollPaneUI.java (installDefaults):
	Implement.
	(installUI): Call it.
	(uninstallDefaults): Implement.
	(uninstallUI): Call it.
	* javax/swing/plaf/basic/BasicToolBarUI.java (DragWindow):
	Call existing Window constructor.
	* javax/swing/plaf/basic/BasicViewportUI.java (paint):
	Set clip before painting.

2004-07-21  Olga Rodimina <rodimina@redhat.com>

	* javax/swing/JMenuItem.java:
	(processMouseEvent): Reimplemented to deal with
	mouse drag events.
	(createMenuDragMouseEvent): New private helper method.
	Creates MenuDragMouseEvent.
	* javax/swing/MenuSelectionManager.java
	(componentForPoint): Implemented.
	(isComponentPartOfCurrentMenu): Made public.
	(processMouseEvent): Reimplemented to deal with
	mouse drag events.
	(setSelectedPath): Corrected small mistake that caused
	path to be set incorrectly.
	(getPath): If given component is JMenu then also add this
	menu's popup menu to the selected path.
	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	(getPath): Ditto.
	(getPreferredSize): Call getPreferredMenuItemSize().
	(getPreferredItemSize): Moved code from getPreferredSize to here.
	(installListeners): Install MouseMotionListeners.
	(MouseInputHandler): Pass mouse release event to MenuSelectionManager
	if mouse wasn't released in the bounds of this menu item.
	(MenuDragMouseHandler): Implemented.
	* javax/swing/plaf/basic/BasicMenuUI.java:
	(installListeners): Install MouseMotionListener and
	MenuDrageMouseListener.
	(MenuDragMouseHandler): Implemented.
	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
	(uninstallListeners): Implemented.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JCheckBox.java: Reformated.
        (JCheckBox): Fixed all constructors.
        (isBorderPaintedFlat): New method.
        (setBorderPaintedFlat): New method.
	* javax/swing/JEditorPane.java
        (createEditorKitForContentType): Made public.
        (scrollToReference): Likewise.
	* javax/swing/JTextArea.java
        (setLineWrap): Fire property change.
	* javax/swing/JToggleButton.java
        (JToggleButton): New constructor.
        (JToggleButton): Simplified.
	* javax/swing/text/AttributeSet.java
        (FontAttribute): Renamed from FontCharacterAttribute.
	* javax/swing/text/JTextComponent.java
        (KeyBinBinding): Added javadoc.
        (JTextComponent): Likewise.
        (getAccessibleContext): Fixed javadoc.
	* javax/swing/text/View.java
        (View): Added javadoc.
	* javax/swing/text/TabableView.java: New file.
	* Makefile.am: Added javax/swing/text/TabableView.java.
	* Makefile.in: Regenerated.

2004-07-21  Graydon Hoare  <graydon@redhat.com>

	* java/awt/image/BufferedImage.java (getSource): Remove tracing chatter.
	* gnu/java/awt/peer/gtk/GtkToolkit.java
	(GtkErrorImage): New helper class.
	(bufferedImageOrError): New helper method.
	(createImage): Use it.

2004-07-21  David Jee  <djee@redhat.com>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
	(setCaretPosition): Scroll the text view so the new caret position
	is visible on screen.

2004-07-21  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkContainerPeer.java
	(setBounds): Do not validate awtComponent here.
	* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
	(getPreferredSize): New method.
	* java/awt/ScrollPane.java
	(ScrollPane): Set default size to 100x100.
	(addNotify): If child is not a Panel, wrap it with a new Panel.
	(paramString): Implement.

2004-07-21  Olga Rodimina  <rodimina@redhat.com>

	* javax/swing/JMenu.java:
	(setSelected): Display popup menu only if this menu
	is showing on the screen.
	* javax/swing/JPopupMenu.java:
	(processMouseEvent): Added comment.
	(processKeyEvent): Likewise.
	* javax/swing/MenuSelectionManager.java:
	(clearSelectedPath): Only fireStateChanged() after
	selected path was changed, not before.
	(setSelectedPath): Likewise.
	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	(paintMenuItem): Corrected position of menu item's
	icon.
	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
	(installUI): Correct setDefaultLightWeightPopupEnabled call.
	(popupMenuCanceled): Reimplemented.
	(popupMenuWillBecomeVisible): Select first menu item by default
	when displaying free floating popup menus.
	(TopWindowListener): Reimplemented.

2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* java/awt/Panel.java (dispatchEventImpl): Override to prevent
	Panel from being painted twice when it is first shown.

2004-07-21  Olga Rodimina  <rodimina@redhat.com>

	* java/awt/Window.java: Reverted changes from my
	previous patch for creating window without an owner.
	* javax/swing/SwingUtilities.java:
	(SwingUtilities.OwnerFrame): made static.
	(OwnerFrame.setVisible): New method. Overridden with
	empty implementation.
	(OwnerFrame.isShowing): New method. Ovverridden
	to return always true.

2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(GtkComponentPeer): Remove temporary try/catch block.
	(setVisible): Call show and hide.
	(show): Make native.
	(hide): Likewise.
	(getArgs): Don't add "visible" argument.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(property_notify_predicate): Return Bool instead of int.
	(find_layout): New function.
	(connectJObject): Call find_layout.
	(connectSignals): Likewise.
	(moveLayout): Likewise.
	(gtkLayoutSetVisible): Likewise.

2004-07-21  Mark Wielaard  <mark@klomp.org>

	* java/awt/event/InvocationEvent.java (dispatch): Synchronize
	on notifier object before calling notifyAll().

2004-07-21  Olga Rodimina  <rodimina@redhat.com>

	* java/awt/Window.java: Changed constructors to use new
	method that is described below. Constructors call this
	methods only if newly created window should have an owner.
	(setWindowOwner): New method. Implementation for
	this method is moved from this(owner,configuration).
	* javax/swing/JWindow.java:
	(JWindow): Reimplement to use SwingUtilities.ownerFrame
	instead of owner.
	* javax/swing/SwingUtilities.java:
	(ownerFrame): Change type of this field to OwnerFrame.
	(getOwnerFrame): Changed to return object of type OwnerFrame.
	(SwingUtilities.OwnerFrame): New class. Represents owner
	of a Window that is not provided with one.

2004-07-21  Olga Rodimina  <rodimina@redhat.com>

	*  javax/swing/AbstractButton.java:
	(configurePropertiesFromAction): Set action command
	to button's text by default if action command is not
	explicitely specified.
	* javax/swing/JMenu.java: Remove unnecessary listener
	and methods relevant to it.
	(setSelected): Reimplemented.
	(menuSelectionChanged): Moved most part of implementation to
	setSelected() and call it instead.
	* javax/swing/JMenuItem.java:
	(init): Comment out statement that sets paint_border to false.
	(configurePropertiesFromAction): Do not set accelerator
	for JMenu.
	(menuSelectionChanged): Change selected index in the selection
	model of menu item's parent.
	* javax/swing/JPopupMenu.java:
	(remove): Set constraints.fill field to GridBagConstraints.BOTH
	instead of GridBagConstraints.HORIZONTAL.
	(insert): Likewise.
	(createActionChangeListener): Implemented.
	(setVisible): Correct location of HeavyWeightMenu and
	don't firePopupMenuCanceled().
	(menuSelectionChanged): Implemented.
	(ActionChangeListener): New Listener. Implemented.
	* javax/swing/plaf/basic/BasicMenuBarUI.java:
	(BasicMenuBarUI.ContainerHandler): Implemented.
	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	(paintMenuItem): Uncommented out code that paints
	icon, now that icons are working properly.
	(PropertyChangeListener): Implemented.
	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
	Added javadocs.
	(topWindowListener): New field.
	(Constructor): initialize topWindowListener.
	(BasicPopupMenuUI.TopWindowListener): Implemented.
	(BasicPopupMenuUI.PopupMenuHandler): Implemented.
	(BasicPopupMenuUI.TopWindowListener): New ComponentListener.
	Implemented.



2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicButtonUI.java
	(paintFocus): Fixed method signature.
	(paintButtonPressed): Likewise.
	(paintButtonNormal): Likewise.
	(paintText): New method.
	* javax/swing/plaf/basic/BasicLabelUI.java
	(paint): Re-indented.
	* javax/swing/plaf/basic/BasicTextUI.java
	(installUI): Set parent textComponent to opaque.
	* javax/swing/text/DefaultHighlighter.java
	(checkPositions): New helper method.
	(addHighlight): Throws BadLocationException, check positions.
	(changeHighlight): Likewise.
	* javax/swing/text/EditorKit.java
	(EditorKit): Implements Serializable.
	* javax/swing/text/JTextComponent.java
	(getUI): Added javadoc.
	(setUI): Likewise.
	(upadteUI): Added javadoc, don't revalidate and repaint.

2004-07-21  David Jee  <djee@redhat.com>

	* java/awt/GridBagLayout.java
	(ArrangeGrid): Use PREFERREDSIZE instead of MINSIZE.
	* javax/swing/AbstractButton.java
	(setText): Reindent.
	* javax/swing/RepaintManager.java
	(addInvalidComponent): Find the first ancestor that isValidateRoot().

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JFormattedTextField.java
	(value): New field.
	(JFormattedTextField): Implemented.
	(getValue): Likewise.
	(setValue): Likewise.
	* javax/swing/LookAndFeel.java
	(getSupportsWindowDecorations): New method.
	* javax/swing/UIDefaults.java:
	Use java.beans.PropertyChangeSupport instead of doing all ourself.
	(addPropertyChangeListener): Made public.
	(addResourceBundle): Likewise.
	(removeResourceBundle): Likewise.
	(setDefaultLocale): Likewise.
	* javax/swing/plaf/basic/BasicRootPaneUI.java
	(BasicRootPaneUI): Implements PropertyChangeListener.
	(propertyChange): New method.
	* javax/swing/plaf/basic/BasicTextUI.java
	(BasicHighlighter): New inner class.
	(createHighlighter): New method.
	* javax/swing/plaf/basic/BasicToolBarUI.java
	(DragWindow): Extends java.awt.Window.
	* javax/swing/text/JTextComponent.java
	(getDocument): Removed debug output.
	* javax/swing/plaf/basic/BasicTextFieldUI.java,
	javax/swing/text/DefaultHighlighter.java,
	javax/swing/text/FieldView.java,
	javax/swing/text/PlainView.java: New files.
	* Makefile.am: Added new files.
	* Makefile.in: Regenerated.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JEditorPane.java
	(createDefaultEditorKit): Use javax.swing.text.DefaultEditorKit.
	(createEditorKitForContentType): Likewise.
	* javax/swing/text/DefaultEditorKit.java
	(serialVersionUID): Added constant field.
	(EndOfLineStringPropery): Fixed typo.
	(DefaultEditorKit): New constructor.
	* javax/swing/text/Segment.java:
	Import java.text.CharacterIterator.
	* javax/swing/text/CharacterIterator.java,
	javax/swing/text/PlainEditorKit.java: Removed.
	* Makefile.am: Removed javax/swing/text/CharacterIterator.java and
	javax/swing/text/PlainEditorKit.java.
	* Makefile.in: Regenerated.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JButton.java,
	javax/swing/text/DefaultEditorKit.java,
	javax/swing/text/EditorKit.java,
	javax/swing/text/Segment.java,
	javax/swing/text/StyledEditorKit.java:
	Reformatted.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/ImageIcon.java
	(file): Removed.
	(description): Renamed from descr.
	(ImageIcon): Added missing constructors.
	(setParent): Removed.
	(setImageObserver): New method.
	(getImageObserver): New method.
	(paintIcon): Handle observer = null.
	* javax/swing/JButton.java
	(removeNotify): Fixed javadoc.
	(updateUI): Simplified.
	* javax/swing/JRootPane.java
	(serialVersionUID): New constant field.
	* javax/swing/UIManager.java:
	Fixed javadocs all over.
	(setLookAndFeel): Throws UnsupportedLookAndFeelException.
	* javax/swing/text/AbstractDocument.java
	(createPosition): Throws BadLocationException.
	(getText): Likewise.
	(remove): Likewise.
	* javax/swing/text/ComponentView.java
	(modelToView): Likewise.
	* javax/swing/text/DefaultEditorKit.java:
	Made all public methods public.
	(read): Throws BadLocationException and IOException.
	(write): Likewise.
	* javax/swing/text/EditorKit.java:
	Made all public methods public.
	(serialVersionUID): New constant field.
	(clone): New method.
	(read): Throws BadLocationException and IOException.
	(write): Likewise.
	* javax/swing/text/Segment.java
	(array): Made public.
	(count): Likewise.
	(offset): Likewise.
	(Segment): New constructors.
	(clone): Reimplemented.
	* javax/swing/text/StyledEditorKit.java
	(serialVersionUID): New constant field.

2004-07-21  Graydon Hoare  <graydon@redhat.com>

	* java/awt/image/BufferedImage.java
	(getSource): Implement.
	* javax/swing/ImageIcon.java
	(ImageIcon): Implement ctor.
	* javax/swing/ScrollPaneLayout.java
	(preferredLayoutSize): Be more careful about nulls.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/AttributeSet.java
	(CharacterAttribute): New interface
	(ColorAttribute): Likewise.
	(FontCharacterAttribute): Likewise.
	(ParagraphAttribute): Likewise.
	* javax/swing/text/DefaultCaret.java
	(moveCaret): New method.
	(positionCaret): Likewise.
	(repaint): Made protected.
	* javax/swing/text/JTextComponent.java
	(KeyBinding): Made it static.
	* javax/swing/text/View.java
	(getContainer): Honor parent == null.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/AbstractDocument.java:
	Reformatted.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicRootPaneUI.java:
	Import javax.swing.UIManager explicitely.
	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
	(ScrollingButton): Made it static.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/UIDefaults.java
	(ActiveValue): Made public.
	(LazyValue): Likewise.
	* javax/swing/plaf/basic/BasicTextUI.java
	(RootView): Reintroduced.
	(view): Removed.
	(rootView): New field.
	(installUI): Create document if needed, initialize rootView.
	(uninstallUI): Hanle rootView.
	(paint): Likewise.
	(getRootView): Likewise.
	(setView): Likewise.
	* javax/swing/text/DefaultCaret.java:
	Renamed all "evt" variables to "event".

2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* libgcj.spec.in: Add -l-java-util-logging.

2004-07-21  Andreas Tobler  <a.tobler@schweiz.ch>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
	(init_dpi_conversion_factor): Check for int_dpi < 0 in case
	gtk-xft-dpi can no calculate the right value.
	(dpi_changed_cb): Mark *pspec as unsused.

2004-07-21  David Jee  <djee@redhat.com>

	* java/awt/Component.java
	(move): Delegate to setBounds().
	(resize): Likewise.
	(reshape): Fix so it repaints parent and self only when necessary.

2004-07-21  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(GtkComponentPeer): Revert previous patch from 2004-06-22.
	(setVisible): Likewise.
	(show): Likewise.
	(hide): Likewise.
	(getArgs): Likewise.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(property_notify_predicate): Likewise.
	(find_layout): Likewise.
	(connectJObject): Likewise.
	(connectSignals): Likewise.
	(moveLayout): Likewise.
	(gtkLayoutSetVisible): Likewise.

2004-07-21  Graydon Hoare  <graydon@redhat.com>

	* Makefile.am
	(jv_convert_LDADD):
	(gij_LDADD):
	(rmic_LDADD):
	(rmiregistry_LDADD): Add lib-java-util-logging.la
	* Makefile.in: Regenerate.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/AbstractDocument.java
	(replace): Dont use protected method of java.util.Vector directly.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicTextUI.java
	(installUI): Call specialized install methods.
	(installDefaults): New method.
	(installListeners): Likewise.
	(installKeyboardActions): Likewise.
	(uninstallUI): Likewise.
	(uninstallDefaults): New method.
	(uninstallListeners): Likewise.
	(uninstallKeyboardActions): Likewise.
	(getPropertyPrefix): New abstract method.
	(paint): Made final, just call paintSafely().
	(paintSavely): New method.
	(paintBackground): Likewise.
	(getVisibleEditorRect): Likewise.
	* javax/swing/text/LayeredHighlighter.java,
	javax/swing/text/TabExpander.java: New files.
	* Makefile.am: Added javax/swing/text/LayeredHighlighter.java
	and javax/swing/text/TabExpander.java.
	* Makefile.in: Regenerated.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicTextUI.java
	(BasicTextUI): Made abstract.
	(BasicCaret): New inner class.
	(view): Don't explicitely initialize with "null".
	(textComponent): New field.
	(textColor): Removed.
	(disabledTextColor): Removed.
	(normalBackgroundColor): Removed.
	(RootView): Removed commented out inner class.
	(createUI): Removed.
	(createCaret): New method.
	(getComponent): Likewise.
	(installUI): Initialize textComponent only.
	(getPreferredSize): Use installed JTextComponent.
	(setView): New method.
	(create): Likewise.
	* javax/swing/text/JTextComponent.java
	(highlighter): New field.
	(caretColor): Likewise.
	(disabledTextColor): Likewise.
	(seletedTextColor): Likewise.
	(selectionColor): Likewise.
	(setUI): New method.
	(getCaretColor): Likewise.
	(setCaretColor): Likewise.
	(getDisabledColor): Likewise.
	(setDisabledColor): Likewise.
	(getSelectedTextColor): Likewise.
	(setSelectedTextColor): Likewise.
	(getSelectionColor): Likewise.
	(setSelectionColor): Likewise.
	(getHighlighter): Likewise.
	(setHighlighter): Likewise.
	(replaceSelection): Likewise.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicScrollPaneUI.java
	(BasicScrollPaneUI): Implements ScrollPaneConstants.
	* javax/swing/plaf/basic/BasicToolBarUI.java
	(BasicToolBarUI): Implements SwingConstants.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JPopupMenu.java: Removed CVS tags.
	* javax/swing/UIDefaults.java: Reformatted.
	* javax/swing/plaf/basic/BasicRootPaneUI.java:
	Explicitely import used classes.

2004-07-21  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(GtkComponentPeer): Remove temporary try/catch block.
	(setVisible): Call show and hide.
	(show): Make native.
	(hide): Likewise.
	(getArgs): Don't add "visible" argument.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(property_notify_predicate): Return Bool instead of int.
	(find_layout): New function.
	(connectJObject): Call find_layout.
	(connectSignals): Likewise.
	(moveLayout): Likewise.
	(gtkLayoutSetVisible): Likewise.

2004-07-21  Olga Rodimina  <rodimina@redhat.com>

	* javax/swing/AbstractButton.java:
	(setDisplayedMnemonicIndex): Check if button
	text is not null before checking its length.
	* javax/swing/JMenuItem.java:
	(processMouseEvent): Disarm menu item if mouse has
	exited it.
	* javax/swing/plaf/basic/BasicMenuUI.java:
	(MouseInputHandler.mouseEntered): Do not raise
	popup menu if this menu is already selected.
	(MouseInputHandler.mousePressed): Do not fire
	MenuEvents.
	(MenuHandler): Implemented.

2004-07-21  Olga Rodimina  <rodimina@redhat.com>

	* javax/swing/JCheckBoxMenuItem.java: Added Javadoc.
	(getSelectedObjects): Implemented.
	* javax/swing/JRadioButtonMenuItem.java: Added Javadoc.
	* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java:
	Added javadoc for few methods.
	(processMouseEvent): Made public.
	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java
	(processMouseEvent): Likewise.

2004-07-21  Olga Rodimina  <rodimina@redhat.com>

	* javax/swing/AbstractButton.java:
	(init): Set display mnemonic index to -1.
	(setMnemonic(char)): Use setMnemonic(int).
	(setMnemonic(int)): Set display mnemonic index.
	(getDisplayedMnemonicIndex): Change method signature
	by removing 'index' parameter.
	* javax/swing/plaf/basic/BasicLookAndFeel.java:
	Added default for Menu.selectionBackground.
	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	(paintMenuItem): Change background color of the selected
	menu item.
	(paintText): Paint differently when menu item is disabled.
	Also paint mnemonic if it appears in the menu item's label.
	(paintAccelerator): Paint accelerator differently
	if menu item is disabled.
	* javax/swing/plaf/basic/BasicMenuUI.java:
	(installDefaults): Install defaults for
	selectionForeground and selectionBackground.
	(uninstallDefaults): Uninstall defauls for
	selectionForeground and selectionBackground.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/AbstractDocument.java
	(BranchElement): Implemented.
	(LeafElement): Implemented.
	* javax/swing/text/DefaultCaret.java:
	Import used classes.
	(serialVersionUID): New constant.
	* javax/swing/text/JTextComponent.java
	(AccessibleJTextComponent): Removed dead declaration.
	(caretPos): Removed.
	(setCaret): New method.
	* javax/swing/text/PlainDocument.java
	(rootElement): New field.
	(PlainDocument): Initialize rootElement.
	(createDefaultRoot): New method.
	(getDefaultRootElement): Implemented.
	* javax/swing/text/View.java: Reformatted.
	* javax/swing/text/ViewFactory.java
	(create): Added javadoc.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/ToolTipManager.java: Reformatted.

2004-07-21  Rodimina Olga  <rodimina@redhat.com>

	* javax/swing/AbstractButton.java
	(changeEvent): New field.
	(fireItemStateChanged): Change source of the event
	to 'this' before firing it to button listeners.
	(fireActionPerformed): Likewise.
	(fireStateChanged): Likewise.
	(createActionListener): Do not set source
	of the event to AbstractButton.
	* javax/swing/plaf/basic/BasicMenuBarUI.java:
	(ContainerHandler.componentAdded): Removed
	print out statement.
	(ContainerHandler.componentRemoved): Likewise.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/Highlighter.java: New file.
	* Makefile.am: Added javax/swing/text/Highlighter.java.
	* Makefile.in: Regenerated.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/ToolTipManager.java
	(stillInsideTimerAction): Fixed constructor arguments.
	(outsideTimerAction): Likewise.
	(insideTimerAction): Likewise.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JButton.java: Reformatted.
	* javax/swing/JFormattedTextField.java
	(getUIClassID): Implemented.
	* javax/swing/JRootPane.java
	(serialVersionUID): New constant.
	* javax/swing/JTextField.java
	(align): New field.
	(JTextField): Simplified.
	(getUIClassID): New method.
	(getActionListeners): Added @since tag.
	(setColumns): Invalidate layout and repaint.
	(getHorizontalAlignment): New method.
	(setHorizontalAlignment): New method.
	(selectAll): Removed.
	* javax/swing/SwingUtilities.java
	(getAncestorOfClass): Removed redundant @see tag.
	(isLeftMouseButton): Fixed implementation.
	(isMiddleMouseButton): Likewise.
	(isRightMouseButton): Likewise.
	* javax/swing/text/AbstractDocument.java
	(AttributeContext.addAttribute): New method.
	(AttributeContext.addAttributes): New method.
	(AttributeContext.getEmptySet): New method.
	(AttributeContext.reclaim): New method.
	(AttributeContext.removeAttribute): New method.
	(AttributeContext.removeAttributes): New method.
	* javax/swing/text/Document.java
	(createPosition): Throws BadLocationException.
	(getText): Likewise.
	(remove): Likewise.
	* javax/swing/text/JTextComponent.java
	(getText): Return null if no document is set. Catch
	BadLocationException.
	(getUI): Return ui.
	(updateUI): Simplified.

2004-07-21  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JButton.java
	(removeNotify): Fixed javadoc.
	(updateUI): Simplified.

2004-07-21  David Jee  <djee@redhat.com>

	* gnu/java/awt/image/ImageDecoder.java
	(startProduction): Only add consumer if it's not added yet.
	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
	(GdkPixbufDecoder): Don't call initState() here.
	(produce): Call initState() here, to ensure area_prepared and
	area_updated signals are properly connected.
	* gnu/java/awt/peer/gtk/GtkImage.java
	(setColorModel): Use equals() to compare ColorModel objects.
	(setPixels): Likewise.
	* java/awt/image/ColorModel.java
	(equals): Fix typo. Use Arrays.equals() to compare int arrays.
	* java/awt/image/RGBImageFilter.java
	(setColorModel): Set consumer's color model.
	(setPixels): Use equals() to compare ColorModel objects.

From-SVN: r85051
2004-07-22 15:36:05 +00:00

1549 lines
47 KiB
Java

/* JOptionPane.java
Copyright (C) 2004 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.Component;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Frame;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.swing.Icon;
import javax.swing.JInternalFrame;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
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
{
/**
* DOCUMENT ME!
*/
protected class AccessibleJOptionPane extends JComponent.AccessibleJComponent
{
/** DOCUMENT ME! */
private static final long serialVersionUID = 686071432213084821L;
/**
* Creates a new AccessibleJOptionPane object.
*/
protected AccessibleJOptionPane()
{
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public AccessibleRole getAccessibleRole()
{
return null;
}
}
/** DOCUMENT ME! */
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 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 = SwingUtilities.getOwnerFrame();
/**
* 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();
invalidate();
repaint();
}
/**
* 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;
// FIXME: This dialog should be centered on the parent
// or at the center of the screen (if the parent is null)
// Need getGraphicsConfiguration to return non-null in
// order for that to work so we know how large the
// screen is.
dialog.getContentPane().add(this);
dialog.setModal(true);
dialog.setResizable(false);
dialog.invalidate();
dialog.repaint();
return dialog;
}
/**
* This method creates a new JInternalFrame that is in the JDesktopPane
* which contains the parentComponent given. If no suitable JDesktopPane
* 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.
*/
public JInternalFrame createInternalFrame(Component parentComponent,
String title)
throws RuntimeException
{
JDesktopPane toUse = getDesktopPaneForComponent(parentComponent);
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.setClosable(true);
toUse.add(frame);
// FIXME: JLayeredPane broken? See bug # 16576
// frame.setLayer(JLayeredPane.MODAL_LAYER);
return frame;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
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()
{
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);
JDialog dialog = pane.createDialog(parentComponent, "Select an Option");
dialog.pack();
dialog.show();
return ((Integer) pane.getValue()).intValue();
}
/**
* 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.pack();
dialog.show();
return ((Integer) pane.getValue()).intValue();
}
/**
* 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.pack();
dialog.show();
return ((Integer) pane.getValue()).intValue();
}
/**
* 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.pack();
dialog.show();
return ((Integer) pane.getValue()).intValue();
}
/**
* 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.pack();
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.pack();
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.pack();
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.pack();
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. 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.pack();
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.pack();
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, pane);
return ((Integer) pane.getValue()).intValue();
}
/**
* 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, pane);
return ((Integer) pane.getValue()).intValue();
}
/**
* 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, pane);
return ((Integer) pane.getValue()).intValue();
}
/**
* 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, pane);
return ((Integer) pane.getValue()).intValue();
}
/**
* 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, pane);
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, pane);
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, pane);
return (String) 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, pane);
}
/**
* 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, pane);
}
/**
* 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, pane);
}
/**
* 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, pane);
return ((Integer) pane.getValue()).intValue();
}
/**
* 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.pack();
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.pack();
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.pack();
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.pack();
dialog.show();
return ((Integer) pane.getValue()).intValue();
}
/**
* This method resets the UI to the Look and Feel default.
*/
public void updateUI()
{
setUI((OptionPaneUI) UIManager.getUI(this));
invalidate();
}
/**
* 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.
* @param pane The JOptionPane to add to the JInternalFrame.
*/
private static void startModal(JInternalFrame f, JOptionPane pane)
{
f.getContentPane().add(pane);
f.pack();
f.show();
Dimension pref = f.getPreferredSize();
f.setBounds(0, 0, pref.width, pref.height);
synchronized (f)
{
final JInternalFrame tmp = f;
tmp.toFront();
f.addInternalFrameListener(new InternalFrameAdapter()
{
public void internalFrameClosed(InternalFrameEvent e)
{
synchronized (tmp)
{
tmp.removeInternalFrameListener(this);
tmp.notifyAll();
}
}
});
try
{
while (! f.isClosed())
f.wait();
}
catch (InterruptedException ignored)
{
}
}
}
}