windowsscrollbarui.java
来自「JAVA 所有包」· Java 代码 · 共 462 行 · 第 1/2 页
JAVA
462 行
/* * @(#)WindowsScrollBarUI.java 1.25 06/08/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.java.swing.plaf.windows;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import java.lang.ref.*;import java.util.*;import javax.swing.plaf.basic.*;import javax.swing.*;import javax.swing.plaf.ComponentUI;import static com.sun.java.swing.plaf.windows.TMSchema.*;import static com.sun.java.swing.plaf.windows.XPStyle.Skin;/** * Windows rendition of the component. * <p> * <strong>Warning:</strong> * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is appropriate * for short term storage or RMI between applications running the same * version of Swing. A future release of Swing will provide support for * long term persistence. */public class WindowsScrollBarUI extends BasicScrollBarUI { private Grid thumbGrid; private Grid highlightGrid; /** * Creates a UI for a JScrollBar. * * @param c the text field * @return the UI */ public static ComponentUI createUI(JComponent c) { return new WindowsScrollBarUI(); } protected void installDefaults() { super.installDefaults(); if (XPStyle.getXP() != null) { scrollbar.setBorder(null); } } public void uninstallUI(JComponent c) { super.uninstallUI(c); thumbGrid = highlightGrid = null; } protected void configureScrollBarColors() { super.configureScrollBarColors(); Color color = UIManager.getColor("ScrollBar.trackForeground"); if (color != null && trackColor != null) { thumbGrid = Grid.getGrid(color, trackColor); } color = UIManager.getColor("ScrollBar.trackHighlightForeground"); if (color != null && trackHighlightColor != null) { highlightGrid = Grid.getGrid(color, trackHighlightColor); } } protected JButton createDecreaseButton(int orientation) { return new WindowsArrowButton(orientation, UIManager.getColor("ScrollBar.thumb"), UIManager.getColor("ScrollBar.thumbShadow"), UIManager.getColor("ScrollBar.thumbDarkShadow"), UIManager.getColor("ScrollBar.thumbHighlight")); } protected JButton createIncreaseButton(int orientation) { return new WindowsArrowButton(orientation, UIManager.getColor("ScrollBar.thumb"), UIManager.getColor("ScrollBar.thumbShadow"), UIManager.getColor("ScrollBar.thumbDarkShadow"), UIManager.getColor("ScrollBar.thumbHighlight")); } /** * {@inheritDoc} * @since 1.6 */ @Override protected ArrowButtonListener createArrowButtonListener(){ // we need to repaint the entire scrollbar because state change for each // button causes a state change for the thumb and other button on Vista if(XPStyle.isVista()) { return new ArrowButtonListener() { public void mouseEntered(MouseEvent evt) { repaint(); super.mouseEntered(evt); } public void mouseExited(MouseEvent evt) { repaint(); super.mouseExited(evt); } private void repaint() { scrollbar.repaint(); } }; } else { return super.createArrowButtonListener(); } } protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds){ boolean v = (scrollbar.getOrientation() == JScrollBar.VERTICAL); XPStyle xp = XPStyle.getXP(); if (xp != null) { JScrollBar sb = (JScrollBar)c; State state = State.NORMAL; // Pending: Implement rollover (hot) and pressed if (!sb.isEnabled()) { state = State.DISABLED; } Part part = v ? Part.SBP_LOWERTRACKVERT : Part.SBP_LOWERTRACKHORZ; xp.getSkin(sb, part).paintSkin(g, trackBounds, state); } else if (thumbGrid == null) { super.paintTrack(g, c, trackBounds); } else { thumbGrid.paint(g, trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height); if (trackHighlight == DECREASE_HIGHLIGHT) { paintDecreaseHighlight(g); } else if (trackHighlight == INCREASE_HIGHLIGHT) { paintIncreaseHighlight(g); } } } protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { boolean v = (scrollbar.getOrientation() == JScrollBar.VERTICAL); XPStyle xp = XPStyle.getXP(); if (xp != null) { JScrollBar sb = (JScrollBar)c; State state = State.NORMAL; if (!sb.isEnabled()) { state = State.DISABLED; } else if (isDragging) { state = State.PRESSED; } else if (isThumbRollover()) { state = State.HOT; } else if (XPStyle.isVista()) { if ((incrButton != null && incrButton.getModel().isRollover()) || (decrButton != null && decrButton.getModel().isRollover())) { state = State.HOVER; } } // Paint thumb Part thumbPart = v ? Part.SBP_THUMBBTNVERT : Part.SBP_THUMBBTNHORZ; xp.getSkin(sb, thumbPart).paintSkin(g, thumbBounds, state); // Paint gripper Part gripperPart = v ? Part.SBP_GRIPPERVERT : Part.SBP_GRIPPERHORZ; Skin skin = xp.getSkin(sb, gripperPart); Insets gripperInsets = xp.getMargin(c, thumbPart, null, Prop.CONTENTMARGINS); if (gripperInsets == null || (v && (thumbBounds.height - gripperInsets.top - gripperInsets.bottom >= skin.getHeight())) || (!v && (thumbBounds.width - gripperInsets.left - gripperInsets.right >= skin.getWidth()))) { skin.paintSkin(g, thumbBounds.x + (thumbBounds.width - skin.getWidth()) / 2, thumbBounds.y + (thumbBounds.height - skin.getHeight()) / 2, skin.getWidth(), skin.getHeight(), state); } } else { super.paintThumb(g, c, thumbBounds); } } protected void paintDecreaseHighlight(Graphics g) { if (highlightGrid == null) { super.paintDecreaseHighlight(g); } else { Insets insets = scrollbar.getInsets(); Rectangle thumbR = getThumbBounds(); int x, y, w, h; if (scrollbar.getOrientation() == JScrollBar.VERTICAL) { x = insets.left; y = decrButton.getY() + decrButton.getHeight(); w = scrollbar.getWidth() - (insets.left + insets.right); h = thumbR.y - y; } else { x = decrButton.getX() + decrButton.getHeight(); y = insets.top; w = thumbR.x - x; h = scrollbar.getHeight() - (insets.top + insets.bottom); } highlightGrid.paint(g, x, y, w, h); } } protected void paintIncreaseHighlight(Graphics g) { if (highlightGrid == null) { super.paintDecreaseHighlight(g); } else { Insets insets = scrollbar.getInsets(); Rectangle thumbR = getThumbBounds(); int x, y, w, h; if (scrollbar.getOrientation() == JScrollBar.VERTICAL) { x = insets.left; y = thumbR.y + thumbR.height; w = scrollbar.getWidth() - (insets.left + insets.right); h = incrButton.getY() - y; } else { x = thumbR.x + thumbR.width; y = insets.top; w = incrButton.getX() - x; h = scrollbar.getHeight() - (insets.top + insets.bottom);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?