FileDocCategorySizeDatePackage
BasicButtonUI.javaAPI DocJava SE 6 API14941Tue Jun 10 00:26:46 BST 2008javax.swing.plaf.basic

BasicButtonUI

public class BasicButtonUI extends ButtonUI
BasicButton implementation
version
1.118 07/20/06
author
Jeff Dinkins

Fields Summary
private static final BasicButtonUI
buttonUI
protected int
defaultTextIconGap
private int
shiftOffset
protected int
defaultTextShiftOffset
private static final String
propertyPrefix
private static Rectangle
viewRect
private static Rectangle
textRect
private static Rectangle
iconRect
Constructors Summary
Methods Summary
protected voidclearTextShiftOffset()

        this.shiftOffset = 0;
    
protected javax.swing.plaf.basic.BasicButtonListenercreateButtonListener(javax.swing.AbstractButton b)

        return new BasicButtonListener(b);
    
public static javax.swing.plaf.ComponentUIcreateUI(javax.swing.JComponent c)


    // ********************************
    //          Create PLAF
    // ********************************
         
        return buttonUI;
    
public intgetBaseline(javax.swing.JComponent c, int width, int height)
Returns the baseline.

throws
NullPointerException {@inheritDoc}
throws
IllegalArgumentException {@inheritDoc}
see
javax.swing.JComponent#getBaseline(int, int)
since
1.6

        super.getBaseline(c, width, height);
        AbstractButton b = (AbstractButton)c;
        String text = b.getText();
        if (text == null || "".equals(text)) {
            return -1;
        }
        FontMetrics fm = b.getFontMetrics(b.getFont());
        layout(b, fm, width, height);
        return BasicHTML.getBaseline(b, textRect.y, fm.getAscent(),
                                     textRect.width, textRect.height);
    
public java.awt.Component$BaselineResizeBehaviorgetBaselineResizeBehavior(javax.swing.JComponent c)
Returns an enum indicating how the baseline of the component changes as the size changes.

throws
NullPointerException {@inheritDoc}
see
javax.swing.JComponent#getBaseline(int, int)
since
1.6

        super.getBaselineResizeBehavior(c);
        if (c.getClientProperty(BasicHTML.propertyKey) != null) {
            return Component.BaselineResizeBehavior.OTHER;
        }
        switch(((AbstractButton)c).getVerticalAlignment()) {
        case AbstractButton.TOP:
            return Component.BaselineResizeBehavior.CONSTANT_ASCENT;
        case AbstractButton.BOTTOM:
            return Component.BaselineResizeBehavior.CONSTANT_DESCENT;
        case AbstractButton.CENTER:
            return Component.BaselineResizeBehavior.CENTER_OFFSET;
        }
        return Component.BaselineResizeBehavior.OTHER;
    
private javax.swing.plaf.basic.BasicButtonListenergetButtonListener(javax.swing.AbstractButton b)
Returns the ButtonListener for the passed in Button, or null if one could not be found.

        MouseMotionListener[] listeners = b.getMouseMotionListeners();

        if (listeners != null) {
            for (int counter = 0; counter < listeners.length; counter++) {
                if (listeners[counter] instanceof BasicButtonListener) {
                    return (BasicButtonListener)listeners[counter];
                }
            }
        }
        return null;
    
public intgetDefaultTextIconGap(javax.swing.AbstractButton b)

        return defaultTextIconGap;
    
public java.awt.DimensiongetMaximumSize(javax.swing.JComponent c)

        Dimension d = getPreferredSize(c);
	View v = (View) c.getClientProperty(BasicHTML.propertyKey);
	if (v != null) {
	    d.width += v.getMaximumSpan(View.X_AXIS) - v.getPreferredSpan(View.X_AXIS);
	}
	return d;
    
public java.awt.DimensiongetMinimumSize(javax.swing.JComponent c)

        Dimension d = getPreferredSize(c);
	View v = (View) c.getClientProperty(BasicHTML.propertyKey);
	if (v != null) {
	    d.width -= v.getPreferredSpan(View.X_AXIS) - v.getMinimumSpan(View.X_AXIS);
	}
	return d;
    
public java.awt.DimensiongetPreferredSize(javax.swing.JComponent c)

        AbstractButton b = (AbstractButton)c;
        return BasicGraphicsUtils.getPreferredButtonSize(b, b.getIconTextGap());
    
protected java.lang.StringgetPropertyPrefix()

        return propertyPrefix;
    
protected intgetTextShiftOffset()

        return shiftOffset;
    
protected voidinstallDefaults(javax.swing.AbstractButton b)

        // load shared instance defaults
        String pp = getPropertyPrefix();

        defaultTextShiftOffset = UIManager.getInt(pp + "textShiftOffset");

        // set the following defaults on the button
        if (b.isContentAreaFilled()) {
            LookAndFeel.installProperty(b, "opaque", Boolean.TRUE);
        } else {
            LookAndFeel.installProperty(b, "opaque", Boolean.FALSE);
        }

        if(b.getMargin() == null || (b.getMargin() instanceof UIResource)) {
            b.setMargin(UIManager.getInsets(pp + "margin"));
        }

	LookAndFeel.installColorsAndFont(b, pp + "background",
                                         pp + "foreground", pp + "font");
        LookAndFeel.installBorder(b, pp + "border");

        Object rollover = UIManager.get(pp + "rollover");
        if (rollover != null) {
            LookAndFeel.installProperty(b, "rolloverEnabled", rollover);
        }

        LookAndFeel.installProperty(b, "iconTextGap", new Integer(4));
    
protected voidinstallKeyboardActions(javax.swing.AbstractButton b)

        BasicButtonListener listener = getButtonListener(b);

        if(listener != null) {
            listener.installKeyboardActions(b);
        }
    
protected voidinstallListeners(javax.swing.AbstractButton b)

        BasicButtonListener listener = createButtonListener(b);
        if(listener != null) {
            b.addMouseListener(listener);
            b.addMouseMotionListener(listener);
            b.addFocusListener(listener);
            b.addPropertyChangeListener(listener);
            b.addChangeListener(listener);
        }
    
public voidinstallUI(javax.swing.JComponent c)

        installDefaults((AbstractButton) c);
        installListeners((AbstractButton) c);
        installKeyboardActions((AbstractButton) c);
	BasicHTML.updateRenderer(c, ((AbstractButton) c).getText());
    
private java.lang.Stringlayout(javax.swing.AbstractButton b, java.awt.FontMetrics fm, int width, int height)

        Insets i = b.getInsets();
        viewRect.x = i.left;
        viewRect.y = i.top;
        viewRect.width = width - (i.right + viewRect.x);
        viewRect.height = height - (i.bottom + viewRect.y);

        textRect.x = textRect.y = textRect.width = textRect.height = 0;
        iconRect.x = iconRect.y = iconRect.width = iconRect.height = 0;

        // layout the text and icon
        return SwingUtilities.layoutCompoundLabel(
            b, fm, b.getText(), b.getIcon(), 
            b.getVerticalAlignment(), b.getHorizontalAlignment(),
            b.getVerticalTextPosition(), b.getHorizontalTextPosition(),
            viewRect, iconRect, textRect, 
            b.getText() == null ? 0 : b.getIconTextGap());
    
public voidpaint(java.awt.Graphics g, javax.swing.JComponent c)


    // ********************************
    //          Paint Methods
    // ********************************

          
    
        AbstractButton b = (AbstractButton) c;
        ButtonModel model = b.getModel();

        String text = layout(b, SwingUtilities2.getFontMetrics(b, g),
               b.getWidth(), b.getHeight());

        clearTextShiftOffset();

        // perform UI specific press action, e.g. Windows L&F shifts text
        if (model.isArmed() && model.isPressed()) {
            paintButtonPressed(g,b); 
        }

        // Paint the Icon
        if(b.getIcon() != null) { 
            paintIcon(g,c,iconRect);
        }

        if (text != null && !text.equals("")){
	    View v = (View) c.getClientProperty(BasicHTML.propertyKey);
	    if (v != null) {
		v.paint(g, textRect);
	    } else {
		paintText(g, b, textRect, text);
	    }
        }

        if (b.isFocusPainted() && b.hasFocus()) {
            // paint UI specific focus
            paintFocus(g,b,viewRect,textRect,iconRect);
        }
    
