Commit 9257bcc8 by Roman Kennke Committed by Michael Koch

2005-04-20 Roman Kennke <roman@kennke.org>

	* javax/swing/plaf/basic/BasicButtonUI.java
	(paint): This should not care about margin and insets
	at the same time, as insets already include the margin
	through the border.
	* javax/swing/plaf/basic/BasicGraphicsUtils.java
	(getPreferredButtonSize): Likewise.
	* javax/swing/plaf/metal/MetalBorders.java
	(getBorderInsets): Likewise.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/plaf/basic/BasicOptionPaneUI.java
	(createMessageArea): The JPanel that holds the message area
	doesn't need to override getPreferredSize. This prevents some
	message components from rendering nicely.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/plaf/metal/MetalInternalFrameUI.java
	(createUI): Do not share instances between components.
	* javax/swing/plaf/metal/MetalSliderUI.java
	(createUI): Do not share instances between components.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/plaf/metal/MetalBorders:
	(PopupMenuBorder): Added.
	* javax/swing/plaf/metal/MetalLookAndFeel
	(initComponentDefaults): Added PopupMenuBorder.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/tree/DefaultTreeSelectionModel.java:
	Added API documentation all over the class.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/plaf/basic/BasicScrollPaneUI.java
	(installDefaults): Link managed JScrollPane in instance field.
	(uninstallDefaults): Unlink managed JScrollPane in instance field.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/plaf/basic/BasicScrollBarUI.java
	(PropertyChangeHandler.propertyChange): Add default
	to switch statement to avoid errors with unusual values
	for orientation.
	(installComponents): Likewise.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/plaf/metal/MetalScrollBarUI.java:
	(createUI): Instances cannot be shared among JScrollPanes.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/plaf/metal/MetalLookAndFeel.java
	(initComponentDefaults): Added defaults for Menu, MenuBar
	MenuEntry fonts.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/plaf/basic/BasicScrollBarUI.java
	(installUI): Install listeners after everything all, otherwise
	we get strange NPEs in some situations, especially with
	custom L&Fs.
	(createIncreaseButton): Orientation is expected to be
	SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
	HORIZONTAL or VERTICAL.
	(createDecreaseButton): Orientation is expected to be
	SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
	HORIZONTAL or VERTICAL.
	(installComponents): Orientation for buttons is expected to be
	SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
	HORIZONTAL or VERTICAL.

2005-04-20  Roman Kennke  <roman@kennke.org>

	* javax/swing/JToolBar.java
	(addImpl): Adjust added AbstractButtons to look and feel like
	toolbar buttons.
	* javax/swing/plaf/metal/MetalBorders.java:
	Adjusted insets of ButtonBorder.
	(RolloverMarginBorder): Added class for toolbar buttons.
	(getButtonBorder): Adjusted factory method to return a shared
	instance of button border.
	(getToolbarButtonBorder): Added factory method to return a shared
	instance of toolbar button border.
	(getMarginBorder): Added factory method to return a shared
	instance of margin border.
	* javax/swing/plaf/metal/MetalButtonUI.java
	(installDefauls): If button is child of a JToolBar then set
	special border on this button.

