⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basicscrollpaneui.java

📁 java jdk 1.4的源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        return sbPropertyChangeListener;    }    protected ChangeListener createHSBChangeListener() {	return new HSBChangeListener();    }    /**     * Vertical scrollbar listener.     */    public class VSBChangeListener implements ChangeListener    {	public void stateChanged(ChangeEvent e)	{	    JViewport viewport = scrollpane.getViewport();	    if (viewport != null) {		BoundedRangeModel model = (BoundedRangeModel)(e.getSource());		Point p = viewport.getViewPosition();		p.y = model.getValue();		viewport.setViewPosition(p);	    }	}    }    /**     * PropertyChangeListener for the ScrollBars.     */    private class ScrollBarPropertyChangeHandler implements                               PropertyChangeListener {        // Listens for changes in the model property and reinstalls the        // horizontal/vertical PropertyChangeListeners.        public void propertyChange(PropertyChangeEvent e) {            String propertyName = e.getPropertyName();            Object source = e.getSource();            if ("model".equals(propertyName)) {                JScrollBar sb = scrollpane.getVerticalScrollBar();                BoundedRangeModel oldModel = (BoundedRangeModel)e.                                     getOldValue();                ChangeListener cl = null;                if (source == sb) {                    cl = vsbChangeListener;                }                else if (source == scrollpane.getHorizontalScrollBar()) {                    sb = scrollpane.getHorizontalScrollBar();                    cl = hsbChangeListener;                }                if (cl != null) {                    if (oldModel != null) {                        oldModel.removeChangeListener(cl);                    }                    if (sb.getModel() != null) {                        sb.getModel().addChangeListener(cl);                    }                }            }            else if ("componentOrientation".equals(propertyName)) {                if (source == scrollpane.getHorizontalScrollBar()) {		    JScrollBar hsb = scrollpane.getHorizontalScrollBar(); 		    JViewport viewport = scrollpane.getViewport();                    Point p = viewport.getViewPosition();                    if (scrollpane.getComponentOrientation().isLeftToRight()) {                        p.x = hsb.getValue();                    } else {                        p.x = viewport.getViewSize().width - viewport.getExtentSize().width - hsb.getValue();                    }                    viewport.setViewPosition(p);                }            }        }    }    /**     * Returns a <code>PropertyChangeListener</code> that will be installed     * on the vertical <code>JScrollBar</code>.     */    private PropertyChangeListener createVSBPropertyChangeListener() {        return getSBPropertyChangeListener();    }    protected ChangeListener createVSBChangeListener() {	return new VSBChangeListener();    }    /**     * MouseWheelHandler is an inner class which implements the      * MouseWheelListener interface.  MouseWheelHandler responds to      * MouseWheelEvents by scrolling the JScrollPane appropriately.     * If the scroll pane's     * <code>isWheelScrollingEnabled</code>     * method returns false, no scrolling occurs.     *      * @see javax.swing.JScrollPane#isWheelScrollingEnabled     * @see #createMouseWheelListener     * @see java.awt.event.MouseWheelListener     * @see java.awt.event.MouseWheelEvent     * @since 1.4     */    protected class MouseWheelHandler implements MouseWheelListener {        /**         * Called when the mouse wheel is rotated while over a         * JScrollPane.         *         * @param e     MouseWheelEvent to be handled         * @since 1.4         */        public void mouseWheelMoved(MouseWheelEvent e) {            if (scrollpane.isWheelScrollingEnabled() &&                e.getScrollAmount() != 0) {                JScrollBar toScroll = scrollpane.getVerticalScrollBar();                int direction = 0;                // find which scrollbar to scroll, or return if none                if (toScroll == null || !toScroll.isVisible()) {                     toScroll = scrollpane.getHorizontalScrollBar();                    if (toScroll == null || !toScroll.isVisible()) {                         return;                    }                }                direction = e.getWheelRotation() < 0 ? -1 : 1;                if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) {                    BasicScrollBarUI.scrollByUnits(toScroll, direction,                                                         e.getScrollAmount());                }                else if (e.getScrollType() ==                         MouseWheelEvent.WHEEL_BLOCK_SCROLL) {                    BasicScrollBarUI.scrollByBlock(toScroll, direction);                }            }        }    }    /**     * Creates an instance of MouseWheelListener, which is added to the     * JScrollPane by installUI().  The returned MouseWheelListener is used     * to handle mouse wheel-driven scrolling.     *     * @return      MouseWheelListener which implements wheel-driven scrolling     * @see #installUI     * @see MouseWheelHandler     * @since 1.4     */    protected MouseWheelListener createMouseWheelListener() {        return new MouseWheelHandler();    }    protected void updateScrollBarDisplayPolicy(PropertyChangeEvent e) {	scrollpane.revalidate();	scrollpane.repaint();    }    protected void updateViewport(PropertyChangeEvent e)     {	JViewport oldViewport = (JViewport)(e.getOldValue());	JViewport newViewport = (JViewport)(e.getNewValue());	if (oldViewport != null) {	    oldViewport.removeChangeListener(viewportChangeListener);	}		if (newViewport != null) {	    Point p = newViewport.getViewPosition();	    if (scrollpane.getComponentOrientation().isLeftToRight()) {		p.x = Math.max(p.x, 0);	    } else {		int max = newViewport.getViewSize().width;		int extent = newViewport.getExtentSize().width;		if (extent > max) {		    p.x = max - extent;		} else {		    p.x = Math.max(0, Math.min(max - extent, p.x));		}	    }	    p.y = Math.max(p.y, 0);	    newViewport.setViewPosition(p);	    newViewport.addChangeListener(viewportChangeListener);	}    }    protected void updateRowHeader(PropertyChangeEvent e)     {	JViewport newRowHead = (JViewport)(e.getNewValue());	if (newRowHead != null) {	    JViewport viewport = scrollpane.getViewport();	    Point p = newRowHead.getViewPosition();	    p.y = (viewport != null) ? viewport.getViewPosition().y : 0;	    newRowHead.setViewPosition(p);	}    }    protected void updateColumnHeader(PropertyChangeEvent e)     {	JViewport newColHead = (JViewport)(e.getNewValue());	if (newColHead != null) {	    JViewport viewport = scrollpane.getViewport();	    Point p = newColHead.getViewPosition();	    if (viewport == null) {		p.x = 0;	    } else {		if (scrollpane.getComponentOrientation().isLeftToRight()) {		    p.x = viewport.getViewPosition().x;		} else {		    p.x = Math.max(0, viewport.getViewPosition().x);		}	    }	    newColHead.setViewPosition(p);	    scrollpane.add(newColHead, COLUMN_HEADER);	}    }    private void updateHorizontalScrollBar(PropertyChangeEvent pce) {	updateScrollBar(pce, hsbChangeListener, hsbPropertyChangeListener);    }    private void updateVerticalScrollBar(PropertyChangeEvent pce) {	updateScrollBar(pce, vsbChangeListener, vsbPropertyChangeListener);    }    private void updateScrollBar(PropertyChangeEvent pce, ChangeListener cl,                                 PropertyChangeListener pcl) {        JScrollBar sb = (JScrollBar)pce.getOldValue();        if (sb != null) {            if (cl != null) {                sb.getModel().removeChangeListener(cl);            }            if (pcl != null) {                sb.removePropertyChangeListener(pcl);            }        }        sb = (JScrollBar)pce.getNewValue();        if (sb != null) {            if (cl != null) {                sb.getModel().addChangeListener(cl);            }            if (pcl != null) {                sb.addPropertyChangeListener(pcl);            }	}    }    public class PropertyChangeHandler implements PropertyChangeListener    {        public void propertyChange(PropertyChangeEvent e)        {            String propertyName = e.getPropertyName();	    if (propertyName.equals("verticalScrollBarDisplayPolicy")) {		updateScrollBarDisplayPolicy(e);	    }	    else if (propertyName.equals("horizontalScrollBarDisplayPolicy")) {		updateScrollBarDisplayPolicy(e);	    }	    else if (propertyName.equals("viewport")) {		updateViewport(e);	    }	    else if (propertyName.equals("rowHeader")) {		updateRowHeader(e);	    }	    else if (propertyName.equals("columnHeader")) {		updateColumnHeader(e);	    }	    else if (propertyName.equals("verticalScrollBar")) {		updateVerticalScrollBar(e);	    }	    else if (propertyName.equals("horizontalScrollBar")) {		updateHorizontalScrollBar(e);	    }	    else if (propertyName.equals("componentOrientation")) {		scrollpane.revalidate();		scrollpane.repaint();		InputMap inputMap = getInputMap(JComponent.					WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);		SwingUtilities.replaceUIInputMap(scrollpane, JComponent.				WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap);		UIManager.getLookAndFeelDefaults().put("ScrollPane.actionMap",                                                       null);		ActionMap actionMap = getActionMap();		SwingUtilities.replaceUIActionMap(scrollpane, actionMap);	    }	}    }    /**     * Creates an instance of PropertyChangeListener that's added to      * the JScrollPane by installUI().  Subclasses can override this method     * to return a custom PropertyChangeListener, e.g.     * <pre>     * class MyScrollPaneUI extends BasicScrollPaneUI {     *    protected PropertyChangeListener <b>createPropertyChangeListener</b>() {     *        return new MyPropertyChangeListener();     *    }     *    public class MyPropertyChangeListener extends PropertyChangeListener {     *        public void propertyChange(PropertyChangeEvent e) {     *            if (e.getPropertyName().equals("viewport")) {     *                // do some extra work when the viewport changes     *            }     *            super.propertyChange(e);     *        }     *    }     * }     * </pre>     *      * @see java.beans.PropertyChangeListener     * @see #installUI     */    protected PropertyChangeListener createPropertyChangeListener() {        return new PropertyChangeHandler();    }    /**     * Action to scroll left/right/up/down.     */    private static class ScrollAction extends AbstractAction {	/** Direction to scroll. */	protected int orientation;	/** 1 indicates scroll down, -1 up. */	protected int direction;	/** True indicates a block scroll, otherwise a unit scroll. */	private boolean block;	protected ScrollAction(String name, int orientation, int direction,			       boolean block) {	    super(name);	    this.orientation = orientation;	    this.direction = direction;	    this.block = block;	}	public void actionPerformed(ActionEvent e) {	    JScrollPane scrollpane = (JScrollPane)e.getSource();	    JViewport vp = scrollpane.getViewport();	    Component view;	    if (vp != null && (view = vp.getView()) != null) {		Rectangle visRect = vp.getViewRect();		Dimension vSize = view.getSize();		int amount;		if (view instanceof Scrollable) {		    if (block) {			amount = ((Scrollable)view).getScrollableBlockIncrement			         (visRect, orientation, direction);		    }		    else {			amount = ((Scrollable)view).getScrollableUnitIncrement			         (visRect, orientation, direction);		    }		}		else {		    if (block) {			if (orientation == SwingConstants.VERTICAL) {			    amount = visRect.height;			}			else {			    amount = visRect.width;			}		    }		    else {			amount = 10;		    }		}		if (orientation == SwingConstants.VERTICAL) {		    visRect.y += (amount * direction);		    if ((visRect.y + visRect.height) > vSize.height) {			visRect.y = Math.max(0, vSize.height - visRect.height);		    }		    else if (visRect.y < 0) {			visRect.y = 0;		    }		}		else {		    if (scrollpane.getComponentOrientation().isLeftToRight()) {			visRect.x += (amount * direction);			if ((visRect.x + visRect.width) > vSize.width) {			    visRect.x = Math.max(0, vSize.width - visRect.width);			} else if (visRect.x < 0) {			    visRect.x = 0;			}		    } else {			visRect.x -= (amount * direction);                        if (visRect.width > vSize.width) {                            visRect.x = vSize.width - visRect.width;                        } else {                            visRect.x = Math.max(0, Math.min(vSize.width - visRect.width, visRect.x));			}		    }		}		vp.setViewPosition(visRect.getLocation());	    }	}    }    /**     * Action to scroll to x,y location of 0,0.     */    private static class ScrollHomeAction extends AbstractAction {	protected ScrollHomeAction(String name) {	    super(name);	}	public void actionPerformed(ActionEvent e) {	    JScrollPane scrollpane = (JScrollPane)e.getSource();	    JViewport vp = scrollpane.getViewport();	    Component view;	    if (vp != null && (view = vp.getView()) != null) {		if (scrollpane.getComponentOrientation().isLeftToRight()) {		    vp.setViewPosition(new Point(0, 0));		} else {		    Rectangle visRect = vp.getViewRect();		    Rectangle bounds = view.getBounds();		    vp.setViewPosition(new Point(bounds.width - visRect.width, 0));		}	    }	}    }    /**     * Action to scroll to last visible location.     */    private static class ScrollEndAction extends AbstractAction {	protected ScrollEndAction(String name) {	    super(name);	}	public void actionPerformed(ActionEvent e) {	    JScrollPane scrollpane = (JScrollPane)e.getSource();	    JViewport vp = scrollpane.getViewport();	    Component view;	    if (vp != null && (view = vp.getView()) != null) {		Rectangle visRect = vp.getViewRect();		Rectangle bounds = view.getBounds();		if (scrollpane.getComponentOrientation().isLeftToRight()) {		    vp.setViewPosition(new Point(bounds.width - visRect.width,					     bounds.height - visRect.height));		} else {		    vp.setViewPosition(new Point(0, 					     bounds.height - visRect.height));		}	    }	}    }}

⌨️ 快捷键说明

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