JSliderpublic class JSlider extends JComponent implements SwingConstants, AccessibleA component that lets the user graphically select a value by sliding
a knob within a bounded interval.
The slider can show both
major tick marks, and minor tick marks between the major ones. The number of
values between the tick marks is controlled with
setMajorTickSpacing and setMinorTickSpacing .
Painting of tick marks is controlled by {@code setPaintTicks}.
Sliders can also print text labels at regular intervals (or at
arbitrary locations) along the slider track. Painting of labels is
controlled by {@code setLabelTable} and {@code setPaintLabels}.
For further information and examples see
How to Use Sliders,
a section in The Java Tutorial.
Warning: Swing is not thread safe. For more
information see Swing's Threading
Policy.
Warning:
Serialized objects of this class will not be compatible with
future Swing releases. The current serialization support is
appropriate for short term storage or RMI between applications running
the same version of Swing. As of 1.4, support for long term storage
of all JavaBeansTM
has been added to the java.beans package.
Please see {@link java.beans.XMLEncoder}. |
Fields Summary |
---|
private static final String | uiClassID | private boolean | paintTicks | private boolean | paintTrack | private boolean | paintLabels | private boolean | isInverted | protected BoundedRangeModel | sliderModelThe data model that handles the numeric maximum value,
minimum value, and current-position value for the slider. | protected int | majorTickSpacingThe number of values between the major tick marks -- the
larger marks that break up the minor tick marks. | protected int | minorTickSpacingThe number of values between the minor tick marks -- the
smaller marks that occur between the major tick marks. | protected boolean | snapToTicksIf true, the knob (and the data value it represents)
resolve to the closest tick mark next to where the user
positioned the knob. The default is false. | boolean | snapToValueIf true, the knob (and the data value it represents)
resolve to the closest slider value next to where the user
positioned the knob. | protected int | orientationWhether the slider is horizontal or vertical
The default is horizontal. | private Dictionary | labelTable{@code Dictionary} of what labels to draw at which values | protected ChangeListener | changeListenerThe changeListener (no suffix) is the listener we add to the
slider's model. This listener is initialized to the
{@code ChangeListener} returned from {@code createChangeListener},
which by default just forwards events
to {@code ChangeListener}s (if any) added directly to the slider. | protected transient ChangeEvent | changeEventOnly one ChangeEvent is needed per slider instance since the
event's only (read-only) state is the source property. The source
of events generated here is always "this". The event is lazily
created the first time that an event notification is fired. |
Constructors Summary |
---|
public JSlider()Creates a horizontal slider with the range 0 to 100 and
an initial value of 50.
this(HORIZONTAL, 0, 100, 50);
| public JSlider(int orientation)Creates a slider using the specified orientation with the
range {@code 0} to {@code 100} and an initial value of {@code 50}.
The orientation can be
either SwingConstants.VERTICAL or
SwingConstants.HORIZONTAL .
this(orientation, 0, 100, 50);
| public JSlider(int min, int max)Creates a horizontal slider using the specified min and max
with an initial value equal to the average of the min plus max.
The BoundedRangeModel that holds the slider's data
handles any issues that may arise from improperly setting the
minimum and maximum values on the slider. See the
{@code BoundedRangeModel} documentation for details.
this(HORIZONTAL, min, max, (min + max) / 2);
| public JSlider(int min, int max, int value)Creates a horizontal slider using the specified min, max and value.
The BoundedRangeModel that holds the slider's data
handles any issues that may arise from improperly setting the
minimum, initial, and maximum values on the slider. See the
{@code BoundedRangeModel} documentation for details.
this(HORIZONTAL, min, max, value);
| public JSlider(int orientation, int min, int max, int value)Creates a slider with the specified orientation and the
specified minimum, maximum, and initial values.
The orientation can be
either SwingConstants.VERTICAL or
SwingConstants.HORIZONTAL .
The BoundedRangeModel that holds the slider's data
handles any issues that may arise from improperly setting the
minimum, initial, and maximum values on the slider. See the
{@code BoundedRangeModel} documentation for details.
checkOrientation(orientation);
this.orientation = orientation;
sliderModel = new DefaultBoundedRangeModel(value, 0, min, max);
sliderModel.addChangeListener(changeListener);
updateUI();
| public JSlider(BoundedRangeModel brm)Creates a horizontal slider using the specified
BoundedRangeModel.
this.orientation = JSlider.HORIZONTAL;
setModel(brm);
sliderModel.addChangeListener(changeListener);
updateUI();
|
Methods Summary |
---|
public void | addChangeListener(javax.swing.event.ChangeListener l)Adds a ChangeListener to the slider.
listenerList.add(ChangeListener.class, l);
| private void | checkOrientation(int orientation)
switch (orientation) {
case VERTICAL:
case HORIZONTAL:
break;
default:
throw new IllegalArgumentException("orientation must be one of: VERTICAL, HORIZONTAL");
}
| protected javax.swing.event.ChangeListener | createChangeListener()Subclasses that want to handle {@code ChangeEvent}s
from the model differently
can override this to return
an instance of a custom ChangeListener implementation.
The default {@code ChangeListener} simply calls the
{@code fireStateChanged} method to forward {@code ChangeEvent}s
to the {@code ChangeListener}s that have been added directly to the
slider.
return new ModelListener();
| public java.util.Hashtable | createStandardLabels(int increment)Creates a {@code Hashtable} of numerical text labels, starting at the
slider minimum, and using the increment specified.
For example, if you call createStandardLabels( 10 )
and the slider minimum is zero,
then labels will be created for the values 0, 10, 20, 30, and so on.
For the labels to be drawn on the slider, the returned {@code Hashtable}
must be passed into {@code setLabelTable}, and {@code setPaintLabels}
must be set to {@code true}.
For further details on the makeup of the returned {@code Hashtable}, see
the {@code setLabelTable} documentation.
return createStandardLabels( increment, getMinimum() );
| public java.util.Hashtable | createStandardLabels(int increment, int start)Creates a {@code Hashtable} of numerical text labels, starting at the
starting point specified, and using the increment specified.
For example, if you call
createStandardLabels( 10, 2 ) ,
then labels will be created for the values 2, 12, 22, 32, and so on.
For the labels to be drawn on the slider, the returned {@code Hashtable}
must be passed into {@code setLabelTable}, and {@code setPaintLabels}
must be set to {@code true}.
For further details on the makeup of the returned {@code Hashtable}, see
the {@code setLabelTable} documentation.
if ( start > getMaximum() || start < getMinimum() ) {
throw new IllegalArgumentException( "Slider label start point out of range." );
}
if ( increment <= 0 ) {
throw new IllegalArgumentException( "Label incremement must be > 0" );
}
class SmartHashtable extends Hashtable implements PropertyChangeListener {
int increment = 0;
int start = 0;
boolean startAtMin = false;
class LabelUIResource extends JLabel implements UIResource {
public LabelUIResource( String text, int alignment ) {
super( text, alignment );
setName("Slider.label");
}
public Font getFont() {
Font font = super.getFont();
if (font != null && !(font instanceof UIResource)) {
return font;
}
return JSlider.this.getFont();
}
public Color getForeground() {
Color fg = super.getForeground();
if (fg != null && !(fg instanceof UIResource)) {
return fg;
}
if (!(JSlider.this.getForeground() instanceof UIResource)) {
return JSlider.this.getForeground();
}
return fg;
}
}
public SmartHashtable( int increment, int start ) {
super();
this.increment = increment;
this.start = start;
startAtMin = start == getMinimum();
createLabels();
}
public void propertyChange( PropertyChangeEvent e ) {
if ( e.getPropertyName().equals( "minimum" ) && startAtMin ) {
start = getMinimum();
}
if ( e.getPropertyName().equals( "minimum" ) ||
e.getPropertyName().equals( "maximum" ) ) {
Enumeration keys = getLabelTable().keys();
Object key = null;
Hashtable hashtable = new Hashtable();
// Save the labels that were added by the developer
while ( keys.hasMoreElements() ) {
key = keys.nextElement();
Object value = getLabelTable().get( key );
if ( !(value instanceof LabelUIResource) ) {
hashtable.put( key, value );
}
}
clear();
createLabels();
// Add the saved labels
keys = hashtable.keys();
while ( keys.hasMoreElements() ) {
key = keys.nextElement();
put( key, hashtable.get( key ) );
}
((JSlider)e.getSource()).setLabelTable( this );
}
}
void createLabels() {
for ( int labelIndex = start; labelIndex <= getMaximum(); labelIndex += increment ) {
put( new Integer( labelIndex ), new LabelUIResource( ""+labelIndex, JLabel.CENTER ) );
}
}
}
SmartHashtable table = new SmartHashtable( increment, start );
if ( getLabelTable() != null && (getLabelTable() instanceof PropertyChangeListener) ) {
removePropertyChangeListener( (PropertyChangeListener)getLabelTable() );
}
addPropertyChangeListener( table );
return table;
| protected void | fireStateChanged()Send a {@code ChangeEvent}, whose source is this {@code JSlider}, to
all {@code ChangeListener}s that have registered interest in
{@code ChangeEvent}s.
This method is called each time a {@code ChangeEvent} is received from
the model.
The event instance is created if necessary, and stored in
{@code changeEvent}.
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i]==ChangeListener.class) {
if (changeEvent == null) {
changeEvent = new ChangeEvent(this);
}
((ChangeListener)listeners[i+1]).stateChanged(changeEvent);
}
}
| public javax.accessibility.AccessibleContext | getAccessibleContext()Gets the AccessibleContext associated with this JSlider.
For sliders, the AccessibleContext takes the form of an
AccessibleJSlider.
A new AccessibleJSlider instance is created if necessary.
if (accessibleContext == null) {
accessibleContext = new AccessibleJSlider();
}
return accessibleContext;
| public javax.swing.event.ChangeListener[] | getChangeListeners()Returns an array of all the ChangeListener s added
to this JSlider with addChangeListener().
return (ChangeListener[])listenerList.getListeners(
ChangeListener.class);
| public int | getExtent()Returns the "extent" from the BoundedRangeModel .
This respresents the range of values "covered" by the knob.
return getModel().getExtent();
| public boolean | getInverted()Returns true if the value-range shown for the slider is reversed,
return isInverted;
| public java.util.Dictionary | getLabelTable()Returns the dictionary of what labels to draw at which values.
/*
if ( labelTable == null && getMajorTickSpacing() > 0 ) {
setLabelTable( createStandardLabels( getMajorTickSpacing() ) );
}
*/
return labelTable;
| public int | getMajorTickSpacing()This method returns the major tick spacing. The number that is returned
represents the distance, measured in values, between each major tick mark.
If you have a slider with a range from 0 to 50 and the major tick spacing
is set to 10, you will get major ticks next to the following values:
0, 10, 20, 30, 40, 50.
return majorTickSpacing;
| public int | getMaximum()Returns the maximum value supported by the slider
from the BoundedRangeModel .
return getModel().getMaximum();
| public int | getMinimum()Returns the minimum value supported by the slider
from the BoundedRangeModel .
return getModel().getMinimum();
| public int | getMinorTickSpacing()This method returns the minor tick spacing. The number that is returned
represents the distance, measured in values, between each minor tick mark.
If you have a slider with a range from 0 to 50 and the minor tick spacing
is set to 10, you will get minor ticks next to the following values:
0, 10, 20, 30, 40, 50.
return minorTickSpacing;
| public javax.swing.BoundedRangeModel | getModel()Returns the {@code BoundedRangeModel} that handles the slider's three
fundamental properties: minimum, maximum, value.
return sliderModel;
| public int | getOrientation()Return this slider's vertical or horizontal orientation.
return orientation;
| public boolean | getPaintLabels()Tells if labels are to be painted.
return paintLabels;
| public boolean | getPaintTicks()Tells if tick marks are to be painted.
return paintTicks;
| public boolean | getPaintTrack()Tells if the track (area the slider slides in) is to be painted.
return paintTrack;
| public boolean | getSnapToTicks()Returns true if the knob (and the data value it represents)
resolve to the closest tick mark next to where the user
positioned the knob.
return snapToTicks;
| boolean | getSnapToValue()Returns true if the knob (and the data value it represents)
resolve to the closest slider value next to where the user
positioned the knob.
return snapToValue;
| public javax.swing.plaf.SliderUI | getUI()Gets the UI object which implements the L&F for this component.
return(SliderUI)ui;
| public java.lang.String | getUIClassID()Returns the name of the L&F class that renders this component.
return uiClassID;
| public int | getValue()Returns the slider's current value
from the {@code BoundedRangeModel}.
return getModel().getValue();
| public boolean | getValueIsAdjusting()Returns the {@code valueIsAdjusting} property from the model. For
details on how this is used, see the {@code setValueIsAdjusting}
documentation.
return getModel().getValueIsAdjusting();
| protected java.lang.String | paramString()Returns a string representation of this JSlider. This method
is intended to be used only for debugging purposes, and the
content and format of the returned string may vary between
implementations. The returned string may be empty but may not
be null .
String paintTicksString = (paintTicks ?
"true" : "false");
String paintTrackString = (paintTrack ?
"true" : "false");
String paintLabelsString = (paintLabels ?
"true" : "false");
String isInvertedString = (isInverted ?
"true" : "false");
String snapToTicksString = (snapToTicks ?
"true" : "false");
String snapToValueString = (snapToValue ?
"true" : "false");
String orientationString = (orientation == HORIZONTAL ?
"HORIZONTAL" : "VERTICAL");
return super.paramString() +
",isInverted=" + isInvertedString +
",majorTickSpacing=" + majorTickSpacing +
",minorTickSpacing=" + minorTickSpacing +
",orientation=" + orientationString +
",paintLabels=" + paintLabelsString +
",paintTicks=" + paintTicksString +
",paintTrack=" + paintTrackString +
",snapToTicks=" + snapToTicksString +
",snapToValue=" + snapToValueString;
| public void | removeChangeListener(javax.swing.event.ChangeListener l)Removes a ChangeListener from the slider.
listenerList.remove(ChangeListener.class, l);
| public void | setExtent(int extent)Sets the size of the range "covered" by the knob. Most look
and feel implementations will change the value by this amount
if the user clicks on either side of the knob. This method just
forwards the new extent value to the model.
The data model (an instance of {@code BoundedRangeModel})
handles any mathematical
issues arising from assigning faulty values. See the
{@code BoundedRangeModel} documentation for details.
If the new extent value is different from the previous extent value,
all change listeners are notified.
getModel().setExtent(extent);
| public void | setFont(java.awt.Font font){@inheritDoc}
super.setFont(font);
updateLabelSizes();
| public void | setInverted(boolean b)Specify true to reverse the value-range shown for the slider and false to
put the value range in the normal order. The order depends on the
slider's ComponentOrientation property. Normal (non-inverted)
horizontal sliders with a ComponentOrientation value of
LEFT_TO_RIGHT have their maximum on the right.
Normal horizontal sliders with a ComponentOrientation value of
RIGHT_TO_LEFT have their maximum on the left. Normal vertical
sliders have their maximum on the top. These labels are reversed when the
slider is inverted.
By default, the value of this property is {@code false}.
boolean oldValue = isInverted;
isInverted = b;
firePropertyChange("inverted", oldValue, isInverted);
if (b != oldValue) {
repaint();
}
| public void | setLabelTable(java.util.Dictionary labels)Used to specify what label will be drawn at any given value.
The key-value pairs are of this format:
{ Integer value, java.swing.JComponent label } .
An easy way to generate a standard table of value labels is by using the
{@code createStandardLabels} method.
Once the labels have been set, this method calls {@link #updateLabelUIs}.
Note that the labels are only painted if the {@code paintLabels}
property is {@code true}.
Dictionary oldTable = labelTable;
labelTable = labels;
updateLabelUIs();
firePropertyChange("labelTable", oldTable, labelTable );
if (labels != oldTable) {
revalidate();
repaint();
}
| public void | setMajorTickSpacing(int n)This method sets the major tick spacing. The number that is passed in
represents the distance, measured in values, between each major tick mark.
If you have a slider with a range from 0 to 50 and the major tick spacing
is set to 10, you will get major ticks next to the following values:
0, 10, 20, 30, 40, 50.
In order for major ticks to be painted, {@code setPaintTicks} must be
set to {@code true}.
This method will also set up a label table for you.
If there is not already a label table, and the major tick spacing is
{@code > 0}, and {@code getPaintLabels} returns
{@code true}, a standard label table will be generated (by calling
{@code createStandardLabels}) with labels at the major tick marks.
For the example above, you would get text labels: "0",
"10", "20", "30", "40", "50".
The label table is then set on the slider by calling
{@code setLabelTable}.
int oldValue = majorTickSpacing;
majorTickSpacing = n;
if ( labelTable == null && getMajorTickSpacing() > 0 && getPaintLabels() ) {
setLabelTable( createStandardLabels( getMajorTickSpacing() ) );
}
firePropertyChange("majorTickSpacing", oldValue, majorTickSpacing);
if (majorTickSpacing != oldValue && getPaintTicks()) {
repaint();
}
| public void | setMaximum(int maximum)Sets the slider's maximum value to {@code maximum}. This method
forwards the new maximum value to the model.
The data model (an instance of {@code BoundedRangeModel})
handles any mathematical
issues arising from assigning faulty values. See the
{@code BoundedRangeModel} documentation for details.
If the new maximum value is different from the previous maximum value,
all change listeners are notified.
int oldMax = getModel().getMaximum();
getModel().setMaximum(maximum);
firePropertyChange( "maximum", new Integer( oldMax ), new Integer( maximum ) );
| public void | setMinimum(int minimum)Sets the slider's minimum value to {@code minimum}. This method
forwards the new minimum value to the model.
The data model (an instance of {@code BoundedRangeModel})
handles any mathematical
issues arising from assigning faulty values. See the
{@code BoundedRangeModel} documentation for details.
If the new minimum value is different from the previous minimum value,
all change listeners are notified.
int oldMin = getModel().getMinimum();
getModel().setMinimum(minimum);
firePropertyChange( "minimum", new Integer( oldMin ), new Integer( minimum ) );
| public void | setMinorTickSpacing(int n)This method sets the minor tick spacing. The number that is passed in
represents the distance, measured in values, between each minor tick mark.
If you have a slider with a range from 0 to 50 and the minor tick spacing
is set to 10, you will get minor ticks next to the following values:
0, 10, 20, 30, 40, 50.
In order for minor ticks to be painted, {@code setPaintTicks} must be
set to {@code true}.
int oldValue = minorTickSpacing;
minorTickSpacing = n;
firePropertyChange("minorTickSpacing", oldValue, minorTickSpacing);
if (minorTickSpacing != oldValue && getPaintTicks()) {
repaint();
}
| public void | setModel(javax.swing.BoundedRangeModel newModel)Sets the {@code BoundedRangeModel} that handles the slider's three
fundamental properties: minimum, maximum, value.
Attempts to pass a {@code null} model to this method result in
undefined behavior, and, most likely, exceptions.
BoundedRangeModel oldModel = getModel();
if (oldModel != null) {
oldModel.removeChangeListener(changeListener);
}
sliderModel = newModel;
if (newModel != null) {
newModel.addChangeListener(changeListener);
if (accessibleContext != null) {
accessibleContext.firePropertyChange(
AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
(oldModel == null
? null : new Integer(oldModel.getValue())),
(newModel == null
? null : new Integer(newModel.getValue())));
}
}
firePropertyChange("model", oldModel, sliderModel);
| public void | setOrientation(int orientation)Set the slider's orientation to either {@code SwingConstants.VERTICAL} or
{@code SwingConstants.HORIZONTAL}.
checkOrientation(orientation);
int oldValue = this.orientation;
this.orientation = orientation;
firePropertyChange("orientation", oldValue, orientation);
if ((oldValue != orientation) && (accessibleContext != null)) {
accessibleContext.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
((oldValue == VERTICAL)
? AccessibleState.VERTICAL : AccessibleState.HORIZONTAL),
((orientation == VERTICAL)
? AccessibleState.VERTICAL : AccessibleState.HORIZONTAL));
}
if (orientation != oldValue) {
revalidate();
}
| public void | setPaintLabels(boolean b)Determines whether labels are painted on the slider.
This method will also set up a label table for you.
If there is not already a label table, and the major tick spacing is
{@code > 0},
a standard label table will be generated (by calling
{@code createStandardLabels}) with labels at the major tick marks.
The label table is then set on the slider by calling
{@code setLabelTable}.
By default, this property is {@code false}.
boolean oldValue = paintLabels;
paintLabels = b;
if ( labelTable == null && getMajorTickSpacing() > 0 ) {
setLabelTable( createStandardLabels( getMajorTickSpacing() ) );
}
firePropertyChange("paintLabels", oldValue, paintLabels);
if (paintLabels != oldValue) {
revalidate();
repaint();
}
| public void | setPaintTicks(boolean b)Determines whether tick marks are painted on the slider.
By default, this property is {@code false}.
boolean oldValue = paintTicks;
paintTicks = b;
firePropertyChange("paintTicks", oldValue, paintTicks);
if (paintTicks != oldValue) {
revalidate();
repaint();
}
| public void | setPaintTrack(boolean b)Determines whether the track is painted on the slider.
By default, this property is {@code true}.
boolean oldValue = paintTrack;
paintTrack = b;
firePropertyChange("paintTrack", oldValue, paintTrack);
if (paintTrack != oldValue) {
repaint();
}
| public void | setSnapToTicks(boolean b)Specifying true makes the knob (and the data value it represents)
resolve to the closest tick mark next to where the user
positioned the knob.
By default, this property is {@code false}.
boolean oldValue = snapToTicks;
snapToTicks = b;
firePropertyChange("snapToTicks", oldValue, snapToTicks);
| void | setSnapToValue(boolean b)Specifying true makes the knob (and the data value it represents)
resolve to the closest slider value next to where the user
positioned the knob. If the {@code snapToTicks} property has also been
set to {@code true}, the snap-to-ticks behavior will prevail.
By default, the snapToValue property is {@code true}.
boolean oldValue = snapToValue;
snapToValue = b;
firePropertyChange("snapToValue", oldValue, snapToValue);
| public void | setUI(javax.swing.plaf.SliderUI ui)Sets the UI object which implements the L&F for this component.
super.setUI(ui);
| public void | setValue(int n)Sets the slider's current value to {@code n}. This method
forwards the new value to the model.
The data model (an instance of {@code BoundedRangeModel})
handles any mathematical
issues arising from assigning faulty values. See the
{@code BoundedRangeModel} documentation for details.
If the new value is different from the previous value,
all change listeners are notified.
BoundedRangeModel m = getModel();
int oldValue = m.getValue();
if (oldValue == n) {
return;
}
m.setValue(n);
if (accessibleContext != null) {
accessibleContext.firePropertyChange(
AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
new Integer(oldValue),
new Integer(m.getValue()));
}
| public void | setValueIsAdjusting(boolean b)Sets the model's {@code valueIsAdjusting} property. Slider look and
feel implementations should set this property to {@code true} when
a knob drag begins, and to {@code false} when the drag ends. The
slider model will not generate {@code ChangeEvent}s while
{@code valueIsAdjusting} is {@code true}.
BoundedRangeModel m = getModel();
boolean oldValue = m.getValueIsAdjusting();
m.setValueIsAdjusting(b);
if ((oldValue != b) && (accessibleContext != null)) {
accessibleContext.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
((oldValue) ? AccessibleState.BUSY : null),
((b) ? AccessibleState.BUSY : null));
}
| private void | updateLabelSizes()
Dictionary labelTable = getLabelTable();
if (labelTable != null) {
Enumeration labels = labelTable.elements();
while (labels.hasMoreElements()) {
Object value = labels.nextElement();
if (value instanceof JComponent) {
JComponent component = (JComponent)value;
component.setSize(component.getPreferredSize());
}
}
}
| protected void | updateLabelUIs()Updates the UIs for the labels in the label table by calling
{@code updateUI} on each label. The UIs are updated from
the current look and feel. The labels are also set to their
preferred size.
if ( getLabelTable() == null ) {
return;
}
Enumeration labels = getLabelTable().keys();
while ( labels.hasMoreElements() ) {
Object value = getLabelTable().get( labels.nextElement() );
if ( value instanceof JComponent ) {
JComponent component = (JComponent)value;
component.updateUI();
component.setSize( component.getPreferredSize() );
}
}
| public void | updateUI()Resets the UI property to a value from the current look and feel.
setUI((SliderUI)UIManager.getUI(this));
// The labels preferred size may be derived from the font
// of the slider, so we must update the UI of the slider first, then
// that of labels. This way when setSize is called the right
// font is used.
updateLabelUIs();
| private void | writeObject(java.io.ObjectOutputStream s)See readObject() and writeObject() in JComponent for more
information about serialization in Swing.
s.defaultWriteObject();
if (getUIClassID().equals(uiClassID)) {
byte count = JComponent.getWriteObjCounter(this);
JComponent.setWriteObjCounter(this, --count);
if (count == 0 && ui != null) {
ui.installUI(this);
}
}
|
|