From-SVN: r98439
parent 4d23e5b8
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/plaf/basic/BasicButtonUI.java
(paint): This should not care about margin and insets
at the same time, as insets already include the margin
through the border.
* javax/swing/plaf/basic/BasicGraphicsUtils.java
(getPreferredButtonSize): Likewise.
* javax/swing/plaf/metal/MetalBorders.java
(getBorderInsets): Likewise.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/plaf/basic/BasicOptionPaneUI.java
(createMessageArea): The JPanel that holds the message area
doesn't need to override getPreferredSize. This prevents some
message components from rendering nicely.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/plaf/metal/MetalInternalFrameUI.java
(createUI): Do not share instances between components.
* javax/swing/plaf/metal/MetalSliderUI.java
(createUI): Do not share instances between components.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/plaf/metal/MetalBorders:
(PopupMenuBorder): Added.
* javax/swing/plaf/metal/MetalLookAndFeel
(initComponentDefaults): Added PopupMenuBorder.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/tree/DefaultTreeSelectionModel.java:
Added API documentation all over the class.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/plaf/basic/BasicScrollPaneUI.java
(installDefaults): Link managed JScrollPane in instance field.
(uninstallDefaults): Unlink managed JScrollPane in instance field.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/plaf/basic/BasicScrollBarUI.java
(PropertyChangeHandler.propertyChange): Add default
to switch statement to avoid errors with unusual values
for orientation.
(installComponents): Likewise.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/plaf/metal/MetalScrollBarUI.java:
(createUI): Instances cannot be shared among JScrollPanes.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/plaf/metal/MetalLookAndFeel.java
(initComponentDefaults): Added defaults for Menu, MenuBar
MenuEntry fonts.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/plaf/basic/BasicScrollBarUI.java
(installUI): Install listeners after everything all, otherwise
we get strange NPEs in some situations, especially with
custom L&Fs.
(createIncreaseButton): Orientation is expected to be
SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
HORIZONTAL or VERTICAL.
(createDecreaseButton): Orientation is expected to be
SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
HORIZONTAL or VERTICAL.
(installComponents): Orientation for buttons is expected to be
SwingConstants.NORTH, ..SOUTH, ..WEST or ..EAST and not
HORIZONTAL or VERTICAL.
2005-04-20 Roman Kennke <roman@kennke.org>
* javax/swing/JToolBar.java
(addImpl): Adjust added AbstractButtons to look and feel like
toolbar buttons.
* javax/swing/plaf/metal/MetalBorders.java:
Adjusted insets of ButtonBorder.
(RolloverMarginBorder): Added class for toolbar buttons.
(getButtonBorder): Adjusted factory method to return a shared
instance of button border.
(getToolbarButtonBorder): Added factory method to return a shared
instance of toolbar button border.
(getMarginBorder): Added factory method to return a shared
instance of margin border.
* javax/swing/plaf/metal/MetalButtonUI.java
(installDefauls): If button is child of a JToolBar then set
special border on this button.
2005-04-20 Michael Koch <konqueror@gmx.de>
* java/net/URLConnection.java
......
......@@ -50,6 +50,7 @@ import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleStateSet;
import javax.swing.JButton;
import javax.swing.plaf.ToolBarUI;
/**
......@@ -742,6 +743,15 @@ public class JToolBar extends JComponent implements SwingConstants, Accessible
{
// XXX: Sun says disable button but test cases show otherwise.
super.addImpl(component, constraints, index);
// if we added a Swing Button then adjust this a little
if (component instanceof AbstractButton)
{
AbstractButton b = (AbstractButton) component;
b.setRolloverEnabled(rollover);
b.updateUI();
}
} // addImpl()
/**
......
......@@ -247,14 +247,12 @@ public class BasicButtonUI extends ButtonUI
Rectangle tr = new Rectangle();
Rectangle ir = new Rectangle();
Rectangle vr = new Rectangle();
Rectangle br = new Rectangle();
Font f = c.getFont();
g.setFont(f);
SwingUtilities.calculateInnerArea(b, br);
SwingUtilities.calculateInsetArea(br, b.getMargin(), vr);
SwingUtilities.calculateInnerArea(b, vr);
String text = SwingUtilities.layoutCompoundLabel(c, g.getFontMetrics(f),
b.getText(),
currentIcon(b),
......@@ -270,7 +268,7 @@ public class BasicButtonUI extends ButtonUI
|| b.isSelected())
paintButtonPressed(g, b);
else
paintButtonNormal(g, br, c);
paintButtonNormal(g, vr, c);
paintIcon(g, c, ir);
if (text != null)
......
......@@ -595,7 +595,6 @@ public class BasicGraphicsUtils
Rectangle iconRect = new Rectangle();
Rectangle textRect = new Rectangle();
Insets insets = b.getInsets();
Insets margin = b.getMargin();
viewRect = new Rectangle();
......@@ -628,11 +627,11 @@ public class BasicGraphicsUtils
contentRect = textRect.union(iconRect);
return new Dimension(insets.left + margin.left
return new Dimension(insets.left
+ contentRect.width
+ insets.right + margin.right,
insets.top + margin.top
+ insets.right,
insets.top
+ contentRect.height
+ insets.bottom + margin.bottom);
+ insets.bottom);
}
}
......@@ -846,18 +846,7 @@ public class BasicOptionPaneUI extends OptionPaneUI
messageArea.setLayout(new BorderLayout());
addIcon(messageArea);
JPanel rightSide = new JPanel()
{
public Dimension getPreferredSize()
{
int w = Math.max(optionPane.getSize().width, minimumWidth);
Insets i = optionPane.getInsets();
Dimension orig = super.getPreferredSize();
Dimension value = new Dimension(w - i.left - i.right - iconSize,
orig.height);
return value;
}
};
JPanel rightSide = new JPanel();
rightSide.setLayout(new GridBagLayout());
GridBagConstraints con = createConstraints();
......
......@@ -152,8 +152,18 @@ public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager,
{
incrButton.removeMouseListener(buttonListener);
decrButton.removeMouseListener(buttonListener);
incrButton = createIncreaseButton(scrollbar.getOrientation());
decrButton = createDecreaseButton(scrollbar.getOrientation());
int orientation = scrollbar.getOrientation();
switch (orientation)
{
case (JScrollBar.HORIZONTAL):
incrButton = createIncreaseButton(EAST);
decrButton = createDecreaseButton(WEST);
break;
default:
incrButton = createIncreaseButton(SOUTH);
decrButton = createDecreaseButton(NORTH);
break;
}
incrButton.addMouseListener(buttonListener);
decrButton.addMouseListener(buttonListener);
calculatePreferredSize();
......@@ -513,16 +523,9 @@ public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager,
protected JButton createIncreaseButton(int orientation)
{
if (incrButton == null)
incrButton = new BasicArrowButton((orientation == SwingConstants.HORIZONTAL)
? SwingConstants.EAST
: SwingConstants.SOUTH);
incrButton = new BasicArrowButton(orientation);
else
{
if (orientation == SwingConstants.HORIZONTAL)
((BasicArrowButton) incrButton).setDirection(SwingConstants.EAST);
else
((BasicArrowButton) incrButton).setDirection(SwingConstants.SOUTH);
}
((BasicArrowButton) incrButton).setDirection(orientation);
return incrButton;
}
......@@ -537,16 +540,9 @@ public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager,
protected JButton createDecreaseButton(int orientation)
{
if (decrButton == null)
decrButton = new BasicArrowButton((orientation == SwingConstants.HORIZONTAL)
? SwingConstants.WEST
: SwingConstants.NORTH);
decrButton = new BasicArrowButton(orientation);
else
{
if (orientation == SwingConstants.HORIZONTAL)
((BasicArrowButton) decrButton).setDirection(SwingConstants.WEST);
else
((BasicArrowButton) decrButton).setDirection(SwingConstants.NORTH);
}
((BasicArrowButton) decrButton).setDirection(orientation);
return decrButton;
}
......@@ -793,9 +789,19 @@ public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager,
*/
protected void installComponents()
{
incrButton = createIncreaseButton(scrollbar.getOrientation());
int orientation = scrollbar.getOrientation();
switch (orientation)
{
case (JScrollBar.HORIZONTAL):
incrButton = createIncreaseButton(EAST);
decrButton = createDecreaseButton(WEST);
break;
default:
incrButton = createIncreaseButton(SOUTH);
decrButton = createDecreaseButton(NORTH);
break;
}
scrollbar.add(incrButton);
decrButton = createDecreaseButton(scrollbar.getOrientation());
scrollbar.add(decrButton);
}
......@@ -869,9 +875,9 @@ public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager,
scrollTimer.setRepeats(true);
installComponents();
installListeners();
installDefaults();
configureScrollBarColors();
installListeners();
calculatePreferredSize();
layoutContainer(scrollbar);
......
......@@ -53,7 +53,10 @@ import javax.swing.plaf.ScrollPaneUI;
public class BasicScrollPaneUI extends ScrollPaneUI
implements ScrollPaneConstants
{
/** The Scrollpane for which the UI is provided by this class. */
protected JScrollPane scrollpane;
public static ComponentUI createUI(final JComponent c)
{
return new BasicScrollPaneUI();
......@@ -61,6 +64,7 @@ public class BasicScrollPaneUI extends ScrollPaneUI
protected void installDefaults(JScrollPane p)
{
scrollpane = p;
UIDefaults defaults = UIManager.getLookAndFeelDefaults();
p.setForeground(defaults.getColor("ScrollPane.foreground"));
p.setBackground(defaults.getColor("ScrollPane.background"));
......@@ -75,6 +79,7 @@ public class BasicScrollPaneUI extends ScrollPaneUI
p.setBackground(null);
p.setFont(null);
p.setBorder(null);
scrollpane = null;
}
public void installUI(final JComponent c)
......
......@@ -49,6 +49,7 @@ import javax.swing.JButton;
import javax.swing.border.AbstractBorder;
import javax.swing.border.Border;
import javax.swing.plaf.BorderUIResource;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicGraphicsUtils;
import javax.swing.plaf.basic.BasicBorders;
......@@ -61,21 +62,28 @@ import javax.swing.plaf.basic.BasicBorders;
public class MetalBorders
{
/** The shared instance for getButtonBorder(). */
private static Border buttonBorder;
/** The shared instance for getRolloverButtonBorder(). */
private static Border toolbarButtonBorder;
/**
* A MarginBorder that gets shared by multiple components.
* Created on demand by the private helper function {@link
* #getMarginBorder()}.
*/
private static BasicBorders.MarginBorder sharedMarginBorder;
private static BasicBorders.MarginBorder marginBorder;
/**
* The border that is drawn around Swing buttons.
*/
public static class MetalButtonBorder
extends AbstractBorder
implements UIResource
{
/** The borders insets. */
protected static Insets borderInsets = new Insets(2, 2, 2, 2);
protected static Insets borderInsets = new Insets(3, 3, 3, 3);
/**
* Creates a new instance of ButtonBorder.
......@@ -166,6 +174,7 @@ public class MetalBorders
if (newInsets == null)
newInsets = new Insets(0, 0, 0, 0);
AbstractButton b = (AbstractButton) c;
newInsets.bottom = borderInsets.bottom;
newInsets.left = borderInsets.left;
newInsets.right = borderInsets.right;
......@@ -174,6 +183,141 @@ public class MetalBorders
}
}
/**
* This border is used in Toolbar buttons as inner border.
*/
static class RolloverMarginBorder extends AbstractBorder
{
/** The borders insets. */
protected static Insets borderInsets = new Insets(3, 3, 3, 3);
/**
* Creates a new instance of RolloverBorder.
*/
public RolloverMarginBorder()
{
}
/**
* Returns the insets of the RolloverBorder.
*
* @param c the component for which the border is used
*
* @return the insets of the RolloverBorder
*/
public Insets getBorderInsets(Component c)
{
return getBorderInsets(c, null);
}
/**
* Returns the insets of the RolloverMarginBorder in the specified
* Insets object.
*
* @param c the component for which the border is used
* @param newInsets the insets object where to put the values
*
* @return the insets of the RolloverMarginBorder
*/
public Insets getBorderInsets(Component c, Insets newInsets)
{
if (newInsets == null)
newInsets = new Insets(0, 0, 0, 0);
AbstractButton b = (AbstractButton) c;
Insets margin = b.getMargin();
newInsets.bottom = borderInsets.bottom;
newInsets.left = borderInsets.left;
newInsets.right = borderInsets.right;
newInsets.top = borderInsets.top;
return newInsets;
}
}
/**
* A border implementation for popup menus.
*/
public static class PopupMenuBorder
extends AbstractBorder
implements UIResource
{
/** The border's insets. */
protected static Insets borderInsets = new Insets(2, 2, 1, 1);
/**
* Constructs a new PopupMenuBorder.
*/
public PopupMenuBorder()
{
}
/**
* Returns the insets of the border, creating a new Insets instance
* with each call.
*
* @param c the component for which we return the border insets
* (not used here)
*/
public Insets getBorderInsets(Component c)
{
return getBorderInsets(c, null);
}
/**
* Returns the insets of the border, using the supplied Insets instance.
*
* @param c the component for which we return the border insets
* (not used here)
* @param i the Insets instance to fill with the Insets values
*/
public Insets getBorderInsets(Component c, Insets i)
{
Insets insets;
if (i == null)
insets = new Insets(borderInsets.top, borderInsets.left,
borderInsets.bottom, borderInsets.right);
else
{
insets = i;
insets.top = borderInsets.top;
insets.left = borderInsets.left;
insets.bottom = borderInsets.bottom;
insets.right = borderInsets.right;
}
return insets;
}
/**
* Paints the border for component <code>c</code> using the
* Graphics context <code>g</code> with the dimension
* <code>x, y, w, h</code>.
*
* @param c the component for which we paint the border
* @param g the Graphics context to use
* @param x the X coordinate of the upper left corner of c
* @param y the Y coordinate of the upper left corner of c
* @param w the width of c
* @param h the height of c
*/
public void paintBorder(Component c, Graphics g, int x, int y, int w,
int h)
{
Color darkShadow = MetalLookAndFeel.getPrimaryControlDarkShadow();
Color light = MetalLookAndFeel.getPrimaryControlHighlight();
// draw dark outer border
g.setColor(darkShadow);
g.drawRect(x, y, w - 1, h - 1);
// draw highlighted inner border (only top and left)
g.setColor(light);
g.drawLine(x + 1, y + 1, x + 1, y + h - 2);
g.drawLine(x + 1, y + 1, x + w - 2, y + 1);
}
}
/**
* Returns a border for Swing buttons in the Metal Look &amp; Feel.
......@@ -182,24 +326,42 @@ public class MetalBorders
*/
public static Border getButtonBorder()
{
Border outer = new MetalButtonBorder();
Border inner = getMarginBorder();
return new BorderUIResource.CompoundBorderUIResource(outer, inner);
if (buttonBorder == null)
{
Border outer = new MetalButtonBorder();
Border inner = getMarginBorder();
buttonBorder = new BorderUIResource.CompoundBorderUIResource
(outer, inner);
}
return buttonBorder;
}
/**
* Returns a shared MarginBorder.
* Returns a border for Toolbar buttons in the Metal Look &amp; Feel.
*
* @return a border for Toolbar buttons in the Metal Look &amp; Feel
*/
static Border getMarginBorder() // intentionally not public
static Border getToolbarButtonBorder()
{
/* Swing is not designed to be thread-safe, so there is no
* need to synchronize the access to the global variable.
*/
if (sharedMarginBorder == null)
sharedMarginBorder = new BasicBorders.MarginBorder();
return sharedMarginBorder;
if (toolbarButtonBorder == null)
{
Border outer = new MetalButtonBorder();
Border inner = new RolloverMarginBorder();
toolbarButtonBorder = new BorderUIResource.CompoundBorderUIResource
(outer, inner);
}
return toolbarButtonBorder;
}
/**
* Returns a shared instance of {@link BasicBorders.MarginBorder}.
*
* @return a shared instance of {@link BasicBorders.MarginBorder}
*/
static Border getMarginBorder()
{
if (marginBorder == null)
marginBorder = new BasicBorders.MarginBorder();
return marginBorder;
}
}
......@@ -40,6 +40,7 @@ package javax.swing.plaf.metal;
import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.JToolBar;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
......@@ -92,6 +93,9 @@ public class MetalButtonUI
UIDefaults defaults = UIManager.getLookAndFeelDefaults();
button.setFont(defaults.getFont("Button.font"));
if (button.getParent() instanceof JToolBar)
button.setBorder(MetalBorders.getToolbarButtonBorder());
}
}
......@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.metal;
import java.util.HashMap;
import javax.swing.JComponent;
import javax.swing.JInternalFrame;
import javax.swing.plaf.ComponentUI;
......@@ -47,9 +49,8 @@ public class MetalInternalFrameUI
extends BasicInternalFrameUI
{
// FIXME: maybe replace by a Map of instances when this becomes stateful
/** The shared UI instance for JInternalFrames */
private static MetalInternalFrameUI instance = null;
/** The instances of MetalInternalFrameUI*/
private static HashMap instances;
/**
* Constructs a new instance of MetalInternalFrameUI.
......@@ -68,8 +69,20 @@ public class MetalInternalFrameUI
*/
public static ComponentUI createUI(JComponent component)
{
if (instance == null)
instance = new MetalInternalFrameUI((JInternalFrame) component);
if (instances == null)
instances = new HashMap();
Object o = instances.get(component);
MetalInternalFrameUI instance;
if (o == null)
{
instance = new MetalInternalFrameUI((JInternalFrame) component);
instances.put(component, instance);
}
else
instance = (MetalInternalFrameUI) o;
return instance;
}
}
......@@ -449,6 +449,9 @@ public class MetalLookAndFeel extends BasicLookAndFeel
* </tr><tr>
* <td>ScrollBar.background</td><td>0xcccccc</td>
* </tr><tr>
* <td>PopupMenu.border</td>
* <td><code>new javax.swing.plaf.metal.MetalBorders.PopupMenuBorder()</td>
* </tr><tr>
* </table>
*
* @param defaults the UIDefaults instance to which the values are added
......@@ -472,9 +475,13 @@ public class MetalLookAndFeel extends BasicLookAndFeel
"Label.background", new ColorUIResource(getControl()),
"Label.font", getControlTextFont(),
"Menu.background", new ColorUIResource(getControl()),
"Menu.font", getControlTextFont(),
"MenuBar.background", new ColorUIResource(getControl()),
"MenuBar.font", getControlTextFont(),
"MenuItem.background", new ColorUIResource(getControl()),
"ScrollBar.background", new ColorUIResource(getControl())
"MenuItem.font", getControlTextFont(),
"ScrollBar.background", new ColorUIResource(getControl()),
"PopupMenu.border", new MetalBorders.PopupMenuBorder()
};
defaults.putDefaults(myDefaults);
}
......
......@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.metal;
import java.util.HashMap;
import javax.swing.JComponent;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicScrollBarUI;
......@@ -48,7 +50,7 @@ public class MetalScrollBarUI
// FIXME: maybe replace by a Map of instances when this becomes stateful
/** The shared UI instance for JScrollBars. */
private static MetalScrollBarUI instance = null;
private static HashMap instances = null;
/**
* Constructs a new instance of MetalScrollBarUI.
......@@ -67,8 +69,19 @@ public class MetalScrollBarUI
*/
public static ComponentUI createUI(JComponent component)
{
if (instance == null)
instance = new MetalScrollBarUI();
if (instances == null)
instances = new HashMap();
Object o = instances.get(component);
MetalScrollBarUI instance;
if (o == null)
{
instance = new MetalScrollBarUI();
instances.put(component, instance);
}
else
instance = (MetalScrollBarUI) o;
return instance;
}
}
......@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.metal;
import java.util.HashMap;
import javax.swing.JComponent;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicSliderUI;
......@@ -46,9 +48,8 @@ public class MetalSliderUI
extends BasicSliderUI
{
// FIXME: maybe replace by a Map of instances when this becomes stateful
/** The shared UI instance for MetalSliderUIs */
private static MetalSliderUI instance = null;
/** The UI instances for MetalSliderUIs */
private static HashMap instances;
/**
* Constructs a new instance of MetalSliderUI.
......@@ -67,8 +68,20 @@ public class MetalSliderUI
*/
public static ComponentUI createUI(JComponent component)
{
if (instance == null)
instance = new MetalSliderUI();
if (instances == null)
instances = new HashMap();
Object o = instances.get(component);
MetalSliderUI instance;
if (o == null)
{
instance = new MetalSliderUI();
instances.put(component, instance);
}
else
instance = (MetalSliderUI) o;
return instance;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment