synthbuttonui.java

来自「java jdk 1.4的源码」· Java 代码 · 共 390 行

JAVA
390
字号
/* * @(#)SynthButtonUI.java	1.16 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.java.swing.plaf.gtk; import java.awt.*;import java.awt.event.*;import java.io.Serializable;import javax.swing.*;import javax.swing.border.*;import java.awt.*;import java.awt.event.*;import javax.swing.plaf.ButtonUI;import javax.swing.plaf.basic.BasicHTML;import javax.swing.plaf.UIResource;import javax.swing.plaf.ComponentUI;import javax.swing.text.View;/** * Synth's ButtonUI, derives from BasicButtonUI 1.106. * * @version 1.16, 01/23/03 * @author Jeff Dinkins */class SynthButtonUI extends ButtonUI implements SynthUI {    /**     * The SkinsButtonListener is shared among all buttons.     */    private static SynthButtonListener sharedButtonListener;    private SynthStyle style;    /**     * Returns a ButtonUI implementation.     */    public static ComponentUI createUI(JComponent c) {        return new SynthButtonUI();    }    /**     * Returns the prefix used in looking up property values.     */    protected String getPropertyPrefix() {        return "Button.";    }    // ********************************    //          Install PLAF    // ********************************    public void installUI(JComponent c) {        installDefaults((AbstractButton)c);        installListeners((AbstractButton)c);        installKeyboardActions((AbstractButton)c);	BasicHTML.updateRenderer(c, ((AbstractButton) c).getText());    }    protected void installDefaults(AbstractButton b) {        fetchStyle(b);        b.setRolloverEnabled(true);    }    protected void installListeners(AbstractButton b) {        SynthButtonListener listener = createButtonListener(b);        if (listener != null) {            b.addMouseListener(listener);            b.addMouseMotionListener(listener);            b.addFocusListener(listener);            b.addPropertyChangeListener(listener);            b.addChangeListener(listener);        }    }        protected void installKeyboardActions(AbstractButton b) {        SynthButtonListener listener = getButtonListener(b);        if (listener != null) {            listener.installKeyboardActions(b);        }    }    void fetchStyle(AbstractButton b) {        SynthContext context = getContext(b, SynthConstants.ENABLED);        SynthStyle oldStyle = style;        style = SynthLookAndFeel.updateStyle(context, this);        if (style != oldStyle) {            if (b.getMargin() == null ||                                (b.getMargin() instanceof UIResource)) {                Insets margin = (Insets)style.get(context,getPropertyPrefix() +                                                  "margin");                if (margin == null) {                    // Some places assume margins are non-null.                    margin = SynthLookAndFeel.EMPTY_UIRESOURCE_INSETS;                }                b.setMargin(margin);            }            int iconTextGap = style.getInt(context, getPropertyPrefix() +                                           "iconTextGap", -1);            if (iconTextGap != -1) {                b.setIconTextGap(iconTextGap);            }            b.setContentAreaFilled(style.getBoolean(context,                            getPropertyPrefix() + "contentAreaFilled", true));        }        context.dispose();    }            // ********************************    //         Uninstall PLAF    // ********************************    public void uninstallUI(JComponent c) {        uninstallKeyboardActions((AbstractButton) c);        uninstallListeners((AbstractButton) c);        uninstallDefaults((AbstractButton) c);	BasicHTML.updateRenderer(c, "");    }    protected void uninstallKeyboardActions(AbstractButton b) {        SynthButtonListener listener = getButtonListener(b);        if (listener != null) {            listener.uninstallKeyboardActions(b);        }    }    protected void uninstallListeners(AbstractButton b) {        SynthButtonListener listener = getButtonListener(b);        if (listener != null) {            b.removeMouseListener(listener);            b.removeMouseListener(listener);            b.removeMouseMotionListener(listener);            b.removeFocusListener(listener);            b.removeChangeListener(listener);            b.removePropertyChangeListener(listener);        }    }    protected void uninstallDefaults(AbstractButton b) {        SynthContext context = getContext(b, ENABLED);        style.uninstallDefaults(context);        context.dispose();        style = null;    }    // ********************************    //        Create Listeners     // ********************************    protected SynthButtonListener createButtonListener(AbstractButton b) {        if (sharedButtonListener == null) {            sharedButtonListener = new SynthButtonListener();        }        return sharedButtonListener;    }    public SynthContext getContext(JComponent c) {        return getContext(c, getComponentState(c));    }    SynthContext getContext(JComponent c, int state) {        Region region = getRegion(c);        return SynthContext.getContext(SynthContext.class, c, region,                                       style, state);    }    private Region getRegion(JComponent c) {        return SynthLookAndFeel.getRegion(c);    }    /**     * Returns the current state of the passed in <code>AbstractButton</code>.     */    private int getComponentState(JComponent c) {        int state = ENABLED;        if (!c.isEnabled()) {            state = DISABLED;        }        ButtonModel model = ((AbstractButton)c).getModel();        if (model.isPressed()) {            if (model.isArmed()) {                state = PRESSED;            }            else {                state = MOUSE_OVER;            }        }        else if (model.isRollover()) {            state = MOUSE_OVER;        }        if (model.isSelected()) {            state |= SELECTED;        }        if (c.isFocusOwner()) {            state |= FOCUSED;        }        if ((c instanceof JButton) && ((JButton)c).isDefaultButton()) {            state |= DEFAULT;        }        return state;    }    // ********************************    //          Paint Methods    // ********************************    /**     * Notifies this UI delegate that it's time to paint the specified     * component.  This method is invoked by <code>JComponent</code>      * when the specified component is being painted.      * <p>If <code>c</code> is opaque, this will paint the background using     * the <code>GraphicsEngine</code> method <code>paintBackground</code>.     */    public void update(Graphics g, JComponent c) {        SynthContext context = getContext(c);        SynthLookAndFeel.update(context, g);        paint(context, g);        context.dispose();    }    public void paint(Graphics g, JComponent c) {        SynthContext context = getContext(c);        paint(context, g);        context.dispose();    }    protected void paint(SynthContext context, Graphics g) {        AbstractButton b = (AbstractButton)context.getComponent();        g.setColor(context.getStyle().getColor(context,                                               ColorType.TEXT_FOREGROUND));        g.setFont(style.getFont(context));        context.getStyle().getSynthGraphics(context).paintText(            context, g, b.getText(), getIcon(b),            b.getHorizontalAlignment(), b.getVerticalAlignment(),            b.getHorizontalTextPosition(), b.getVerticalTextPosition(),            b.getIconTextGap(), b.getDisplayedMnemonicIndex(),            getTextShiftOffset(context));    }    /**     * Returns the Icon to use in painting the button.     */    protected Icon getIcon(AbstractButton b) {        Icon icon = b.getIcon();        if (icon == null) {            return null;        }        ButtonModel model = b.getModel();        Icon tmpIcon = null;        if (!model.isEnabled()) {            if (model.isSelected()) {                tmpIcon = b.getDisabledSelectedIcon();            } else {                tmpIcon = b.getDisabledIcon();            }        } else if (model.isPressed() && model.isArmed()) {            tmpIcon = b.getPressedIcon();            if (tmpIcon == null) {                tmpIcon = b.getSelectedIcon();            }        } else if (b.isRolloverEnabled() && model.isRollover()) {            if (model.isSelected()) {                tmpIcon = b.getRolloverSelectedIcon();                if (tmpIcon == null) {                    tmpIcon = b.getSelectedIcon();                }            } else {                tmpIcon = b.getRolloverIcon();            }        } else if (model.isSelected()) {            tmpIcon = b.getSelectedIcon();        }        if (tmpIcon != null) {            icon = tmpIcon;        }        return icon;    }    /**     * Returns the amount to shift the text/icon when painting.     */    protected int getTextShiftOffset(SynthContext state) {        AbstractButton button = (AbstractButton)state.getComponent();        ButtonModel model = button.getModel();        if (model.isArmed() && model.isPressed() &&                               button.getPressedIcon() != null) {            int tso = state.getStyle().getInt(state, getPropertyPrefix() +                                              "textShiftOffset", -1);            if (tso != -1) {                return tso;            }        }        return 0;    }    // ********************************    //          Layout Methods    // ********************************    public Dimension getMinimumSize(JComponent c) {        if (c.getComponentCount() > 0 && c.getLayout() != null) {            return null;        }        AbstractButton b = (AbstractButton)c;        SynthContext ss = getContext(c);        Dimension size = ss.getStyle().getSynthGraphics(ss).getMinimumSize(               ss, ss.getStyle().getFont(ss), b.getText(), getSizingIcon(b),               b.getHorizontalAlignment(), b.getVerticalAlignment(),               b.getHorizontalTextPosition(),               b.getVerticalTextPosition(), b.getIconTextGap(),               b.getDisplayedMnemonicIndex());        ss.dispose();        return size;    }    public Dimension getPreferredSize(JComponent c) {        if (c.getComponentCount() > 0 && c.getLayout() != null) {            return null;        }        AbstractButton b = (AbstractButton)c;        SynthContext ss = getContext(c);        Dimension size = ss.getStyle().getSynthGraphics(ss).getPreferredSize(               ss, ss.getStyle().getFont(ss), b.getText(), getSizingIcon(b),               b.getHorizontalAlignment(), b.getVerticalAlignment(),               b.getHorizontalTextPosition(),               b.getVerticalTextPosition(), b.getIconTextGap(),               b.getDisplayedMnemonicIndex());        ss.dispose();        return size;    }    public Dimension getMaximumSize(JComponent c) {        if (c.getComponentCount() > 0 && c.getLayout() != null) {            return null;        }        AbstractButton b = (AbstractButton)c;        SynthContext ss = getContext(c);        Dimension size = ss.getStyle().getSynthGraphics(ss).getMaximumSize(               ss, ss.getStyle().getFont(ss), b.getText(), getSizingIcon(b),               b.getHorizontalAlignment(), b.getVerticalAlignment(),               b.getHorizontalTextPosition(),               b.getVerticalTextPosition(), b.getIconTextGap(),               b.getDisplayedMnemonicIndex());        ss.dispose();        return size;    }    /**     * Returns the Icon used in calculating the pref/min/max size.     */    protected Icon getSizingIcon(AbstractButton b) {        // NOTE: this is slightly different than BasicButtonUI, where it        // would just use getIcon, but this should be ok.        return (b.isEnabled()) ? b.getIcon() : b.getDisabledIcon();    }    /**     * Returns the SkinsButtonListener install on the passed in button.     */    private SynthButtonListener getButtonListener(AbstractButton b) {        return (SynthButtonListener)SynthLookAndFeel.getSynthEventListener(b);    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?