return visibleRect.width * direction;
{    Point p = new Point(visibleRect.x, visibleRect.y - visibleRect.height); int newFirst = locationToIndex(p); if (newFirst != -1) { int first = getFirstVisibleIndex(); if (first == -1) first = locationToIndex(visibleRect.getLocation()); Rectangle newFirstR = getCellBounds(newFirst, newFirst); Rectangle firstR = getCellBounds(first, first); if (newFirstR != null && firstR != null) {   while (newFirstR.y + visibleRect.height < firstR.y + firstR.height && newFirstR.y < firstR.y) { newFirst++; newFirstR = getCellBounds(newFirst, newFirst); } block = visibleRect.y - newFirstR.y; if (block <= 0 && newFirstR.y > 0) { newFirst--; newFirstR = getCellBounds(newFirst, newFirst); if (newFirstR != null) block = visibleRect.y - newFirstR.y; } } } } } else if (orientation == SwingConstants.HORIZONTAL && getLayoutOrientation() != VERTICAL) {   block = visibleRect.width; if (direction > 0) {  Point p = new Point(visibleRect.x + visibleRect.width + 1, visibleRect.y); int last = locationToIndex(p); if (last != -1) { Rectangle lastR = getCellBounds(last, last); if (lastR != null) { block = lastR.x  - visibleRect.x; if (block < 0) block += lastR.width; else if (block == 0 && last < getModel().getSize() - 1) block = lastR.width; } } } else {  Point p = new Point(visibleRect.x - visibleRect.width, visibleRect.y); int first = locationToIndex(p); if (first != -1) { Rectangle firstR = getCellBounds(first, first); if (firstR != null) { if (firstR.x < visibleRect.x - visibleRect.width) { if (firstR.x + firstR.width > visibleRect.x) block = visibleRect.x - firstR.x; else block = visibleRect.x - firstR.x - firstR.width; } else block = visibleRect.x - firstR.x; } } } }  return block;
  public int getScrollableBlockIncrement(Rectangle visibleRect,                                         int orientation, int direction)  {      if (orientation == VERTICAL)	  return visibleRect.height * direction;      else	  return visibleRect.width * direction;  }