aboutsummaryrefslogtreecommitdiff
path: root/libjava/javax/swing/JLabel.java
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@gcc.gnu.org>2004-03-17 21:29:02 +0000
committerGraydon Hoare <graydon@gcc.gnu.org>2004-03-17 21:29:02 +0000
commit86881a7b541b2ec6557b1a315f841b211d14c576 (patch)
tree02790a2b250b62643a1de68b63bd078238bfaf46 /libjava/javax/swing/JLabel.java
parentab3533d6559205bee768b8d9e359111d52d10733 (diff)
downloadgcc-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.java798
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;
+ }
}