@Override public void actionPerformed(ActionEvent event) { if (myScrollBar == null) { myScrollTimer.stop(); } else { scroll(isReversed); if (!myThumbBounds.isEmpty()) { if (isReversed ? !isMouseBeforeThumb() : !isMouseAfterThumb()) { myScrollTimer.stop(); } } int value = myScrollBar.getValue(); if (isReversed ? value <= myScrollBar.getMinimum() : value >= myScrollBar.getMaximum() - myScrollBar.getVisibleAmount()) { myScrollTimer.stop(); } } }
@Override public void mouseReleased(MouseEvent event) { if (isDragging) updateMouse(event.getX(), event.getY()); if (myScrollBar == null || !myScrollBar.isEnabled()) return; if (redispatchIfTrackNotClickable(event)) return; if (SwingUtilities.isRightMouseButton(event)) return; isDragging = false; myOffset = 0; myScrollTimer.stop(); isValueCached = true; myCachedValue = myScrollBar.getValue(); myScrollBar.setValueIsAdjusting(false); repaint(); }
@Override public void mouseDragged(MouseEvent event) { if (myScrollBar == null || !myScrollBar.isEnabled()) return; if (myThumbBounds.isEmpty() || SwingUtilities.isRightMouseButton(event)) return; if (isDragging) { setValueFrom(event); } else { myMouseX = event.getX(); myMouseY = event.getY(); updateMouse(myMouseX, myMouseY); startScrollTimerIfNecessary(); } }
@Override public void mousePressed(MouseEvent event) { if (myScrollBar == null || !myScrollBar.isEnabled()) return; if (redispatchIfTrackNotClickable(event)) return; if (SwingUtilities.isRightMouseButton(event)) return; myOffset = (vertical ? myThumbBounds.height : myThumbBounds.width) / 2; isDragging = true; setValueFrom(event); scroll(isReversed); startScrollTimerIfNecessary();
@Override public void mouseMoved(MouseEvent event) { if (myScrollBar == null || !myScrollBar.isEnabled()) return; if (!isDragging) updateMouse(event.getX(), event.getY()); redispatchIfTrackNotClickable(event); }
private boolean isMouseBeforeThumb() { return VERTICAL == myScrollBar.getOrientation() ? isMouseOnTop() : myScrollBar.getComponentOrientation().isLeftToRight() ? isMouseOnLeft() : isMouseOnRight(); }
private boolean isMouseAfterThumb() { return VERTICAL == myScrollBar.getOrientation() ? isMouseOnBottom() : myScrollBar.getComponentOrientation().isLeftToRight() ? isMouseOnRight() : isMouseOnLeft(); }
private void startScrollTimerIfNecessary() { if (!myScrollTimer.isRunning()) { if (isReversed ? isMouseBeforeThumb() : isMouseAfterThumb()) { myScrollTimer.start(); } } }