protected voidpaintButtonPressed(java.awt.Graphics g, javax.swing.AbstractButton b)

    
protected voidpaintFocus(java.awt.Graphics g, javax.swing.AbstractButton b, java.awt.Rectangle viewRect, java.awt.Rectangle textRect, java.awt.Rectangle iconRect)

    
protected voidpaintIcon(java.awt.Graphics g, javax.swing.JComponent c, java.awt.Rectangle iconRect)

            AbstractButton b = (AbstractButton) c;                           
            ButtonModel model = b.getModel();
            Icon icon = b.getIcon();
            Icon tmpIcon = null;

	    if(icon == null) {
	       return;
	    }

            Icon selectedIcon = null;

            /* the fallback icon should be based on the selected state */
            if (model.isSelected()) {
                selectedIcon = (Icon) b.getSelectedIcon();
                if (selectedIcon != null) {
                    icon = selectedIcon;
                }
            }

            if(!model.isEnabled()) {
		if(model.isSelected()) {
                   tmpIcon = (Icon) b.getDisabledSelectedIcon();
                   if (tmpIcon == null) {
                       tmpIcon = selectedIcon;
                   }
                }

                if (tmpIcon == null) {
                    tmpIcon = (Icon) b.getDisabledIcon();
                }
            } else if(model.isPressed() && model.isArmed()) {
                tmpIcon = (Icon) b.getPressedIcon();
                if(tmpIcon != null) {
                    // revert back to 0 offset
                    clearTextShiftOffset();
                }
            } else if(b.isRolloverEnabled() && model.isRollover()) {
		if(model.isSelected()) {
                   tmpIcon = (Icon) b.getRolloverSelectedIcon();
                   if (tmpIcon == null) {
                       tmpIcon = selectedIcon;
                   }
                }

                if (tmpIcon == null) {
                    tmpIcon = (Icon) b.getRolloverIcon();
                }
            }
              
	    if(tmpIcon != null) {
	        icon = tmpIcon;
	    }
               
            if(model.isPressed() && model.isArmed()) {
                icon.paintIcon(c, g, iconRect.x + getTextShiftOffset(),
                        iconRect.y + getTextShiftOffset());
            } else {
                icon.paintIcon(c, g, iconRect.x, iconRect.y);
            }

    
protected voidpaintText(java.awt.Graphics g, javax.swing.JComponent c, java.awt.Rectangle textRect, java.lang.String text)
As of Java 2 platform v 1.4 this method should not be used or overriden. Use the paintText method which takes the AbstractButton argument.

        AbstractButton b = (AbstractButton) c;                       
        ButtonModel model = b.getModel();
        FontMetrics fm = SwingUtilities2.getFontMetrics(c, g);
        int mnemonicIndex = b.getDisplayedMnemonicIndex();

	/* Draw the Text */
	if(model.isEnabled()) {
	    /*** paint the text normally */
	    g.setColor(b.getForeground());
	    SwingUtilities2.drawStringUnderlineCharAt(c, g,text, mnemonicIndex,
					  textRect.x + getTextShiftOffset(),
					  textRect.y + fm.getAscent() + getTextShiftOffset());
	}
	else {
	    /*** paint the text disabled ***/
	    g.setColor(b.getBackground().brighter());
	    SwingUtilities2.drawStringUnderlineCharAt(c, g,text, mnemonicIndex,
					  textRect.x, textRect.y + fm.getAscent());
	    g.setColor(b.getBackground().darker());
	    SwingUtilities2.drawStringUnderlineCharAt(c, g,text, mnemonicIndex,
					  textRect.x - 1, textRect.y + fm.getAscent() - 1);
	}
    
protected voidpaintText(java.awt.Graphics g, javax.swing.AbstractButton b, java.awt.Rectangle textRect, java.lang.String text)
Method which renders the text of the current button.

param
g Graphics context
param
b Current button to render
param
textRect Bounding rectangle to render the text.
param
text String to render
since
1.4

	paintText(g, (JComponent)b, textRect, text);
    
protected voidsetTextShiftOffset()

        this.shiftOffset = defaultTextShiftOffset;
    
protected voiduninstallDefaults(javax.swing.AbstractButton b)

        LookAndFeel.uninstallBorder(b);
    
protected voiduninstallKeyboardActions(javax.swing.AbstractButton b)

        BasicButtonListener listener = getButtonListener(b);
        if(listener != null) {
            listener.uninstallKeyboardActions(b);
        }
    
protected voiduninstallListeners(javax.swing.AbstractButton b)

        BasicButtonListener listener = getButtonListener(b);
        if(listener != null) {
            b.removeMouseListener(listener);
            b.removeMouseMotionListener(listener);
            b.removeFocusListener(listener);
            b.removeChangeListener(listener);
            b.removePropertyChangeListener(listener);
        }
    
public voiduninstallUI(javax.swing.JComponent c)

        uninstallKeyboardActions((AbstractButton) c);
        uninstallListeners((AbstractButton) c);
        uninstallDefaults((AbstractButton) c);
	BasicHTML.updateRenderer(c, "");