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

📄 basicscrollpaneui.java

📁 Mobile 应用程序使用 Java Micro Edition (Java ME) 平台
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                            int direction, boolean block) {	    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());	    }	}    }    class Handler implements ChangeListener, PropertyChangeListener, MouseWheelListener {        //        // MouseWheelListener        //        public void mouseWheelMoved(MouseWheelEvent e) {            if (scrollpane.isWheelScrollingEnabled() &&                e.getWheelRotation() != 0) {                JScrollBar toScroll = scrollpane.getVerticalScrollBar();                int direction = e.getWheelRotation() < 0 ? -1 : 1;                int orientation = SwingConstants.VERTICAL;                // find which scrollbar to scroll, or return if none                if (toScroll == null || !toScroll.isVisible()) {                     toScroll = scrollpane.getHorizontalScrollBar();                    if (toScroll == null || !toScroll.isVisible()) {                         return;                    }                    orientation = SwingConstants.HORIZONTAL;                }                if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) {                    JViewport vp = scrollpane.getViewport();                    if (vp == null) { return; }                    Component comp = vp.getView();                    int units = Math.abs(e.getUnitsToScroll());                    // When the scrolling speed is set to maximum, it's possible                    // for a single wheel click to scroll by more units than                    // will fit in the visible area.  This makes it                    // hard/impossible to get to certain parts of the scrolling                    // Component with the wheel.  To make for more accurate                    // low-speed scrolling, we limit scrolling to the block                    // increment if the wheel was only rotated one click.                    boolean limitScroll = Math.abs(e.getWheelRotation()) == 1;                    // Check if we should use the visibleRect trick                    Object fastWheelScroll = toScroll.getClientProperty(                                               "JScrollBar.fastWheelScrolling");                    if (Boolean.TRUE == fastWheelScroll &&                        comp instanceof Scrollable) {                        // 5078454: Under maximum acceleration, we may scroll                        // by many 100s of units in ~1 second.                        //                        // BasicScrollBarUI.scrollByUnits() can bog down the EDT                        // with repaints in this situation.  However, the                        // Scrollable interface allows us to pass in an                        // arbitrary visibleRect.  This allows us to accurately                        // calculate the total scroll amount, and then update                        // the GUI once.  This technique provides much faster                        // accelerated wheel scrolling.                        Scrollable scrollComp = (Scrollable) comp;                        Rectangle viewRect = vp.getViewRect();                        int startingX = viewRect.x;                        boolean leftToRight =                                 comp.getComponentOrientation().isLeftToRight();                        int scrollMin = toScroll.getMinimum();                        int scrollMax = toScroll.getMaximum() -                                        toScroll.getModel().getExtent();                        if (limitScroll) {                            int blockIncr =                                scrollComp.getScrollableBlockIncrement(viewRect,                                                                    orientation,                                                                    direction);                            if (direction < 0) {                                scrollMin = Math.max(scrollMin,                                               toScroll.getValue() - blockIncr);                            }                            else {                                scrollMax = Math.min(scrollMax,                                               toScroll.getValue() + blockIncr);                            }                        }                        for (int i = 0; i < units; i++) {                            int unitIncr =                                scrollComp.getScrollableUnitIncrement(viewRect,                                                        orientation, direction);                            // Modify the visible rect for the next unit, and                            // check to see if we're at the end already.                            if (orientation == SwingConstants.VERTICAL) {                                if (direction < 0) {                                    viewRect.y -= unitIncr;                                    if (viewRect.y <= scrollMin) {                                        viewRect.y = scrollMin;                                        break;                                    }                                }                                else { // (direction > 0                                    viewRect.y += unitIncr;                                    if (viewRect.y >= scrollMax) {                                        viewRect.y = scrollMax;                                        break;                                    }                                }                            }                            else {                                // Scroll left                                if ((leftToRight && direction < 0) ||                                    (!leftToRight && direction > 0)) {                                    viewRect.x -= unitIncr;                                    if (leftToRight) {                                        if (viewRect.x < scrollMin) {                                            viewRect.x = scrollMin;                                            break;                                        }                                    }                                }                                // Scroll right                                else if ((leftToRight && direction > 0) ||                                    (!leftToRight && direction < 0)) {                                    viewRect.x += unitIncr;                                    if (leftToRight) {                                        if (viewRect.x > scrollMax) {                                            viewRect.x = scrollMax;                                            break;                                        }                                    }                                }                                else {                                    assert false : "Non-sensical ComponentOrientation / scroll direction";                                }                            }                        }                        // Set the final view position on the ScrollBar                        if (orientation == SwingConstants.VERTICAL) {                            toScroll.setValue(viewRect.y);                        }                        else {                            if (leftToRight) {                                toScroll.setValue(viewRect.x);                            }                            else {                                // rightToLeft scrollbars are oriented with                                 // minValue on the right and maxValue on the                                // left.                                int newPos = toScroll.getValue() -                                                       (viewRect.x - startingX);                                if (newPos < scrollMin) {                                    newPos = scrollMin;                                }                                else if (newPos > scrollMax) {                                    newPos = scrollMax;                                }                                toScroll.setValue(newPos);                            }                        }                    }                    else {                        // Viewport's view is not a Scrollable, or fast wheel                        // scrolling is not enabled.                        BasicScrollBarUI.scrollByUnits(toScroll, direction,                                                       units, limitScroll);                    }                }                else if (e.getScrollType() ==                         MouseWheelEvent.WHEEL_BLOCK_SCROLL) {                    BasicScrollBarUI.scrollByBlock(toScroll, direction);                }            }        }        //        // ChangeListener: This is added to the vieport, and hsb/vsb models.        //	public void stateChanged(ChangeEvent e) {            JViewport viewport = scrollpane.getViewport();            if (viewport != null) {                if (e.getSource() == viewport) {                    viewportStateChanged(e);                }                else {                    JScrollBar hsb = scrollpane.getHorizontalScrollBar();                    if (hsb != null && e.getSource() == hsb.getModel()) {                        hsbStateChanged(viewport, e);                    }                    else {                        JScrollBar vsb = scrollpane.getVerticalScrollBar();                        if (vsb != null && e.getSource() == vsb.getModel()) {                            vsbStateChanged(viewport, e);                        }                    }                }            }        }        private void vsbStateChanged(JViewport viewport, ChangeEvent e) {            BoundedRangeModel model = (BoundedRangeModel)(e.getSource());            Point p = viewport.getViewPosition();            p.y = model.getValue();            viewport.setViewPosition(p);        }        private void hsbStateChanged(JViewport viewport, ChangeEvent e) {            BoundedRangeModel model = (BoundedRangeModel)(e.getSource());            Point p = viewport.getViewPosition();            int value = model.getValue();            if (scrollpane.getComponentOrientation().isLeftToRight()) {                p.x = value;            } else {                int max = viewport.getViewSize().width;                int extent = viewport.getExtentSize().width;                int oldX = p.x;                /* Set new X coordinate based on "value".                 */                p.x = max - extent - value;                /* If setValue() was called before "extent" was fixed,                 * turn setValueCalled flag on.                 */                if ((extent == 0) && (value != 0) && (oldX == max)) {                    setValueCalled = true;                } else {                    /* When a pane without a horizontal scroll bar was                     * reduced and the bar appeared, the viewport should                     * show the right side of the view.                     */                    if ((extent != 0) && (oldX < 0) && (p.x == 0)) {                        p.x += value;                    }                }            }            viewport.setViewPosition(p);        }        private void viewportStateChanged(ChangeEvent e) {            syncScrollPaneWithViewport();	}        //        // PropertyChangeListener: This is installed on both the JScrollPane        // and the horizontal/vertical scrollbars.        //        // Listens for changes in the model property and reinstalls the        // horizontal/vertical PropertyChangeListeners.        public void propertyChange(PropertyChangeEvent e) {            if (e.getSource() == scrollpane) {                scrollPanePropertyChange(e);            }            else {                sbPropertyChange(e);            }        }        private void scrollPanePropertyChange(PropertyChangeEvent e) {            String propertyName = e.getPropertyName();	    if (propertyName == "verticalScrollBarDisplayPolicy") {		updateScrollBarDisplayPolicy(e);	    }	    else if (propertyName == "horizontalScrollBarDisplayPolicy") {		updateScrollBarDisplayPolicy(e);	    }	    else if (propertyName == "viewport") {		updateViewport(e);	    }	    else if (propertyName == "rowHeader") {		updateRowHeader(e);	    }	    else if (propertyName == "columnHeader") {		updateColumnHeader(e);	    }	    else if (propertyName == "verticalScrollBar") {		updateVerticalScrollBar(e);	    }	    else if (propertyName == "horizontalScrollBar") {		updateHorizontalScrollBar(e);	    }	    else if (propertyName == "componentOrientation") {		scrollpane.revalidate();		scrollpane.repaint();	    }        }        // PropertyChangeListener for the horizontal and vertical scrollbars.        private void sbPropertyChange(PropertyChangeEvent e) {            String propertyName = e.getPropertyName();            Object source = e.getSource();            if ("model" == 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" == 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);                }            }        }    }}

⌨️ 快捷键说明

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