gcc/libjava/javax/swing/JComponent.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

1909 lines
55 KiB
Java

/* JComponent.java -- Every component in swing inherits from this class.
Copyright (C) 2002, 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.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.geom.Rectangle2D;
import java.awt.image.ImageObserver;
import java.awt.peer.LightweightPeer;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.io.Serializable;
import java.util.EventListener;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Vector;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleStateSet;
import javax.swing.border.Border;
import javax.swing.event.AncestorListener;
import javax.swing.event.EventListenerList;
import javax.swing.event.SwingPropertyChangeSupport;
import javax.swing.plaf.ComponentUI;
/**
* Every component in swing inherits from this class (JLabel, JButton, etc).
* It contains generic methods to manage events, properties and sizes. Actual
* drawing of the component is channeled to a look-and-feel class that is
* implemented elsewhere.
*
* @author Ronald Veldema (rveldema&064;cs.vu.nl)
* @author Graydon Hoare (graydon&064;redhat.com)
*/
public abstract class JComponent extends Container implements Serializable
{
private static final long serialVersionUID = -7908749299918704233L;
/**
* Accessibility support is currently missing.
*/
protected AccessibleContext accessibleContext;
public abstract class AccessibleJComponent
extends AccessibleAWTContainer
{
protected class AccessibleFocusHandler
implements FocusListener
{
protected AccessibleFocusHandler(){}
public void focusGained(FocusEvent event){}
public void focusLost(FocusEvent valevent){}
}
protected class AccessibleContainerHandler
implements ContainerListener
{
protected AccessibleContainerHandler() {}
public void componentAdded(ContainerEvent event) {}
public void componentRemoved(ContainerEvent valevent) {}
}
private static final long serialVersionUID = -7047089700479897799L;
protected ContainerListener accessibleContainerHandler;
protected FocusListener accessibleFocusHandler;
protected AccessibleJComponent() {}
public void addPropertyChangeListener(PropertyChangeListener listener) {}
public void removePropertyChangeListener(PropertyChangeListener listener) {}
public int getAccessibleChildrenCount() { return 0; }
public Accessible getAccessibleChild(int value0) { return null; }
public AccessibleStateSet getAccessibleStateSet() { return null; }
public String getAccessibleName() { return null; }
public String getAccessibleDescription() { return null; }
public AccessibleRole getAccessibleRole() { return null; }
protected String getBorderTitle(Border value0) { return null; }
}
/**
* An explicit value for the component's preferred size; if not set by a
* user, this is calculated on the fly by delegating to the {@link
* ComponentUI.getPreferredSize} method on the {@link #ui} property.
*/
Dimension preferredSize;
/**
* An explicit value for the component's minimum size; if not set by a
* user, this is calculated on the fly by delegating to the {@link
* ComponentUI.getMinimumSize} method on the {@link #ui} property.
*/
Dimension minimumSize;
/**
* An explicit value for the component's maximum size; if not set by a
* user, this is calculated on the fly by delegating to the {@link
* ComponentUI.getMaximumSize} method on the {@link #ui} property.
*/
Dimension maximumSize;
/**
* A value between 0.0 and 1.0 indicating the preferred horizontal
* alignment of the component, relative to its siblings. The values
* {@link #LEFT_ALIGNMENT}, {@link #CENTER_ALIGNMENT}, and {@link
* #RIGHT_ALIGNMENT} can also be used, as synonyms for <code>0.0</code>,
* <code>0.5</code>, and <code>1.0</code>, respectively. Not all layout
* managers use this property.
*
* @see #getAlignmentX
* @see #setAlignmentX
* @see javax.swing.OverlayLayout
* @see javax.swing.BoxLayout
*/
float alignmentX = 0.0f;
/**
* A value between 0.0 and 1.0 indicating the preferred vertical
* alignment of the component, relative to its siblings. The values
* {@link #TOP_ALIGNMENT}, {@link #CENTER_ALIGNMENT}, and {@link
* #BOTTOM_ALIGNMENT} can also be used, as synonyms for <code>0.0</code>,
* <code>0.5</code>, and <code>1.0</code>, respectively. Not all layout
* managers use this property.
*
* @see #getAlignmentY
* @see #setAlignmentY
* @see javax.swing.OverlayLayout
* @see javax.swing.BoxLayout
*/
float alignmentY = 0.0f;
/**
* The border painted around this component.
*
* @see #paintBorder
*/
Border border;
/**
* A tooltip associated with this component.
*
* @see #setToolTip
* @see #getToolTip
* @see #toolTipText
*/
JToolTip toolTip;
/**
* The text to show in the tooltip associated with this component.
*
* @see #setToolTipText
* @see #getToolTipText
* @see #toolTip
*/
String toolTipText;
/**
* <p>Whether to double buffer this component when painting. This flag
* should generally be <code>false</code>, except for top level
* components such as {@link JFrame} or {@link JApplet}.</p>
*
* <p>All children of a double buffered component are painted into the
* double buffer automatically, so only the top widget in a window needs
* to be double buffered.</p>
*
* @see #setDoubleBuffered
* @see #isDoubleBuffered
* @see #paintLock
* @see #paint
*/
boolean doubleBuffered = false;
/**
* A set of flags indicating which debugging graphics facilities should
* be enabled on this component. The values should be a combination of
* {@link DebugGraphics.NONE_OPTION}, {@link DebugGraphics.LOG_OPTION},
* {@link DebugGraphics.FLASH_OPTION}, or {@link
* DebugGraphics.BUFFERED_OPTION}.
*
* @see setDebugGraphicsOptions
* @see getDebugGraphicsOptions
* @see DebugGraphics
* @see getComponentGraphics
*/
int debugGraphicsOptions;
/**
* <p>This property controls two independent behaviors simultaneously.</p>
*
* <p>First, it controls whether to fill the background of this widget
* when painting its body. This affects calls to {@link
* JComponent#paintComponent}, which in turn calls {@link
* ComponentUI#update} on the component's {@link #ui} property. If the
* component is opaque during this call, the background will be filled
* before calling {@link ComponentUI#paint}. This happens merely as a
* convenience; you may fill the component's background yourself too,
* but there is no need to do so if you will be filling with the same
* color.</p>
*
* <p>Second, it the opaque property informs swing's repaint system
* whether it will be necessary to paint the components "underneath" this
* component, in Z-order. If the component is opaque, it is considered to
* completely occlude components "underneath" it, so they will not be
* repainted along with the opaque component.</p>
*
* <p>The default value for this property is <code>false</code>, but most
* components will want to set it to <code>true</code> when installing UI
* defaults in {@link ComponentUI#installUI}.</p>
*
* @see #setOpaque
* @see #isOpaque
* @see #paintComponent
*/
boolean opaque = false;
/**
* The user interface delegate for this component. Event delivery and
* repainting of the component are usually delegated to this object.
*
* @see #setUI
* @see #getUI
* @see #updateUI
*/
protected ComponentUI ui;
/**
* A hint to the focus system that this component should or should not
* get focus. If this is <code>false</code>, swing will not try to
* request focus on this component; if <code>true</code>, swing might
* try to request focus, but the request might fail. Thus it is only
* a hint guiding swing's behavior.
*
* @see #requestFocus
* @see #isRequestFocusEnabled
* @see #setRequestFocusEnabled
*/
boolean requestFocusEnabled;
/**
* Flag indicating behavior of this component when the mouse is dragged
* outside the component and the mouse <em>stops moving</em>. If
* <code>true</code>, synthetic mouse events will be delivered on regular
* timed intervals, continuing off in the direction the mouse exited the
* component, until the mouse is released or re-enters the component.
*
* @see setAutoscrolls
* @see getAutoscrolls
*/
boolean autoscrolls = false;
/**
* Listeners for events other than {@link PropertyChangeEvent} are
* handled by this listener list. PropertyChangeEvents are handled in
* {@link #changeSupport}.
*/
protected EventListenerList listenerList = new EventListenerList();
/**
* Support for {@link PropertyChangeEvent} events. This is constructed
* lazily when the component gets its first {@link
* PropertyChangeListener} subscription; until then it's an empty slot.
*/
private SwingPropertyChangeSupport changeSupport;
/**
* Storage for "client properties", which are key/value pairs associated
* with this component by a "client", such as a user application or a
* layout manager. This is lazily constructed when the component gets its
* first client property.
*/
private Hashtable clientProperties;
/**
* A lock held during recursive painting; this is used to serialize
* access to the double buffer, and also to select the "top level"
* object which should acquire the double buffer in a given widget
* tree (which may have multiple double buffered children).
*
* @see #doubleBuffered
* @see #paint
*/
private static final Object paintLock = new Object();
/**
* The default locale of the component.
*
* @see #getDefaultLocale
* @see #setDefaultLocale
*/
private static Locale defaultLocale;
public static final String TOOL_TIP_TEXT_KEY = "ToolTipText";
/**
* Constant used to indicate that no condition has been assigned to a
* particular action.
*
* @see #registerKeyboardAction
*/
public static final int UNDEFINED_CONDITION = -1;
/**
* Constant used to indicate that an action should be performed only when
* the component has focus.
*
* @see #registerKeyboardAction
*/
public static final int WHEN_FOCUSED = 0;
/**
* Constant used to indicate that an action should be performed only when
* the component is an ancestor of the component which has focus.
*
* @see #registerKeyboardAction
*/
public static final int WHEN_ANCESTOR_OF_FOCUSED_COMPONENT = 1;
/**
* Constant used to indicate that an action should be performed only when
* the component is in the window which has focus.
*
* @see #registerKeyboardAction
*/
public static final int WHEN_IN_FOCUSED_WINDOW = 2;
public JComponent()
{
super();
super.setLayout(new FlowLayout());
defaultLocale = Locale.getDefault();
debugGraphicsOptions = DebugGraphics.NONE_OPTION;
}
/**
* Helper to lazily construct and return the client properties table.
*
* @return The current client properties table
*
* @see #clientProperties
* @see #getClientProperty
* @see #putClientProperty
*/
private Hashtable getClientProperties()
{
if (clientProperties == null)
clientProperties = new Hashtable();
return clientProperties;
}
/**
* Get a client property associated with this component and a particular
* key.
*
* @param key The key with which to look up the client property
*
* @return A client property associated with this object and key
*
* @see #clientProperties
* @see #getClientProperties
* @see #putClientProperty
*/
public Object getClientProperty(Object key)
{
return getClientProperties().get(key);
}
/**
* Add a client property <code>value</code> to this component, associated
* with <code>key</code>. If there is an existing client property
* associated with <code>key</code>, it will be replaced.
*
* @param key The key of the client property association to add
* @param value The value of the client property association to add
*
* @see #clientProperties
* @see #getClientProperties
* @see #getClientProperty
*/
public void putClientProperty(Object key, Object value)
{
getClientProperties().put(key, value);
}
/**
* Unregister an <code>AncestorListener</code>.
*
* @param listener The listener to unregister
*
* @see addAncestorListener
*/
public void removeAncestorListener(AncestorListener listener)
{
listenerList.remove(AncestorListener.class, listener);
}
/**
* Unregister a <code>PropertyChangeListener</code>.
*
* @param listener The listener to register
*
* @see #addPropertyChangeListener
* @see #changeSupport
*/
public void removePropertyChangeListener(PropertyChangeListener listener)
{
if (changeSupport != null)
changeSupport.removePropertyChangeListener(listener);
}
/**
* Unregister a <code>PropertyChangeListener</code>.
*
* @param propertyName The property name to unregister the listener from
* @param listener The listener to unregister
*
* @see #addPropertyChangeListener
* @see #changeSupport
*/
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener)
{
if (changeSupport != null)
changeSupport.removePropertyChangeListener(propertyName, listener);
}
/**
* Unregister a <code>VetoableChangeChangeListener</code>.
*
* @param listener The listener to unregister
*
* @see #addVetoableChangeListener
*/
public void removeVetoableChangeListener(VetoableChangeListener listener)
{
listenerList.remove(VetoableChangeListener.class, listener);
}
/**
* Register an <code>AncestorListener</code>.
*
* @param listener The listener to register
*
* @see #removeVetoableChangeListener
*/
public void addAncestorListener(AncestorListener listener)
{
listenerList.add(AncestorListener.class, listener);
}
/**
* Register a <code>PropertyChangeListener</code>. This listener will
* receive any PropertyChangeEvent, regardless of property name. To
* listen to a specific property name, use {@link
* #addPropertyChangeListener(String,PropertyChangeListener)} instead.
*
* @param listener The listener to register
*
* @see #removePropertyChangeListener
* @see #changeSupport
*/
public void addPropertyChangeListener(PropertyChangeListener listener)
{
if (changeSupport == null)
changeSupport = new SwingPropertyChangeSupport(this);
changeSupport.addPropertyChangeListener(listener);
}
/**
* Register a <code>PropertyChangeListener</code> for a specific, named
* property. To listen to all property changes, regardless of name, use
* {@link #addPropertyChangeListener(PropertyChangeListener)} instead.
*
* @param propertyName The property name to listen to
* @param listener The listener to register
*
* @see #removePropertyChangeListener
* @see #changeSupport
*/
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener)
{
listenerList.add(PropertyChangeListener.class, listener);
}
/**
* Register a <code>VetoableChangeListener</code>.
*
* @param listener The listener to register
*
* @see #removeVetoableChangeListener
* @see #listenerList
*/
public void addVetoableChangeListener(VetoableChangeListener listener)
{
listenerList.add(VetoableChangeListener.class, listener);
}
/**
* Return all registered listeners of a particular type.
*
* @param listenerType The type of listener to return
*
* @return All listeners in the {@link #listenerList} which
* are of the specified type
*
* @see #listenerList
*/
public EventListener[] getListeners(Class listenerType)
{
return listenerList.getListeners(listenerType);
}
/**
* Return all registered <code>AncestorListener</code> objects.
*
* @return The set of <code>AncestorListener</code> objects in {@link
* #listenerList}
*/
public AncestorListener[] getAncestorListeners()
{
return (AncestorListener[]) getListeners(AncestorListener.class);
}
/**
* Return all registered <code>VetoableChangeListener</code> objects.
*
* @return The set of <code>VetoableChangeListener</code> objects in {@link
* #listenerList}
*/
public VetoableChangeListener[] getVetoableChangeListeners()
{
return (VetoableChangeListener[]) getListeners(VetoableChangeListener.class);
}
/**
* Return all <code>PropertyChangeListener</code> objects registered to listen
* for a particular property.
*
* @param property The property to return the listeners of
*
* @return The set of <code>PropertyChangeListener</code> objects in
* {@link #changeSupport} registered to listen on the specified propert
*/
public PropertyChangeListener[] getPropertyChangeListeners(String property)
{
return changeSupport == null ? new PropertyChangeListener[0]
: changeSupport.getPropertyChangeListeners(property);
}
/**
* A variant of {@link #firePropertyChange(String,Object,Object)}
* for properties with <code>boolean</code> values.
*/
public void firePropertyChange(String propertyName, boolean oldValue,
boolean newValue)
{
if (changeSupport != null)
changeSupport.firePropertyChange(propertyName, new Boolean(oldValue),
new Boolean(newValue));
}
/**
* A variant of {@link #firePropertyChange(String,Object,Object)}
* for properties with <code>byte</code> values.
*/
public void firePropertyChange(String propertyName, byte oldValue,
byte newValue)
{
if (changeSupport != null)
changeSupport.firePropertyChange(propertyName, new Byte(oldValue),
new Byte(newValue));
}
/**
* A variant of {@link #firePropertyChange(String,Object,Object)}
* for properties with <code>char</code> values.
*/
public void firePropertyChange(String propertyName, char oldValue,
char newValue)
{
if (changeSupport != null)
changeSupport.firePropertyChange(propertyName, new Character(oldValue),
new Character(newValue));
}
/**
* A variant of {@link #firePropertyChange(String,Object,Object)}
* for properties with <code>double</code> values.
*/
public void firePropertyChange(String propertyName, double oldValue,
double newValue)
{
if (changeSupport != null)
changeSupport.firePropertyChange(propertyName, new Double(oldValue),
new Double(newValue));
}
/**
* A variant of {@link #firePropertyChange(String,Object,Object)}
* for properties with <code>float</code> values.
*/
public void firePropertyChange(String propertyName, float oldValue,
float newValue)
{
if (changeSupport != null)
changeSupport.firePropertyChange(propertyName, new Float(oldValue),
new Float(newValue));
}
/**
* A variant of {@link #firePropertyChange(String,Object,Object)}
* for properties with <code>int</code> values.
*/
public void firePropertyChange(String propertyName, int oldValue,
int newValue)
{
if (changeSupport != null)
changeSupport.firePropertyChange(propertyName, new Integer(oldValue),
new Integer(newValue));
}
/**
* A variant of {@link #firePropertyChange(String,Object,Object)}
* for properties with <code>long</code> values.
*/
public void firePropertyChange(String propertyName, long oldValue,
long newValue)
{
if (changeSupport != null)
changeSupport.firePropertyChange(propertyName, new Long(oldValue),
new Long(newValue));
}
/**
* Call {@link PropertyChangeListener#propertyChange} on all listeners
* registered to listen to a given property. Any method which changes
* the specified property of this component should call this method.
*
* @param propertyName The property which changed
* @param oldValue The old value of the property
* @param newValue The new value of the property
*
* @see #changeSupport
* @see #addPropertyChangeListener
* @see #removePropertyChangeListener
*/
protected void firePropertyChange(String propertyName, Object oldValue,
Object newValue)
{
if (changeSupport != null)
changeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
/**
* A variant of {@link #firePropertyChange(String,Object,Object)}
* for properties with <code>short</code> values.
*/
public void firePropertyChange(String propertyName, short oldValue,
short newValue)
{
if (changeSupport != null)
changeSupport.firePropertyChange(propertyName, new Short(oldValue),
new Short(newValue));
}
/**
* Call {@link VetoableChangeListener#vetoableChange} on all listeners
* registered to listen to a given property. Any method which changes
* the specified property of this component should call this method.
*
* @param propertyName The property which changed
* @param oldValue The old value of the property
* @param newValue The new value of the property
*
* @throws PropertyVetoException if the change was vetoed by a listener
*
* @see addVetoableChangeListener
* @see removeVetoableChangeListener
*/
protected void fireVetoableChange(String propertyName, Object oldValue,
Object newValue)
throws PropertyVetoException
{
VetoableChangeListener[] listeners = getVetoableChangeListeners();
PropertyChangeEvent evt = new PropertyChangeEvent(this, propertyName, oldValue, newValue);
for (int i = 0; i < listeners.length; i++)
listeners[i].vetoableChange(evt);
}
/**
* Get the value of the accessibleContext property for this component.
*
* @return the current value of the property
*/
public AccessibleContext getAccessibleContext()
{
return null;
}
/**
* Get the ActionListener (typically an {@link Action} object) which is
* associated with a particular keystroke.
*
* @param aKeyStroke The keystroke to retrieve the action of
*
* @return The action associated with the specified keystroke
*/
public ActionListener getActionForKeyStroke(KeyStroke aKeyStroke)
{
return null;
}
/**
* Get the value of the {@link #alignmentX} property.
*
* @return The current value of the property.
*
* @see #setAlignmentX
* @see #alignmentY
*/
public float getAlignmentX()
{
return alignmentX;
}
/**
* Get the value of the {@link #alignmentY} property.
*
* @return The current value of the property.
*
* @see #setAlignmentY
* @see #alignmentX
*/
public float getAlignmentY()
{
return alignmentY;
}
/**
* Get the current value of the {@link #autoscrolls} property.
*
* @return The current value of the property
*/
public boolean getAutoscrolls()
{
return autoscrolls;
}
/**
* Set the value of the {@link #border} property, revalidate
* and repaint this component.
*
* @param border The new value of the property
*
* @see #getBorder
*/
public void setBorder(Border border)
{
this.border = border;
revalidate();
repaint();
}
/**
* Get the value of the {@link #border} property.
*
* @return The property's current value
*
* @see #setBorder
*/
public Border getBorder()
{
return border;
}
/**
* Get the component's current bounding box. If a rectangle is provided,
* use this as the return value (adjusting its fields in place);
* otherwise (of <code>null</code> is provided) return a new {@link
* Rectangle}.
*
* @param rv Optional return value to use
*
* @return A rectangle bounding the component
*/
public Rectangle getBounds(Rectangle rv)
{
if (rv == null)
return new Rectangle(getX(), getY(), getWidth(), getHeight());
else
{
rv.setBounds(getX(), getY(), getWidth(), getHeight());
return rv;
}
}
/**
* Prepares a graphics context for painting this object. If {@link
* #debugGraphicsOptions} is not equal to {@link
* DebugGraphics#NONE_OPTION}, produce a new {@link DebugGraphics} object
* wrapping the parameter. Otherwise configure the parameter with this
* component's foreground color and font.
*
* @param g The graphics context to wrap or configure
*
* @return A graphics context to paint this object with
*
* @see #debugGraphicsOptions
* @see #paint
*/
protected Graphics getComponentGraphics(Graphics g)
{
g.setFont(this.getFont());
g.setColor(this.getForeground());
return g;
}
/**
* Return the condition that determines whether a registered action
* occurs in response to the specified keystroke.
*
* @param aKeyStroke The keystroke to return the condition of
*
* @return One of the values {@link #UNDEFINED_CONDITION}, {@link
* #WHEN_ANCESTOR_OF_FOCUSED_COMPONENT}, {@link #WHEN_FOCUSED}, or {@link
* #WHEN_IN_FOCUSED_WINDOW}
*
* @see #registerKeyboardAction
* @see #unregisterKeyboardAction
* @see #resetKeyboardActiond
*/
public int getConditionForKeyStroke(KeyStroke aKeyStroke)
{
return UNDEFINED_CONDITION;
}
/**
* Get the value of the {@link #debugGraphicsOptions} property.
*
* @return The current value of the property.
*
* @see #setDebugGraphicsOptions
* @see #debugGraphicsOptions
*/
public int getDebugGraphicsOptions()
{
return 0;
}
/**
* Get the component's insets, which are calculated from
* the {@link #border} property. If the border is <code>null</code>,
* calls {@link Container#getInsets}.
*
* @return The component's current insets
*/
public Insets getInsets()
{
if (border == null)
return super.getInsets();
return getBorder().getBorderInsets(this);
}
/**
* Get the component's insets, which are calculated from the {@link
* #border} property. If the border is <code>null</code>, calls {@link
* Container#getInsets}. The passed-in {@link Insets} value will be
* used as the return value, if possible.
*
* @param insets Return value object to reuse, if possible
*
* @return The component's current insets
*/
public Insets getInsets(Insets insets)
{
Insets t = getInsets();
if (insets == null)
return t;
insets.left = t.left;
insets.right = t.right;
insets.top = t.top;
insets.bottom = t.bottom;
return insets;
}
/**
* Get the component's location. The passed-in {@link Point} value
* will be used as the return value, if possible.
*
* @param rv Return value object to reuse, if possible
*
* @return The component's current location
*/
public Point getLocation(Point rv)
{
if (rv == null)
return new Point(getX(), getY());
rv.setLocation(getX(), getY());
return rv;
}
/**
* Get the component's maximum size. If the {@link #maximumSize} property
* has been explicitly set, it is returned. If the {@link #maximumSize}
* property has not been set but the {@link ui} property has been, the
* result of {@link ComponentUI#getMaximumSize} is returned. If neither
* property has been set, the result of {@link Container#getMaximumSize}
* is returned.
*
* @return The maximum size of the component
*
* @see #maximumSize
* @see #setMaximumSize
*/
public Dimension getMaximumSize()
{
if (maximumSize != null)
return maximumSize;
if (ui != null)
{
Dimension s = ui.getMaximumSize(this);
if (s != null)
return s;
}
Dimension p = super.getMaximumSize();
return p;
}
/**
* Get the component's minimum size. If the {@link #minimumSize} property
* has been explicitly set, it is returned. If the {@link #minimumSize}
* property has not been set but the {@link ui} property has been, the
* result of {@link ComponentUI#getMinimumSize} is returned. If neither
* property has been set, the result of {@link Container#getMinimumSize}
* is returned.
*
* @return The minimum size of the component
*
* @see #minimumSize
* @see #setMinimumSize
*/
public Dimension getMinimumSize()
{
if (minimumSize != null)
return minimumSize;
if (ui != null)
{
Dimension s = ui.getMinimumSize(this);
if (s != null)
return s;
}
Dimension p = super.getMinimumSize();
return p;
}
/**
* Get the component's preferred size. If the {@link #preferredSize}
* property has been explicitly set, it is returned. If the {@link
* #preferredSize} property has not been set but the {@link ui} property
* has been, the result of {@link ComponentUI#getPreferredSize} is
* returned. If neither property has been set, the result of {@link
* Container#getPreferredSize} is returned.
*
* @return The preferred size of the component
*
* @see #preferredSize
* @see #setPreferredSize
*/
public Dimension getPreferredSize()
{
if (preferredSize != null)
return preferredSize;
if (ui != null)
{
Dimension s = ui.getPreferredSize(this);
if (s != null)
return s;
}
Dimension p = super.getPreferredSize();
return p;
}
/**
* Return the value of the {@link #nextFocusableComponent} property.
*
* @deprecated See {@link java.awt.FocusTraversalPolicy}
*
* @return The current value of the property, or <code>null</code>
* if none has been set.
*/
public Component getNextFocusableComponent()
{
return null;
}
/**
* Return the set of {@link KeyStroke} objects which are registered
* to initiate actions on this component.
*
* @return An array of the registered keystrokes
*/
public KeyStroke[] getRegisteredKeyStrokes()
{
return null;
}
/**
* Returns the first ancestor of this component which is a {@link JRootPane}.
* Equivalent to calling <code>SwingUtilities.getRootPane(this);</code>.
*
* @return An ancestral JRootPane, or <code>null</code> if none exists.
*/
public JRootPane getRootPane()
{
JRootPane p = SwingUtilities.getRootPane(this);
return p;
}
/**
* Get the component's size. The passed-in {@link Dimension} value
* will be used as the return value, if possible.
*
* @param rv Return value object to reuse, if possible
*
* @return The component's current size
*/
public Dimension getSize(Dimension rv)
{
if (rv == null)
return new Dimension(getWidth(), getHeight());
else
{
rv.setSize(getWidth(), getHeight());
return rv;
}
}
/**
* Return the {@link #toolTip} property of this component, creating it and
* setting it if it is currently <code>null</code>. This method can be
* overridden in subclasses which wish to control the exact form of
* tooltip created.
*
* @return The current toolTip
*/
public JToolTip createToolTip()
{
if (toolTip == null)
{
toolTip = new JToolTip();
toolTip.setTipText(toolTipText);
}
return toolTip;
}
/**
* Return the location at which the {@link #toolTip} property should be
* displayed, when triggered by a particular mouse event.
*
* @param event The event the tooltip is being presented in response to
*
* @return The point at which to display a tooltip, or <code>null</code>
* if swing is to choose a default location.
*/
public Point getToolTipLocation(MouseEvent event)
{
return null;
}
/**
* Set the value of the {@link #toolTipText} property.
*
* @param text The new property value
*
* @see #getToolTipText
*/
public void setToolTipText(String text)
{
toolTipText = text;
}
/**
* Get the value of the {@link #toolTipText} property.
*
* @return The current property value
*
* @see #setToolTipText
*/
public String getToolTipText()
{
return toolTipText;
}
/**
* Get the value of the {@link #toolTipText} property, in response to a
* particular mouse event.
*
* @param event The mouse event which triggered the tooltip
*
* @return The current property value
*
* @see #setToolTipText
*/
public String getToolTipText(MouseEvent event)
{
return toolTipText;
}
/**
* Return the top level ancestral container (usually a {@link
* java.awt.Window} or {@link java.awt.Applet}) which this component is
* contained within, or <code>null</code> if no ancestors exist.
*
* @return The top level container, if it exists
*/
public Container getTopLevelAncestor()
{
Container c = getParent();
for (Container peek = c; peek != null; peek = peek.getParent())
c = peek;
return c;
}
/**
* Compute the component's visible rectangle, which is defined
* recursively as either the component's bounds, if it has no parent, or
* the intersection of the component's bounds with the visible rectangle
* of its parent.
*
* @param rect The return value slot to place the visible rectangle in
*/
public void computeVisibleRect(Rectangle rect)
{
Component c = getParent();
if (c != null && c instanceof JComponent)
{
((JComponent) c).computeVisibleRect(rect);
rect.translate(-getX(), -getY());
Rectangle2D.intersect(rect,
new Rectangle(0, 0, getWidth(), getHeight()),
rect);
}
else
rect.setRect(0, 0, getWidth(), getHeight());
}
/**
* Return the component's visible rectangle in a new {@link Rectangle},
* rather than via a return slot.
*
* @return The component's visible rectangle
*
* @see #computeVisibleRect(Rectangle)
*/
public Rectangle getVisibleRect()
{
Rectangle r = new Rectangle();
computeVisibleRect(r);
return r;
}
/**
* <p>Requests that this component receive input focus, giving window
* focus to the top level ancestor of this component. Only works on
* displayable, focusable, visible components.</p>
*
* <p>This method should not be called by clients; it is intended for
* focus implementations. Use {@link Component#requestFocus} instead.</p>
*
* @see {@link Component#requestFocus}
*/
public void grabFocus()
{
}
/**
* Get the value of the {@link #doubleBuffered} property.
*
* @return The property's current value
*/
public boolean isDoubleBuffered()
{
return doubleBuffered;
}
/**
* Return <code>true</code> if the provided component has no native peer;
* in other words, if it is a "lightweight component".
*
* @param c The component to test for lightweight-ness
*
* @return Whether or not the component is lightweight
*/
public static boolean isLightweightComponent(Component c)
{
return c.getPeer() instanceof LightweightPeer;
}
/**
* Return <code>true<code> if you wish this component to manage its own
* focus. In particular: if you want this component to be sent
* <code>TAB</code> and <code>SHIFT+TAB</code> key events, and to not
* have its children considered as focus transfer targets. If
* <code>true</code>, focus traversal around this component changes to
* <code>CTRL+TAB</code> and <code>CTRL+SHIFT+TAB</code>.
*
* @return <code>true</code> if you want this component to manage its own
* focus, otherwise (by default) <code>false</code>
*
* @deprecated Use {@link Component.setFocusTraversalKeys(int,Set)} and
* {@link Container.setFocusCycleRoot(boolean)} instead
*/
public boolean isManagingFocus()
{
return false;
}
/**
* Return the current value of the {@link opaque} property.
*
* @return The current property value
*/
public boolean isOpaque()
{
return opaque;
}
/**
* Return <code>true</code> if the component can guarantee that none of its
* children will overlap in Z-order. This is a hint to the painting system.
* The default is to return <code>true</code>, but some components such as
* {@link JLayeredPane} should override this to return <code>false</code>.
*
* @return Whether the component tiles its children
*/
public boolean isOptimizedDrawingEnabled()
{
return true;
}
/**
* Return <code>true</code> if this component is currently painting a tile.
*
* @return Whether the component is painting a tile
*/
public boolean isPaintingTile()
{
return false;
}
/**
* Get the value of the {@link #requestFocusEnabled} property.
*
* @return The current value of the property
*/
public boolean isRequestFocusEnabled()
{
return requestFocusEnabled;
}
/**
* Return <code>true</code> if this component is a validation root; this
* will cause calls to {@link #invalidate} in this component's children
* to be "captured" at this component, and not propagate to its parents.
* For most components this should return <code>false</code>, but some
* components such as {@link JViewPort} will want to return
* <code>true</code>.
*
* @return Whether this component is a validation root
*/
public boolean isValidateRoot()
{
return false;
}
/**
* <p>Paint the component. This is a delicate process, and should only be
* called from the repaint thread, under control of the {@link
* RepaintManager}. Client code should usually call {@link #repaint} to
* trigger painting.</p>
*
* <p>This method will acquire a double buffer from the {@link
* RepaintManager} if the component's {@link #doubleBuffered} property is
* <code>true</code> and the <code>paint</code> call is the
* <em>first</em> recursive <code>paint</code> call inside swing.</p>
*
* <p>The method will also modify the provided {@link Graphics} context
* via the {@link #getComponentGraphics} method. If you want to customize
* the graphics object used for painting, you should override that method
* rather than <code>paint</code>.</p>
*
* <p>The body of the <code>paint</code> call involves calling {@link
* #paintComponent}, {@link #paintBorder}, and {@link #paintChildren} in
* order. If you want to customize painting behavior, you should override
* one of these methods rather than <code>paint</code>.</p>
*
* <p>For more details on the painting sequence, see <a
* href="http://java.sun.com/products/jfc/tsc/articles/painting/index.html">this
* article</a>.</p>
*
* @param g The graphics context to paint with
*
* @see #paintImmediately
*/
public void paint(Graphics g)
{
Graphics g2 = g;
Image doubleBuffer = null;
RepaintManager rm = RepaintManager.currentManager(this);
if (isDoubleBuffered()
&& (rm.isDoubleBufferingEnabled())
&& (! Thread.holdsLock(paintLock)))
{
doubleBuffer = rm.getOffscreenBuffer(this, getWidth(), getHeight());
}
synchronized (paintLock)
{
if (doubleBuffer != null)
{
g2 = doubleBuffer.getGraphics();
g2.setClip(g.getClipBounds());
}
g2 = getComponentGraphics(g2);
paintComponent(g2);
paintBorder(g2);
paintChildren(g2);
if (doubleBuffer != null)
g.drawImage(doubleBuffer, 0, 0, (ImageObserver) null);
}
}
/**
* Paint the component's border. This usually means calling {@link
* Border#paintBorder} on the {@link #border} property, if it is
* non-<code>null</code>. You may override this if you wish to customize
* border painting behavior. The border is painted after the component's
* body, but before the component's children.
*
* @param g The graphics context with which to paint the border
*
* @see #paint
* @see #paintChildren
* @see #paintComponent
*/
protected void paintBorder(Graphics g)
{
if (getBorder() != null)
getBorder().paintBorder(this, g, 0, 0, getWidth(), getHeight());
}
/**
* Paint the component's children. This usually means calling {@link
* Container#paint}, which recursively calls {@link #paint} on any of the
* component's children, with appropriate changes to coordinate space and
* clipping region. You may override this if you wish to customize
* children painting behavior. The children are painted after the
* component's body and border.
*
* @param g The graphics context with which to paint the children
*
* @see #paint
* @see #paintBorder
* @see #paintComponent
*/
protected void paintChildren(Graphics g)
{
super.paint(g);
}
/**
* Paint the component's body. This usually means calling {@link
* ComponentUI#update} on the {@link #ui} property of the component, if
* it is non-<code>null</code>. You may override this if you wish to
* customize the component's body-painting behavior. The component's body
* is painted first, before the border and children.
*
* @param g The graphics context with which to paint the body
*
* @see #paint
* @see #paintBorder
* @see #paintChildren
*/
protected void paintComponent(Graphics g)
{
if (ui != null)
ui.update(g, this);
}
/**
* A variant of {@link #paintImmediately(Rectangle)} which takes
* integer parameters.
*
* @param x The left x coordinate of the dirty region
* @param y The top y coordinate of the dirty region
* @param w The width of the dirty region
* @param h The height of the dirty region
*/
public void paintImmediately(int x, int y, int w, int h)
{
paintImmediately(new Rectangle(x, y, w, h));
}
/**
* Transform the provided dirty rectangle for this component into the
* appropriate ancestral {@link JRootPane} and call {@link #paint} on
* that root pane. This method is called from the {@link RepaintManager}
* and should always be called within the painting thread.
*
* @param r The dirty rectangle to paint
*/
public void paintImmediately(Rectangle r)
{
Component root = SwingUtilities.getRoot(this);
if (root == null || ! root.isShowing())
return;
Graphics g = root.getGraphics();
if (g == null)
return;
Rectangle clip = SwingUtilities.convertRectangle(this, r, root);
g.setClip(clip);
root.paint(g);
g.dispose();
}
/**
* Return a string representation for this component, for use in
* debugging.
*
* @return A string describing this component.
*/
protected String paramString()
{
return "JComponent";
}
/**
* A variant of {@link
* #registerKeyboardAction(ActionListener,String,KeyStroke,int)} which
* provides <code>null</code> for the command name.
*/
public void registerKeyboardAction(ActionListener act,
KeyStroke stroke,
int cond)
{
registerKeyboardAction(act, null, stroke, cond);
}
/**
* An obsolete method to register a keyboard action on this component.
* You should use <code>getInputMap</code> and <code>getActionMap</code>
* to fetch mapping tables from keystrokes to commands, and commands to
* actions, respectively, and modify those mappings directly.
*
* @param anAction The action to be registered
* @param aCommand The command to deliver in the delivered {@link
* java.awt.ActionEvent}
* @param aKeyStroke The keystroke to register on
* @param aCondition One of the values {@link #UNDEFINED_CONDITION},
* {@link #WHEN_ANCESTOR_OF_FOCUSED_COMPONENT}, {@link #WHEN_FOCUSED}, or
* {@link #WHEN_IN_FOCUSED_WINDOW}, indicating the condition which must
* be met for the action to be fired
*
* @see #unregisterKeyboardAction
* @see #getConditionForKeystroke
* @see #resetKeyboardActiond
*/
public void registerKeyboardAction(ActionListener act,
String cmd,
KeyStroke stroke,
int cond)
{
}
/**
* Remove a keyboard action registry.
*
* @param stroke The keystroke to unregister
*
* @see #registerKeyboardAction
* @see #getConditionForKeystroke
* @see #resetKeyboardActiond
*/
public void unregisterKeyboardAction(KeyStroke aKeyStroke)
{
}
/**
* Reset all keyboard action registries.
*
* @see #registerKeyboardAction
* @see #unregisterKeyboardAction
* @see #getConditionForKeystroke
*/
public void resetKeyboardActions()
{
}
/**
* Mark the described region of this component as dirty in the current
* {@link RepaintManager}. This will queue an asynchronous repaint using
* the system painting thread in the near future.
*
* @param tm ignored
* @param x coordinate of the region to mark as dirty
* @param y coordinate of the region to mark as dirty
* @param width dimension of the region to mark as dirty
* @param height dimension of the region to mark as dirty
*/
public void repaint(long tm, int x, int y, int width, int height)
{
Rectangle dirty = new Rectangle(x, y, width, height);
Rectangle vis = getVisibleRect();
dirty = dirty.intersection(vis);
RepaintManager.currentManager(this).addDirtyRegion(this, dirty.x, dirty.y,
dirty.width,
dirty.height);
}
/**
* Mark the described region of this component as dirty in the current
* {@link RepaintManager}. This will queue an asynchronous repaint using
* the system painting thread in the near future.
*
* @param r The rectangle to mark as dirty
*/
public void repaint(Rectangle r)
{
repaint((long) 0, (int) r.getX(), (int) r.getY(), (int) r.getWidth(),
(int) r.getHeight());
}
/**
* Request focus on the default component of this component's {@link
* FocusTraversalPolicy}.
*
* @return The result of {@link #requestFocus}
*
* @deprecated Use {@link #requestFocus()} on the default component provided from
* the {@link FocusTraversalPolicy} instead.
*/
public boolean requestDefaultFocus()
{
return false;
}
/**
* Queue a an invalidation and revalidation of this component, using
* {@link RepaintManager#addInvalidComponent}.
*/
public void revalidate()
{
invalidate();
RepaintManager.currentManager(this).addInvalidComponent(this);
}
/**
* Calls <code>scrollRectToVisible</code> on the component's parent.
* Components which can service this call should override.
*
* @param r The rectangle to make visible
*/
public void scrollRectToVisible(Rectangle r)
{
Component p = getParent();
if (p instanceof JComponent)
((JComponent) p).scrollRectToVisible(r);
}
/**
* Set the value of the {@link #alignmentX} property.
*
* @param a The new value of the property
*/
public void setAlignmentX(float a)
{
alignmentX = a;
}
/**
* Set the value of the {@link #alignmentY} property.
*
* @param a The new value of the property
*/
public void setAlignmentY(float a)
{
alignmentY = a;
}
/**
* Set the value of the {@link #autoscrolls} property.
*
* @param a The new value of the property
*/
public void setAutoscrolls(boolean a)
{
autoscrolls = a;
}
/**
* Set the value of the {@link #debugGraphicsOptions} property.
*
* @param debugOptions The new value of the property
*/
public void setDebugGraphicsOptions(int debugOptions)
{
debugGraphicsOptions = debugOptions;
}
/**
* Set the value of the {@link #doubleBuffered} property.
*
* @param db The new value of the property
*/
public void setDoubleBuffered(boolean db)
{
doubleBuffered = db;
}
/**
* Set the value of the {@link #enabled} property, revalidate
* and repaint this component.
*
* @param e The new value of the property
*/
public void setEnabled(boolean e)
{
super.setEnabled(e);
revalidate();
repaint();
}
/**
* Set the value of the {@link #font} property, revalidate
* and repaint this component.
*
* @param f The new value of the property
*/
public void setFont(Font f)
{
super.setFont(f);
revalidate();
repaint();
}
/**
* Set the value of the {@link #background} property, revalidate
* and repaint this component.
*
* @param bg The new value of the property
*/
public void setBackground(Color bg)
{
super.setBackground(bg);
revalidate();
repaint();
}
/**
* Set the value of the {@link #foreground} property, revalidate
* and repaint this component.
*
* @param fg The new value of the property
*/
public void setForeground(Color fg)
{
super.setForeground(fg);
revalidate();
repaint();
}
/**
* Set the value of the {@link #maximumSize} property, revalidate
* and repaint this component.
*
* @param max The new value of the property
*/
public void setMaximumSize(Dimension max)
{
maximumSize = max;
revalidate();
repaint();
}
/**
* Set the value of the {@link #minimumSize} property, revalidate
* and repaint this component.
*
* @param min The new value of the property
*/
public void setMinimumSize(Dimension min)
{
minimumSize = min;
revalidate();
repaint();
}
/**
* Set the value of the {@link #preferredSize} property, revalidate
* and repaint this component.
*
* @param pref The new value of the property
*/
public void setPreferredSize(Dimension pref)
{
preferredSize = pref;
}
/**
* Set the specified component to be the next component in the
* focus cycle, overriding the {@link FocusTraversalPolicy} for
* this component.
*
* @param aComponent The component to set as the next focusable
*
* @deprecated Use FocusTraversalPolicy instead
*/
public void setNextFocusableComponent(Component aComponent)
{
}
/**
* Set the value of the {@link #requestFocusEnabled} property.
*
* @param e The new value of the property
*/
public void setRequestFocusEnabled(boolean e)
{
requestFocusEnabled = e;
}
/**
* Set the value of the {@link #opaque} property, revalidate and repaint
* this component.
*
* @param isOpaque The new value of the property
*
* @see ComponentUI#update
*/
public void setOpaque(boolean isOpaque)
{
opaque = isOpaque;
revalidate();
repaint();
}
/**
* Set the value of the visible property, and revalidate / repaint the
* component.
*
* @param v The new value of the property
*/
public void setVisible(boolean v)
{
super.setVisible(v);
revalidate();
repaint();
}
/**
* Call {@link paint}.
*
* @param g The graphics context to paint into
*/
public void update(Graphics g)
{
paint(g);
}
/**
* Get the value of the UIClassID property. This property should be a key
* in the {@link UIDefaults} table managed by {@link UIManager}, the
* value of which is the name of a class to load for the component's
* {@link ui} property.
*
* @return A "symbolic" name which will map to a class to use for the
* component's UI, such as <code>"ComponentUI"</code>
*
* @see #setUI
* @see #updateUI
*/
public String getUIClassID()
{
return "ComponentUI";
}
/**
* Install a new UI delegate as the component's {@link ui} property. In
* the process, this will call {@link ComponentUI.uninstallUI} on any
* existing value for the {@link ui} property, and {@link
* ComponentUI.installUI} on the new UI delegate.
*
* @param newUI The new UI delegate to install
*
* @see #updateUI
* @see #getUIClassID
*/
protected void setUI(ComponentUI newUI)
{
if (ui != null)
ui.uninstallUI(this);
ui = newUI;
if (ui != null)
ui.installUI(this);
revalidate();
repaint();
}
/**
* This method should be overridden in subclasses. In JComponent, the
* method does nothing. In subclasses, it should a UI delegate
* (corresponding to the symbolic name returned from {@link
* getUIClassID}) from the {@link UIManager}, and calls {@link setUI}
* with the new delegate.
*/
public void updateUI()
{
System.out.println("update UI not overwritten in class: " + this);
}
public static Locale getDefaultLocale()
{
return defaultLocale;
}
public static void setDefaultLocale(Locale l)
{
defaultLocale = l;
}
}