diff options
author | Graydon Hoare <graydon@gcc.gnu.org> | 2004-03-17 21:29:02 +0000 |
---|---|---|
committer | Graydon Hoare <graydon@gcc.gnu.org> | 2004-03-17 21:29:02 +0000 |
commit | 86881a7b541b2ec6557b1a315f841b211d14c576 (patch) | |
tree | 02790a2b250b62643a1de68b63bd078238bfaf46 /libjava/javax/swing/JLabel.java | |
parent | ab3533d6559205bee768b8d9e359111d52d10733 (diff) | |
download | gcc-86881a7b541b2ec6557b1a315f841b211d14c576.zip gcc-86881a7b541b2ec6557b1a315f841b211d14c576.tar.gz gcc-86881a7b541b2ec6557b1a315f841b211d14c576.tar.bz2 |
[multiple changes]
2004-03-12 Graydon Hoare <graydon@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Clipping fixes.
* javax/swing/JComponent.java (paint): Use persistent double buffer.
* javax/swing/JList.java (ListListener): Revalidate on changes.
* javax/swing/JScrollPane.java: Reimplement.
* javax/swing/JViewport.java: Reimplement.
* javax/swing/ScrollPaneLayout.java: Reimplement.
* javax/swing/ViewportLayout.java: Tidy up.
* javax/swing/plaf/basic/BasicButtonListener.java: Remove printlns.
* javax/swing/plaf/basic/BasicScrollPaneUI.java: Reimplement.
* javax/swing/plaf/basic/BasicSliderUI.java: Handle missing labels.
* javax/swing/plaf/basic/BasicViewportUI.java: Implement in terms of
backing store only.
2004-03-11 Thomas Fitzsimmons <fitzsim@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(window_wm_protocols_filter): New function.
(window_focus_in_cb): Remove function.
(window_focus_out_cb): Likewise.
(window_focus_or_active_state_change_cb): New function.
(create): Add filter that removes WM_TAKE_FOCUS client messages.
(connectSignals): Don't attach handlers to focus-in-event or
focus-out-event signals. Handle notify signal.
2004-03-11 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
(gtkSetLabel): New native method declaration.
(setLabel): Use gtkSetLabel.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetLabel): New method.
2004-03-10 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Default to
black when color argument is null.
2004-03-10 Kim Ho <kho@redhat.com>
* java/awt/Container.java: Remove check
for drag events.
2004-03-10 Kim Ho <kho@redhat.com>
* java/awt/Container.java: (visitChild):
Remove candidate clip. Use the component
clip to intersect.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
(handleEvent): Use the PaintEvent's clip.
2004-03-10 Kim Ho <kho@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
(handleEvent): Don't set the clip for the
Graphics object.
2004-03-09 Graydon Hoare <graydon@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
Fix double <-> fixed macros, reset font transform.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
Likewise.
2004-03-09�� Kim Ho <kho@redhat.com>
* java/awt/Container.java: (visitChild): Move
the x and y coordinate of the component rectangle
to correct position.
(handleEvent): Forward drag events to the pressed
component.
* javax/swing/plaf/basic/BasicScrollBarUI.java:
Fix comments.
(ArrowButtonListener::mousePressed): Stop the
existing timer.
(mouseDragged): Implement.
(TrackListener::mousePressed): Only react if
the press doesn't occur on the thumb, otherwise
just set the offset.
(TrackListener::mouseReleased): Unset the isAdjusting
value.
(createIncreaseIcon): Switch icon.
(createDecreaseIcon): Switch icon.
(calculatePreferredSize): Use width.
(getThumbBounds): Use the top as the lower value.
(layoutVScrollBar): Switch the button locations.
(paintIncreaseHighlight): Paint correct side of thumb.
(paintDecreaseHighlight): ditto.
(valueForYPosition): Use top as the lower value.
* javax/swing/plaf/basic/BasicSliderUI.java:
Fix comments.
(mouseDragged): Implement.
(mousePressed): Only react when the thumb isn't
pressed, otherwise just set offset.
(mouseReleased): Handle a release of the thumb.
(scrollDueToClickInTrack): Stop the timer first.
* javax/swing/JProgressBar.java:
(setString): Fix change condition.
* javax/swing/JSeparator.java:
Remove println's.
2004-03-08 David Jee <djee@redhat.com>
* java/awt/image/AffineTransformOp.java:
(filter): Use Graphics2D interface instead of directly using the
GdkGraphics2D peer.
2004-03-05 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkButtonPeer.java
(handleEvent): Action events are generated upon MOUSE_RELEASED.
* java/awt/Container.java
(acquireComponentForMouseEvent): Fixed.
(handleEvent): Fixed.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(state_to_awt_mods_with_button_states): New method.
(pre_event_handler): Fixed mouse event generation.
2004-03-05 Olga Rodimina <rodimina@redhat.com>
gnu/java/awt/peer/gtk/GdkGraphics2D.java
(GdkGraphics2D (BufferedImage)): Initialize
pixmap associated with specified BufferedImage.
(setPaint): Changed implementation of Texture
Paint to use AffineTransformOp.
* java/awt/image/AffineTransformOp.java
(createCompatibleDestRaster): Throw RasterFormatException
if resulting width or height of raster is 0.
2004-03-04 Olga Rodimina <rodimina@redhat.com>
* java/awt/image/AffineTransformOp.java:
Removed unnecessary field interpolationType.
Formatted some of the lines to be consistent with
the GNU style.
(AffineTransformOp): Create new RenderingHints
containing specified interpolation type.
(createCompatibleDestImage): Implemented.
(createCompatibleDestRaster): Implemented.
(filter): Implemented.
(getBounds2D(BufferedImage)): Implemented.
(getBounds2D(Raster)): Implemented.
(getInterpolationType): Get interpolation value from
rendering hints.
2004-03-04 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkContainerPeer.java
(setFont): Check if child peers are null.
2004-03-04 Graydon Hoare <graydon@redhat.com>
* testsuite/lib/libjava.exp (libjava_find_lib): Don't include
.libs in -L option.
(libjava_arguments): Add new libraries to argument list.
2004-03-04 Tom Tromey <tromey@redhat.com>
* Makefile.in: Rebuilt.
* Makefile.am (toolexeclib_LTLIBRARIES): Added lib-java-awt.la,
lib-javax-swing.la, lib-java-applet.la, lib-java-beans.la.
(misc_java_source_files): New macro.
(swing_java_source_files): Likewise.
(awt_java_source_files): Pruned.
(applet_java_source_files): New macro.
(beans_java_source_files): Likewise.
(lib_java_applet_la_SOURCES): Likewise.
(lib_java_awt_la_SOURCES): Likewise.
(lib_javax_swing_la_SOURCES): Likewise.
(lib_java_beans_la_SOURCES): Likewise.
(all_java_object_files): Likewise.
(%.lo: %.java): Use all_java_object_files.
(all_java_source_files): Added new _SOURCES.
(ordinary_java_source_files): Removed awt_java_source_files.
2004-03-02 Olga Rodimina <rodimina@redhat.com>
* Makefile.am: Added java/awt/image/AffineTransformOp.java
* Makefile.in: Re-generated.
* java/awt/image/AffineTransformOp.java: New Class.
2004-03-01 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(setPaint): Interpret correctly TexturePaint's
anchor rectangle.
(drawImage): Fixed scale factors of the affine
transform.
2004-02-27 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics.java
(GdkGraphics(Component)): Inherit font from component.
(drawString): Use font style.
* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
(gtkSetFont): New native method declaration.
(setFont): New method.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java
(gtkSetFont): New native method declaration.
(setFont): Call new native method gtkSetFont.
* gnu/java/awt/peer/gtk/GtkContainerPeer.java
(setFont): For all child components who do not their fonts set,
set their peers' fonts with this container's font.
* gnu/java/awt/peer/gtk/GtkLabelPeer.java:
Move all native method declarations to the top for readability.
(gtkSetFont): New native method declaration.
(setFont): New method.
* java/awt/Component.java
(setFont): Invalidate after setting the font.
* java/awt/Container.java
(invalidateTree): New method.
(setFont): Invalidate the container tree after setting the font.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
(Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString): Use font style.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetFont): New method.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkSetFont): New method.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
(Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkSetFont): New method.
2004-02-27 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(updateBufferedImage): New helper function.
Updates BufferedImage in memory if it was changed.
(draw): changed to update BufferedImage in memory after
this drawing operation
(fill): Ditto.
(draw3DRect): Ditto.
(fill3DRect): Ditto.
(clearRect): Ditto.
(drawRaster): Ditto.
(drawImage) : Ditto. Update only in case of GtkOffScreenImage with
no affine transformation.
(drawGlyphVector): Ditto.
2004-02-26 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(isBufferedImageGraphics): New Helper function.
Returns true if this graphics2d can be used to draw
into buffered image and false otherwise.
(updateImagePixels): New Helper function.
Updates pixels in the BufferedImage.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
(getImagePixels): New function. Returns pixels
of the buffered image associated with
this Graphics2D.
2004-02-26 David Jee <djee@redhat.com>
* java/awt/BorderLayout.java
(layoutContainer): Fix width and height calculations to ensure
that they're non-negative.
* java/awt/Component.java
(setBackground): If c is null, inherit from closest ancestor whose
background color is set.
2004-02-26�� Kim Ho�� <kho@redhat.com>
* Makefile.am: Add new files.
* Makefile.in: Re-generate.
* javax/swing/JProgressBar.java:
(JProgressBar(int, int int)): Throw
IllegalArgumentException if orientation is
invalid.
(JProgressBar(BoundedRangeModel)): Create
ChangeListener and register it. UpdateUI.
(getChangeListeners): Implement.
(setModel): Reset ChangeListener.
* javax/swing/JScrollBar.java: Implement.
* javax/swing/JSeparator.java: Implement.
* javax/swing/JSlider.java:
(JSlider(int, int, int, int)): Throw
IllegalArgumentException if orientation
is invalid.
(getChangeListeners): Fix method name.
* javax/swing/SwingUtilities.java:
(layoutCompoundLabel): If there is no text,
set the text rectangle dimensions to 0.
* javax/swing/plaf/basic/BasicButtonUI.java:
(paint): If there is no text, don't paint it.
* javax/swing/plaf/basic/BasicScrollBarUI.java:
Implement.
* javax/swing/plaf/basic/BasicSeparatorUI.java:
Implement.
* javax/swing/plaf/basic/BasicSliderUI.java:
(propertyChange): If the model changes, change
the listeners accordingly.
2004-02-25 Graydon Hoare <graydon@redhat.com>
* javax/swing/AbstractButton.java: Add "final" qualifiers.
* javax/swing/JList.java: Reimplement.
* javax/swing/DefaultListSelectionModel.java: Reimplement.
* javax/swing/plaf/basic/BasicListUI.java: Reimplement.
* javax/swing/plaf/basic/BasicLookAndFeel.java: Add "purple" values.
* javax/swing/ListModel.java: Javadoc.
* javax/swing/ListSelectionModel.java: Add missing methods.
* javax/swing/AbstractListModel.java: Javadoc and corrections.
* javax/swing/DefaultListModel.java: Javadoc and corrections.
* javax/swing/ListModel.java: Javadoc and corrections.
* javax/swing/DefaultListCellRenderer.java: Minor tidying.
2004-02-25 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkFontPeer.java
(GtkFontPeer): Change default size to 12.
* gnu/java/awt/peer/gtk/GtkToolkit.java
(getFontPeer): Change default size to 12.
(getClasspathFontPeer): Likewise. Set default name to "Default".
* java/awt/Font.java
(Font(Map)): Call Font(String,Map).
(Font(String,Map)): If attrs is null, initialize it as an empty
HashMap, which will ensure that the Font will get default attributes.
2004-02-25 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkFontPeer.java
(GtkFontPeer(String,int)): Call the new constructor with size 1.
(GtkFontPeer(String,int,int)): New constructor with size attribute.
* gnu/java/awt/peer/gtk/GtkToolkit.java
(getFontPeer(String,int)): Call the new overload method with size 1.
(getFontPeer(String,int,int)): New method. Overloaded with size
attribute.
(getClasspathFontPeer): Set the size of the font.
2004-02-24 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(bimage): New field.
(GdkGraphics2D): New Constructor. Constructs Graphics
object that can be used to draw into the Buffered Image.
* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
(GdkGraphicsEnvironment): Fixed to include public
keyword.
(createGraphics): Implemented.
* gnu/java/awt/peer/gtk/GtkToolkit.java
(getLocalGraphicsEnvironment): Implemented.
* java/awt/GraphicsEnvironment.java:
(getLocalGraphicsEnvironment): Implemented.
* java/awt/image/BufferedImage.java:
(createGraphics): Implemented.
2004-02-24 David Jee <djee@redhat.com>
* java/awt/Component.java
(eventTypeEnabled): Add MOUSE_MOVED and MOUSE_DRAGGED event types.
* java/awt/Container.java
(addNotifyContainerChildren): Fix event enabling.
2004-02-23 Olga Rodimina <rodimina@redhat.com>
* Makefile.am: Added
gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
* Makefile.in: Re-generated.
* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
New Class.
2004-02-19 Kim Ho <kho@redhat.com>
* Makefile.am: Add BasicProgressBarUI
* Makefile.in: Regenerate.
* javax/swing/JProgressBar.java:
Re-implement.
* javax/swing/plaf/basic/BasicLookAndFeel.java
Add constants for JProgressBar.
* javax/swing/plaf/basic/BasicProgressBarUI.java
Implement.
* javax/swing/plaf/basic/BasicSliderUI.java
Change comments.
(calculateGeometry): New method
(paint): Remove unnecessary size calculations.
2004-02-18 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(drawRaster): Fixed small error that caused
imageToUser transformation to be set incorrectly.
(toString): Implemented.
2004-02-18 David Jee <djee@redhat.com>
* java/awt/CardLayout.java
(addLayoutComponent): Show the first component added as the default.
(removeLayoutComponent): After removing, show the next component.
(gotoComponent): If there is only one component, show it and return.
2004-02-18 Kim Ho <kho@redhat.com>
* javax/swing/JSlider.java: Re-order
modifiers.
* javax/swing/JLabel.java: Re-order
modifiers.
* javax/swing/JComponent.java:
(addPropertyChangeListener):
Implement.
(removePropertyChangeListener):
ditto.
(firePropertyChangeEvent):
ditto.
2004-02-17 David Jee <djee@redhat.com>
* java/awt/Component.java
(show): Dispatch ComponentEvent via system event queue.
(hide): Likewise.
(move): Likewise.
(resize): Likewise.
(reshape): Likewise.
* java/awt/Window.java
(setBoundsCallback): Likewise.
2004-02-17 David Jee <djee@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds):
Use gtk_widget_set_size_request() instead of the deprecated
gtk_widget_set_usize().
2004-02-17 Kim Ho <kho@redhat.com>
* javax/swing/JSlider.java: Fix comments and
make property strings constants.
(createStandardLabels): Use the labels
preferred size as bounds.
* javax/swing/plaf/basic/BasicSliderUI.java
Fix comments.
(ScrollHandler::actionPerformed): Don't
calculate the timer stop value. Let the
MouseListeners find the stop location.
(getPreferredHorizontalSize): Re-implement.
(getPreferredVerticalSize): ditto.
(getMinimumHorizontalSize): ditto.
(getMinimumVerticalSize): ditto.
(getPreferredSize): ditto.
(getMinimumSize): ditto.
(getMaximumSize): ditto.
(paintTicks): Use doubles to find the
tick location.
(paintHorizontalLabel):�� Use preferredSize
as initial width and height.
(paintVerticalLabel): ditto.
2004-02-17 Kim Ho <kho@redhat.com>
* javax/swing/JLabel.java: Changed
property strings to constants.
(DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY):
New property.
(setText): Change mnemonic index if
text is too short.
(setDisplayedMnemonicIndex): Fire property
change event.
(getDisplayedMnemonicIndex): Remove check
against short text.
2004-02-17 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
(drawImage(img,xform,obs)): Invert xform before
passing the xform to cairo.
(drawImage(img,x,y,bgcolor,obs)): Implemented.
(drawImage (img,x,y,w,h,bgcolor,obs)): Partly
implemented.
(drawImage (img,x,y,w,h,obs)): Implemented.
(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,
bgcolor,obs)): Partly implemented.
(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,obs)):
Implemented.
* java/awt/image/BufferedImage.java:
(copyData): if dest is null, create raster with same
dimensions as the current image.
2004-02-16 Graydon Hoare <graydon@redhat.com>
* javax/swing/plaf/basic/BasicLabelUI.java
(getPreferredSize): Use layoutCL.
* javax/swing/plaf/basic/BasicGraphicsUtils.java
(getPreferredButtonSize): Start with empty view rect, layout using
component's preferred alignment.
* javax/swing/plaf/basic/BasicLookAndFeel.java: Add some Label and
List defaults.
2004-02-16 David Jee <djee@redhat.com>
* java/awt/Component.java
(show): Dispatch COMPONENT_SHOWN ComponentEvent.
(hide): Dispatch COMPONENT_HIDDEN ComponentEvent.
(move): Erase old bounds and repaint new bounds. Dispatch
COMPONENT_MOVED ComponentEvent.
(resize): Erase old bounds and repaint new bounds. Dispatch
COMPONENT_RESIZED ComponentEvent.
(reshape): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
ComponentEvents.
* java/awt/Window.java
(setBoundsCallback): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
ComponentEvents.
2004-02-16 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
(setRenderingHint): Added implementation of
Interpolation rendering hints.
(setRenderingHints): Ditto.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
(drawPixels): fixed to allow user to choose type
of filtering that should be used when displaying images.
(cairoSurfaceSetFilter): New method. Sets filter type for
interpolation of pixel values.
2004-02-16 David Jee <djee@redhat.com>
* java/awt/GridBagLayout.java
(calcCellSizes): Rows or columns with zero sizes should still be
considered for extra space distribution.
2004-02-16 Kim Ho <kho@redhat.com>
* javax/swing/JLabel.java: Re-implement.
* javax/swing/plaf/basic/BasicLabelUI.java
Re-implement.
* javax/swing/plaf/basic/BasicLookAndFeel.java:
Added constant.
2004-02-16�� Kim Ho�� <kho@redhat.com>
* javax/swing/JSlider.java: Fix indentation and comments.
(setModel): Remove null check to conform with Sun's.
(setOrientation): Throw exception if not
HORIZONTAL or VERTICAL.
(getInverted): Use private variable instead of
ComponentOrientation.
(setInverted): ditto.
* javax/swing/plaf/basic/BasicSliderUI.java:
Fix indentation and comments.
(propertyChange): Remove check for inverted slider, handle
in main paint.
(getMinimumSize): Return preferred size.
(getMaximumSize): ditto.
(calculateFocusRect): Don't relocate rectangle.
(drawInverted): Return XOR of the slider's inversion and
the component's orientation.
(paint): Update leftToRightCache
2004-02-13 David Jee <djee@redhat.com>
* java/awt/GridBagLayout.java
(GetLayoutInfo): Fix weight and size distribution. Relocate repeated
code to helper methods.
(sortBySpan): New helper method.
(distributeSizeAndWeight): Likewise.
(calcCellWeights): Likewise.
(calcCellSizes): Add comments.
2004-02-13 David Jee <djee@redhat.com>
* java/awt/Component.java
(show): Only do something if component is invisible at the moment.
(hide): Only do something if component is visible at the moment.
(reshape): If lightweight, erase old bounds and repaint new bounds.
2004-02-13�� Kim Ho�� <kho@redhat.com>
* Makefile.am: Updated for new file.
* Makefile.in: Regenerated.
* javax/swing/JSlider.java: Reimplement.
* javax/swing/SwingUtilities.java
(layoutCompoundLabel): Use icon height
instead of width.
(paintComponent): Implement.
* javax/swing/plaf/basic/BasicLookAndFeel.java:
Add JSlider defaults.
* javax/swing/plaf/basic/BasicSliderUI.java:
Implement. New file.
From-SVN: r79607
Diffstat (limited to 'libjava/javax/swing/JLabel.java')
-rw-r--r-- | libjava/javax/swing/JLabel.java | 798 |
1 files changed, 627 insertions, 171 deletions
diff --git a/libjava/javax/swing/JLabel.java b/libjava/javax/swing/JLabel.java index 2d1c440..19f992c 100644 --- a/libjava/javax/swing/JLabel.java +++ b/libjava/javax/swing/JLabel.java @@ -1,5 +1,5 @@ -/* JLabel.java -- - Copyright (C) 2002 Free Software Foundation, Inc. +/* JLabel.java -- + Copyright (C) 2002, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -35,205 +35,661 @@ 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.Image; +import java.awt.Font; import javax.accessibility.Accessible; import javax.accessibility.AccessibleContext; +import javax.swing.Icon; import javax.swing.plaf.LabelUI; + +/** + * <p> + * A swing widget that displays a text message and/or an icon. + * </p> + */ public class JLabel extends JComponent implements Accessible, SwingConstants { + /** DOCUMENT ME! */ private static final long serialVersionUID = 5496508283662221534L; + + /** + * The Component the label will give focus to when its mnemonic is + * activated. + */ + protected Component labelFor; + + /** The label's text. */ + private transient String labelText; + + /** Where the label will be positioned horizontally. */ + private transient int horizontalAlignment = CENTER; + + /** Where the label text will be placed horizontally relative to the icon. */ + private transient int horizontalTextPosition = TRAILING; + + /** Where the label will be positioned vertically. */ + private transient int verticalAlignment = CENTER; + + /** Where the label text will be place vertically relative to the icon. */ + private transient int verticalTextPosition = CENTER; + + /** The icon painted when the label is enabled. */ + private transient Icon activeIcon; + + /** The icon painted when the label is disabled. */ + private transient Icon disabledIcon; + + /** The label's mnemnonic key. */ + private transient char mnemonicKey; + + /** The index of the menemonic character in the text. */ + private transient int underlinedChar = -1; + + /** The gap between the icon and the text. */ + private transient int iconTextGap = 4; + + /** + * Fired in a PropertyChangeEvent when the "disabledIcon" property changes. + */ + public static final String DISABLED_ICON_CHANGED_PROPERTY = "disabledIcon"; + + /** + * Fired in a PropertyChangeEvent when the "displayedMnemonic" property + * changes. + */ + public static final String DISPLAYED_MNEMONIC_CHANGED_PROPERTY = "displayedMnemonic"; - String text; - Icon icon; - int gap; - int align; + /** + * Fired in a PropertyChangeEvent when the "displayedMnemonicIndex" + * property changes. */ + public static final String DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY = "displayedMnemonicIndex"; - int hor_align; - int hor_text_pos; + /** + * Fired in a PropertyChangeEvent when the "horizontalAlignment" property + * changes. + */ + public static final String HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY = "horizontalAlignment"; - int vert_align; - int vert_text_pos; + /** + * Fired in a PropertyChangeEvent when the "horizontalTextPosition" property + * changes. + */ + public static final String HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY = "horizontalTextPosition"; - public JLabel() - { - this("", null, 0); - } + /** Fired in a PropertyChangeEvent when the "icon" property changes. */ + public static final String ICON_CHANGED_PROPERTY = "icon"; - public JLabel(Icon image) - { - this("", image, 0); - } + /** Fired in a PropertyChangeEvent when the "iconTextGap" property changes. */ + public static final String ICON_TEXT_GAP_CHANGED_PROPERTY = "iconTextGap"; - public JLabel(Icon image, int horizontalAlignment) - { - this("", image, horizontalAlignment); - } + /** Fired in a PropertyChangeEvent when the "labelFor" property changes. */ + public static final String LABEL_FOR_CHANGED_PROPERTY = "labelFor"; - public JLabel(String text) - { - this(text, null, 0); - } + /** Fired in a PropertyChangeEvent when the "text" property changes. */ + public static final String TEXT_CHANGED_PROPERTY = "text"; - public JLabel(String text, int horizontalAlignment) - { - this(text, null, horizontalAlignment); - } + /** + * Fired in a PropertyChangeEvent when the "verticalAlignment" property + * changes. + */ + public static final String VERTICAL_ALIGNMENT_CHANGED_PROPERTY = "verticalAlignment"; - public JLabel(String text, Icon icon, int horizontalAlignment) - { - // do the work..... - this.text = text; - setIcon(icon); - this.align = horizontalAlignment; + /** + * Fired in a PropertyChangeEvent when the "verticalTextPosition" property + * changes. + */ + public static final String VERTICAL_TEXT_POSITION_CHANGED_PROPERTY = "verticalTextPosition"; - updateUI(); // get a proper ui - } + /** + * Creates a new horizontally and vertically centered JLabel object with no text and no + * icon. + */ + public JLabel() + { + this(null, null, CENTER); + } + /** + * Creates a new horizontally and vertically centered JLabel object with no text and the + * given icon. + * + * @param image The icon to use with the label. + */ + public JLabel(Icon image) + { + this(null, image, CENTER); + } - protected int checkHorizontalKey(int key, String message) - { - // Verify that key is a legal value for the horizontalAlignment properties. - return 0; - } - protected int checkVerticalKey(int key, String message) - { - // Verify that key is a legal value for the verticalAlignment or verticalTextPosition properties. - return 0; - } - public AccessibleContext getAccessibleContext() - { - // Get the AccessibleContext of this object - return null; - } - public Icon getDisabledIcon() - { - // Returns the value of the disabledIcon property if it's been set, If it hasn't been set and the value of the icon property is an ImageIcon, we compute a "grayed out" version of the icon and update the disabledIcon property with that. - return null; - } - public int getDisplayedMnemonic() - { - // Return the keycode that indicates a mnemonic key. - return 0; - } - public int getHorizontalAlignment() - { - // Returns the alignment of the label's contents along the X axis. - return hor_align; - } - public int getHorizontalTextPosition() - { - // Returns the horizontal position of the label's text, relative to its image. - return hor_text_pos; - } + /** + * Creates a new vertically centered JLabel object with no text and the given icon and + * horizontal alignment. By default, the text is TRAILING the image. + * + * @param image The icon to use with the label. + * @param horizontalAlignment The horizontal alignment of the label. + */ + public JLabel(Icon image, int horizontalAlignment) + { + this(null, image, horizontalAlignment); + } - public Icon getIcon() - { return icon; } + /** + * Creates a new horizontally and vertically centered JLabel object with no icon and the + * given text. + * + * @param text The text to use with the label. + */ + public JLabel(String text) + { + this(text, null, CENTER); + } - public int getIconTextGap() - { - // Returns the amount of space between the text and the icon displayed in this label. - return 0; - } - public Component getLabelFor() - { - // Get the component this is labelling. - return null; - } - public String getText() - { return text; } + /** + * Creates a new vertically centered JLabel object with no icon and the given text and + * horizontal alignment. + * + * @param text The text to use with the label. + * @param horizontalAlignment The horizontal alignment of the label. + */ + public JLabel(String text, int horizontalAlignment) + { + this(text, null, horizontalAlignment); + } - public String getUIClassID() - { return "LabelUI"; } + /** + * Creates a new vertically centered JLabel object with the given text, icon, and horizontal + * alignment. + * + * @param text The text to use with the label. + * @param icon The icon to use with the label. + * @param horizontalAlignment The horizontal alignment of the label. + */ + public JLabel(String text, Icon icon, int horizontalAlignment) + { + labelText = text; + activeIcon = icon; + this.horizontalAlignment = horizontalAlignment; + updateUI(); + } - public int getVerticalAlignment() - { - // Returns the alignment of the label's contents along the Y axis. - return vert_align; - } - public int getVerticalTextPosition() - { - // Returns the vertical position of the label's text, relative to its image. - return vert_text_pos; - } + /** + * This method returns the label's UI delegate. + * + * @return The label's UI delegate. + */ + public LabelUI getUI() + { + return (LabelUI) ui; + } - public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h) - { - // This is overriden to return false if the current Icon's Image is not equal to the passed in Image img. - return (img == icon); - } - protected String paramString() - { - // Returns a string representation of this JLabel. - return "JLabel"; - } - public void setDisabledIcon(Icon disabledIcon) - { - // Set the icon to be displayed if this JLabel is "disabled" (JLabel.setEnabled(false)). - } - public void setDisplayedMnemonic(char aChar) - { - // Specifies the displayedMnemonic as a char value. - } - public void setDisplayedMnemonic(int key) - { - // Specify a keycode that indicates a mnemonic key. - } - public void setHorizontalAlignment(int alignment) - { - // Sets the alignment of the label's contents along the X axis. - hor_align = alignment; - } - public void setHorizontalTextPosition(int textPosition) - { - // Sets the horizontal position of the label's text, relative to its image. - hor_text_pos = textPosition; - } - public void setIcon(Icon icon) - { - this.icon = icon; - if (icon != null) - { - // XXX FIXME - icons do not know their parent -// icon.setParent(this); - } - revalidate(); - repaint(); - } + /** + * This method sets the label's UI delegate. + * + * @param ui The label's UI delegate. + */ + public void setUI(LabelUI ui) + { + super.setUI(ui); + } - public void setIconTextGap(int iconTextGap) - { - gap = iconTextGap; - } - - public void setLabelFor(Component c) - { - // Set the component this is labelling. - } - public void setText(String text) + /** + * This method resets the label's UI delegate to the default UI for the + * current look and feel. + */ + public void updateUI() + { + setUI((LabelUI) UIManager.getUI(this)); + } + + /** + * This method returns a name to identify which look and feel class will be + * the UI delegate for this label. + * + * @return The UIClass identifier. "LabelUI" + */ + public String getUIClassID() + { + return "LabelUI"; + } + + /** + * This method is used primarily for debugging purposes and returns a string + * that can be used to represent this label. + * + * @return A string to represent this label. + */ + protected String paramString() + { + return "JLabel"; + } + + /** + * This method returns the label text. + * + * @return The label text. + */ + public String getText() + { + return labelText; + } + + /** + * This method changes the "text" property. The given text will be painted + * in the label. + * + * @param text The label's text. + */ + public void setText(String text) + { + if (text != labelText) + { + String oldText = labelText; + labelText = text; + firePropertyChange(TEXT_CHANGED_PROPERTY, oldText, labelText); + if (labelText.length() <= underlinedChar) + setDisplayedMnemonicIndex(labelText.length() - 1); + } + } + + /** + * This method returns the active icon. The active icon is painted when the + * label is enabled. + * + * @return The active icon. + */ + public Icon getIcon() + { + return activeIcon; + } + + /** + * This method changes the "icon" property. This icon (the active icon) will + * be the one displayed when the label is enabled. + * + * @param icon The active icon. + */ + public void setIcon(Icon icon) + { + if (icon != activeIcon) + { + Icon oldIcon = activeIcon; + activeIcon = icon; + firePropertyChange(ICON_CHANGED_PROPERTY, oldIcon, activeIcon); + } + } + + /** + * This method returns the disabled icon. The disabled icon is painted when + * the label is disabled. If the disabled icon is null and the active icon is + * an ImageIcon, this method returns a grayed version of the icon. The grayed + * version of the icon becomes the disabledIcon. + * + * @return The disabled icon. + */ + public Icon getDisabledIcon() + { + //FIXME: We should be gray-scaling the active icon and then returning it + if (disabledIcon == null && activeIcon instanceof ImageIcon) + setDisabledIcon(activeIcon); + return disabledIcon; + } + + /** + * This method changes the "disabledIcon" property. This icon (the disabled + * icon) will be the one displayed when the label is disabled. + * + * @param disabledIcon The disabled icon. + */ + public void setDisabledIcon(Icon disabledIcon) + { + if (disabledIcon != this.disabledIcon) + { + Icon oldDisabledIcon = this.disabledIcon; + this.disabledIcon = disabledIcon; + firePropertyChange(DISABLED_ICON_CHANGED_PROPERTY, oldDisabledIcon, + this.disabledIcon); + } + } + + /** + * This method sets the keycode that will be the label's mnemonic. If the + * label is used as a label for another component, the label will give + * focus to that component when the mnemonic is activated. + * + * @param key The keycode to use for the mnemonic. + */ + public void setDisplayedMnemonic(int key) + { + setDisplayedMnemonic((char) key); + } + + /** + * This method sets the character that will be the mnemonic used. If the + * label is used as a label for another component, the label will give + * focus to that component when the mnemonic is activated. + * + * @param aChar The character to use for the mnemonic. + */ + public void setDisplayedMnemonic(char aChar) + { + if (aChar != mnemonicKey) + { + char oldKey = mnemonicKey; + mnemonicKey = aChar; + firePropertyChange(DISPLAYED_MNEMONIC_CHANGED_PROPERTY, oldKey, + mnemonicKey); + if (labelText != null) + setDisplayedMnemonicIndex(labelText.indexOf(mnemonicKey)); + } + } + + /** + * This method returns the keycode that is used for the label's mnemonic. + * + * @return The keycode that is used for the label's mnemonic. + */ + public int getDisplayedMnemonic() + { + return (int) mnemonicKey; + } + + /** + * This method sets which character in the text will be the underlined + * character. If the given index is -1, then this indicates that there is + * no mnemonic. If the index is less than -1 or if the index is equal to + * the length, this method will throw an IllegalArgumentException. + * + * @param index The index of the character to underline. + * + * @throws IllegalArgumentException If index less than -1 or index equals + * length. + */ + public void setDisplayedMnemonicIndex(int index) + throws IllegalArgumentException + { + if (index < -1 || labelText != null && index >= labelText.length()) + throw new IllegalArgumentException(); + + if (labelText == null || labelText.charAt(index) != mnemonicKey) + index = -1; + + if (index != underlinedChar) { - this.text = text; - revalidate(); - repaint(); + int oldIndex = underlinedChar; + underlinedChar = index; + firePropertyChange(DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY, + oldIndex, underlinedChar); } + } + + /** + * This method returns which character in the text will be the underlined + * character. + * + * @return The index of the character that will be underlined. + */ + public int getDisplayedMnemonicIndex() + { + return underlinedChar; + } + + /** + * This method ensures that the key is valid as a horizontal alignment. + * Valid keys are: LEFT, CENTER, RIGHT, LEADING, TRAILING + * + * @param key The key to check. + * @param message The message of the exception to be thrown if the key is + * invalid. + * + * @return The key if it's valid. + * + * @throws IllegalArgumentException If the key is invalid. + */ + protected int checkHorizontalKey(int key, String message) + { + if (key != LEFT && key != CENTER && key != RIGHT && key != LEADING + && key != TRAILING) + throw new IllegalArgumentException(message); + else + return key; + } + + /** + * This method ensures that the key is valid as a vertical alignment. Valid + * keys are: TOP, CENTER, and BOTTOM. + * + * @param key The key to check. + * @param message The message of the exception to be thrown if the key is + * invalid. + * + * @return The key if it's valid. + * + * @throws IllegalArgumentException If the key is invalid. + */ + protected int checkVerticalKey(int key, String message) + { + if (key != TOP && key != BOTTOM && key != CENTER) + throw new IllegalArgumentException(message); + else + return key; + } + + /** + * This method returns the gap between the icon and the text. + * + * @return The gap between the icon and the text. + */ + public int getIconTextGap() + { + return iconTextGap; + } + + /** + * This method changes the "iconTextGap" property. The iconTextGap + * determines how much space there is between the icon and the text. + * + * @param iconTextGap The gap between the icon and the text. + */ + public void setIconTextGap(int iconTextGap) + { + if (iconTextGap != this.iconTextGap) + { + int oldIconTextGap = this.iconTextGap; + this.iconTextGap = iconTextGap; + firePropertyChange(ICON_TEXT_GAP_CHANGED_PROPERTY, oldIconTextGap, + iconTextGap); + } + } + + /** + * This method returns the vertical alignment of the label. + * + * @return The vertical alignment of the label. + */ + public int getVerticalAlignment() + { + return verticalAlignment; + } + + /** + * This method changes the "verticalAlignment" property of the label. The + * vertical alignment determines how where the label will be placed + * vertically. If the alignment is not valid, it will default to the + * center. + * + * @param alignment The vertical alignment of the label. + */ + public void setVerticalAlignment(int alignment) + { + if (alignment != verticalAlignment) + { + int oldAlignment = verticalAlignment; + verticalAlignment = checkVerticalKey(alignment, "verticalAlignment"); + firePropertyChange(VERTICAL_ALIGNMENT_CHANGED_PROPERTY, oldAlignment, + verticalAlignment); + } + } + + /** + * This method returns the horziontal alignment of the label. + * + * @return The horizontal alignment of the label. + */ + public int getHorizontalAlignment() + { + return horizontalAlignment; + } + + /** + * This method changes the "horizontalAlignment" property. The horizontal + * alignment determines where the label will be placed horizontally. + * + * @param alignment The horizontal alignment of the label. + */ + public void setHorizontalAlignment(int alignment) + { + int oldAlignment = horizontalAlignment; + horizontalAlignment = checkHorizontalKey(alignment, "horizontalAlignment"); + firePropertyChange(HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY, oldAlignment, + horizontalAlignment); + } + + /** + * This method returns the vertical text position of the label. + * + * @return The vertical text position of the label. + */ + public int getVerticalTextPosition() + { + return verticalTextPosition; + } + + /** + * This method changes the "verticalTextPosition" property of the label. The + * vertical text position determines where the text will be placed + * vertically relative to the icon. + * + * @param textPosition The vertical text position. + */ + public void setVerticalTextPosition(int textPosition) + { + if (textPosition != verticalTextPosition) + { + int oldPos = verticalTextPosition; + verticalTextPosition = checkVerticalKey(textPosition, + "verticalTextPosition"); + firePropertyChange(VERTICAL_TEXT_POSITION_CHANGED_PROPERTY, oldPos, + verticalTextPosition); + } + } + + /** + * This method returns the horizontal text position of the label. + * + * @return The horizontal text position. + */ + public int getHorizontalTextPosition() + { + return horizontalTextPosition; + } + + /** + * This method changes the "horizontalTextPosition" property of the label. + * The horizontal text position determines where the text will be placed + * horizontally relative to the icon. + * + * @param textPosition The horizontal text position. + */ + public void setHorizontalTextPosition(int textPosition) + { + if (textPosition != horizontalTextPosition) + { + int oldPos = horizontalTextPosition; + horizontalTextPosition = checkHorizontalKey(textPosition, + "horizontalTextPosition"); + firePropertyChange(HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY, oldPos, + horizontalTextPosition); + } + } + + /** + * This method simply returns false if the current icon image (current icon + * will depend on whether the label is enabled) is not equal to the passed + * in image. + * + * @param img The image to check. + * @param infoflags The bitwise inclusive OR of ABORT, ALLBITS, ERROR, + * FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, and WIDTH + * @param x The x position + * @param y The y position + * @param w The width + * @param h The height + * + * @return Whether the current icon image is equal to the image given. + */ + public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, + int h) + { + Icon currIcon = (isEnabled()) ? activeIcon : disabledIcon; + + //Is this the correct way to check for image equality? + if (currIcon != null && currIcon instanceof ImageIcon) + return (((ImageIcon) currIcon).getImage() == img); + return false; + } + + /** + * This method returns the component that the label gives focus to when the + * mnemonic is activated. + * + * @return The component that gets focus when the label's mnemonic is + * activated. + */ + public Component getLabelFor() + { + return labelFor; + } + + /** + * This method changes the "labelFor" property. The component that the label + * is acting as a label for will request focus when the label's mnemonic + * is activated. + * + * @param c The component that gets focus when the label's mnemonic is + * activated. + */ + public void setLabelFor(Component c) + { + if (c != labelFor) + { + Component oldLabelFor = labelFor; + labelFor = c; + firePropertyChange(LABEL_FOR_CHANGED_PROPERTY, oldLabelFor, labelFor); + } + } - public void setVerticalAlignment(int alignment) - { - // Sets the alignment of the label's contents along the Y axis. - vert_align = alignment; - } - public void setVerticalTextPosition(int textPosition) - { - // Sets the vertical position of the label's text, relative to its image. - vert_text_pos = textPosition; - } - public void updateUI() - { - LabelUI b = (LabelUI)UIManager.getUI(this); - setUI(b); - } + /** + * This method overrides setFont so that we can call for a repaint + * after the font is changed. + * + * @param f The font for this label. + */ + public void setFont(Font f) + { + super.setFont(f); + repaint(); + } + + /** + * DOCUMENT ME! + * + * @return + */ + public AccessibleContext getAccessibleContext() + { + return null; + } } |