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 + -
显示快捷键?