Как я могу заставить JScrollBar принимать длинные значения в конструкторе?
Итак, есть конструктор для JScrollBar, который выглядит так:
public JScrollBar(int orientation, int value, int extent, int min, int max)
Для моей реализации JScrollBar мне нужно, чтобы значения int были длинными, поскольку размер моих данных может превышать ограничения int, что-то вроде:
public JScrollBar(int orientation, long value, long extent, long min, long max)
Каков наилучший способ для меня реализовать этот конструктор для JScrollBar, будет ли полностью переделывать JScrollBar, так как эти значения везде? Или есть какой-то другой способ гораздо лучше сделать это.
ПРИМЕЧАНИЕ. Если я полностью переписываю JscrollBar, мне также придется перезаписать swing.DefaultBoundedRangeModel, потому что он также принимает int. Это не лучший подход, так что у кого-нибудь есть идеи получше?
2 ответа
На каком-то уровне вам не хватит разрешения экрана, чтобы правильно обнаруживать реальные изменения. Либо вы будете прокручивать контент, а полоса прокрутки не будет двигаться. Или пользователь переместит полосу прокрутки при телепортации в новую область, создавая дезориентацию.
32-разрядное целое число составляет 2 миллиарда положительных чисел. Если разрешение экрана составляет даже 1000 пикселей, пользователь не сможет управлять полосой прокрутки, потому что любое движение пикселя на полосе прокрутки будет представлять 2 147 483 пикселя в месте назначения при прокрутке (если масштабирование 1:1). Так что я, вероятно, подумал бы о способе отображения уровня масштабирования на полосе прокрутки, чтобы вы могли прокручивать на любом уровне, и он будет плавным.
Другими вариантами может быть использование элемента обзора / детализации, который показывает маленькое изображение с квадратом, показывающим, где вы находитесь, на большом изображении, а затем увеличенное изображение. Вы можете перетащить изображение на верхнее изображение и увидеть его результаты на подробном изображении. Проблема в том, что у вас все еще будет движение в 2 миллиона пикселей, если вы переместите его всего на один пиксель, так что будет весьма дезориентирующим перемещаться по изображению, которое велико при малых масштабах масштабирования. Но используйте ручное перетаскивание в подробном представлении для меньших движений, которые не так дезориентируют. Эта сторона решает проблему переопределения JScrollBar и, вероятно, будет лучшим вариантом.
Я, вероятно, попытался бы подкласс JScrollBar
и переопределить setValue
и отрегулируйте (масштабируйте) значение соответственно.