Java теперь открыта. Я бы посмотрел на источник для Swing и / или SWT, так как они уже реализованы. Математика кажется довольно простой. У вас есть бар и контейнер. Для упрощения мы обсудим только длину (размер, в котором перемещается полоса прокрутки). Контейнер имеет определенную длину. Бар имеет длину, которая равна или меньше, чем контейнер. Полезно определить центр и две конечные точки полосы прокрутки. Полоса прокрутки может начинаться с 0 сверху и с 1 снизу или с 0 сверху и с 100 снизу, при этом важная часть определяет вашу полосу прокрутки таким же образом. Затем вы можете проверить конечные точки на предмет столкновения с краем, чтобы остановить движение планки. Если мышь удерживать нажатой, когда курсор находится над координатами внутри панели, панель начнет заботиться о том, где находится курсор, и закрасит полосу прокрутки и все, что, в конечном счете, полоса прокрутки должна повлиять. Таким образом, вы бы взяли на страницу, которая будет затронута, и отобразили ее на 0 и 1 * масштаб в пикселях полосы прокрутки. Затем вы начинаете беспокоиться о стрелках на обоих концах и о том, насколько велик прыжок на каждом клике, а также о событиях mousedown и т. Д. Используйте то, что дано, не изобретайте колесо.