synthscrollpaneui.java
来自「java jdk 1.4的源码」· Java 代码 · 共 994 行 · 第 1/3 页
JAVA
994 行
/* * @(#)SynthScrollPaneUI.java 1.10 03/05/05 * * 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 javax.swing.*;import javax.swing.event.*;import javax.swing.border.*;import javax.swing.plaf.*;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeEvent;import java.awt.Component;import java.awt.Container;import java.awt.LayoutManager;import java.awt.Rectangle;import java.awt.Dimension;import java.awt.Point;import java.awt.Insets;import java.awt.Graphics;import java.awt.event.*;import java.io.Serializable;import java.awt.Toolkit;/** * A default L&F implementation of ScrollPaneUI. * * @version 1.10, 05/05/03 (based on BasicScrollPaneUI v 1.65) * @author Hans Muller */class SynthScrollPaneUI extends ScrollPaneUI implements ScrollPaneConstants, SynthUI{ private SynthStyle style; protected JScrollPane scrollpane; protected ChangeListener vsbChangeListener; protected ChangeListener hsbChangeListener; protected ChangeListener viewportChangeListener; protected PropertyChangeListener spPropertyChangeListener; private MouseWheelListener mouseScrollListener; /** * PropertyChangeListener installed on the vertical scrollbar. */ private PropertyChangeListener vsbPropertyChangeListener; /** * PropertyChangeListener installed on the horizontal scrollbar. */ private PropertyChangeListener hsbPropertyChangeListener; /** * The default implementation of createHSBPropertyChangeListener and * createVSBPropertyChangeListener share the PropertyChangeListener, which * is this ivar. */ private PropertyChangeListener sbPropertyChangeListener; /** * State flag that shows whether setValue() was called from a user program * before the value of "extent" was set in right-to-left component * orientation. */ private boolean setValueCalled = false; public static ComponentUI createUI(JComponent x) { return new SynthScrollPaneUI(); } public static void loadActionMap(ActionMap map) { // NOTE: this needs to remain static. If you have a need to // have Actions that reference the UI in the ActionMap, // then you'll also need to change the registeration of the // ActionMap. map.put("scrollUp", new ScrollAction("scrollUp", SwingConstants. VERTICAL, -1, true)); map.put("scrollDown", new ScrollAction("scrollDown", SwingConstants.VERTICAL, 1, true)); map.put("scrollHome", new ScrollHomeAction("ScrollHome")); map.put("scrollEnd", new ScrollEndAction("ScrollEnd")); map.put("unitScrollUp", new ScrollAction ("UnitScrollUp", SwingConstants.VERTICAL, -1,false)); map.put("unitScrollDown", new ScrollAction ("UnitScrollDown", SwingConstants.VERTICAL, 1, false)); // PENDING: this is currently broke, the actions should do // the necessary mapping and not require us to reregister the actions. // In order to reregister actions we would have to make this // a per component action map. map.put("scrollLeft", new ScrollAction("scrollLeft", SwingConstants.HORIZONTAL, -1, true)); map.put("scrollRight", new ScrollAction("ScrollRight", SwingConstants.HORIZONTAL, 1, true)); map.put("unitScrollRight", new ScrollAction ("UnitScrollRight", SwingConstants.HORIZONTAL, 1, false)); map.put("unitScrollLeft", new ScrollAction ("UnitScrollLeft", SwingConstants.HORIZONTAL, -1, false)); } 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) { Border vpBorder = scrollpane.getViewportBorder(); if (vpBorder != null) { Rectangle r = scrollpane.getViewportBorderBounds(); vpBorder.paintBorder(scrollpane, g, r.x, r.y, r.width, r.height); } } /** * @return null which indicates that the LayoutManager will compute the value * @see JComponent#getPreferredSize */ public Dimension getPreferredSize(JComponent c) { return null; } /** * @return the preferred size * @see #getPreferredSize */ public Dimension getMinimumSize(JComponent c) { return getPreferredSize(c); } /** * @return new Dimension(Short.MAX_VALUE, Short.MAX_VALUE) */ public Dimension getMaximumSize(JComponent c) { return new Dimension(Short.MAX_VALUE, Short.MAX_VALUE); } protected void installDefaults(JScrollPane scrollpane) { fetchStyle(scrollpane); } private void fetchStyle(JScrollPane c) { SynthContext context = getContext(c, ENABLED); SynthStyle oldStyle = style; style = SynthLookAndFeel.updateStyle(context, this); if (style != oldStyle) { Border vpBorder = scrollpane.getViewportBorder(); if ((vpBorder == null) ||( vpBorder instanceof UIResource)) { scrollpane.setViewportBorder(new ViewportBorder(context)); } } context.dispose(); } protected void installListeners(JScrollPane c) { vsbChangeListener = createVSBChangeListener(); vsbPropertyChangeListener = createVSBPropertyChangeListener(); hsbChangeListener = createHSBChangeListener(); hsbPropertyChangeListener = createHSBPropertyChangeListener(); viewportChangeListener = createViewportChangeListener(); spPropertyChangeListener = createPropertyChangeListener(); JViewport viewport = scrollpane.getViewport(); JScrollBar vsb = scrollpane.getVerticalScrollBar(); JScrollBar hsb = scrollpane.getHorizontalScrollBar(); if (viewport != null) { viewport.addChangeListener(viewportChangeListener); } if (vsb != null) { vsb.getModel().addChangeListener(vsbChangeListener); vsb.addPropertyChangeListener(vsbPropertyChangeListener); } if (hsb != null) { hsb.getModel().addChangeListener(hsbChangeListener); hsb.addPropertyChangeListener(hsbPropertyChangeListener); } scrollpane.addPropertyChangeListener(spPropertyChangeListener); mouseScrollListener = createMouseWheelListener(); scrollpane.addMouseWheelListener(mouseScrollListener); } protected void installKeyboardActions(JScrollPane c) { InputMap inputMap = getInputMap(JComponent. WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); SwingUtilities.replaceUIInputMap(c, JComponent. WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap); LazyActionMap.installLazyActionMap(c, SynthScrollPaneUI.class, "ScrollPane.actionMap"); } InputMap getInputMap(int condition) { if (condition == JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) { SynthContext context = getContext(scrollpane, ENABLED); SynthStyle style = context.getStyle(); InputMap keyMap = (InputMap)style.get(context, "ScrollPane.ancestorInputMap"); InputMap rtlKeyMap; if (!scrollpane.getComponentOrientation().isLeftToRight() && ((rtlKeyMap = (InputMap)style.get(context, "ScrollPane.ancestorInputMap.RightToLeft")) != null)) { rtlKeyMap.setParent(keyMap); keyMap = rtlKeyMap; } context.dispose(); return keyMap; } return null; } public void installUI(JComponent x) { scrollpane = (JScrollPane)x; installDefaults(scrollpane); installListeners(scrollpane); installKeyboardActions(scrollpane); } protected void uninstallDefaults(JScrollPane c) { SynthContext context = getContext(c, ENABLED); style.uninstallDefaults(context); context.dispose(); if (scrollpane.getViewportBorder() instanceof UIResource) { scrollpane.setViewportBorder(null); } } protected void uninstallListeners(JComponent c) { JViewport viewport = scrollpane.getViewport(); JScrollBar vsb = scrollpane.getVerticalScrollBar(); JScrollBar hsb = scrollpane.getHorizontalScrollBar(); if (viewport != null) { viewport.removeChangeListener(viewportChangeListener); } if (vsb != null) { vsb.getModel().removeChangeListener(vsbChangeListener); vsb.removePropertyChangeListener(vsbPropertyChangeListener); } if (hsb != null) { hsb.getModel().removeChangeListener(hsbChangeListener); hsb.removePropertyChangeListener(hsbPropertyChangeListener); } scrollpane.removePropertyChangeListener(spPropertyChangeListener); if (mouseScrollListener != null) { scrollpane.removeMouseWheelListener(mouseScrollListener); } vsbChangeListener = null; hsbChangeListener = null; viewportChangeListener = null; spPropertyChangeListener = null; mouseScrollListener = null; } protected void uninstallKeyboardActions(JScrollPane c) { SwingUtilities.replaceUIActionMap(c, null); SwingUtilities.replaceUIInputMap(c, JComponent. WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, null); } public void uninstallUI(JComponent c) { uninstallDefaults(scrollpane); uninstallListeners(scrollpane); uninstallKeyboardActions(scrollpane); scrollpane = null; } public SynthContext getContext(JComponent c) { return getContext(c, getComponentState(c)); } public SynthContext getContext(JComponent c, Region region) { return SynthContext.getContext(SynthContext.class, c, region, style, getComponentState(c)); } private SynthContext getContext(JComponent c, int state) { return SynthContext.getContext(SynthContext.class, c, SynthLookAndFeel.getRegion(c), style, state); } private Region getRegion(JComponent c) { return SynthLookAndFeel.getRegion(c); } private int getComponentState(JComponent c) { return SynthLookAndFeel.getComponentState(c); } protected void syncScrollPaneWithViewport() {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?