Как я могу заставить JScrollBar принимать длинные значения в конструкторе? - PullRequest
2 голосов
/ 27 октября 2011

Итак, есть конструктор для 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 ]

3 голосов
/ 27 октября 2011

На каком-то уровне вам не хватит разрешения экрана, чтобы правильно обнаруживать реальные изменения.Либо вы будете прокручивать содержимое, и полоса прокрутки не будет двигаться.Или пользователь переместит полосу прокрутки при телепортации в новую область, создавая дезориентацию.

32-разрядное целое число составляет 2 миллиарда положительных чисел.Если разрешение экрана составляет даже 1000 пикселей, пользователь не сможет управлять полосой прокрутки, потому что любое перемещение пикселя на полосе прокрутки будет представлять 2 147 483 пикселя в месте назначения при прокрутке (если масштабирование 1: 1).Поэтому я, вероятно, подумал бы о способе отображения уровня масштабирования на полосе прокрутки, чтобы вы могли прокручивать на любом уровне, и он будет плавным.показывает маленькое изображение с квадратом, показывающим, где вы находитесь на большом изображении, затем увеличенное изображение на дисплее.Вы можете перетащить изображение на верхнее изображение и увидеть его результаты на подробном изображении.Проблема в том, что у вас все еще будет движение в 2 миллиона пикселей, если вы переместите его всего на один пиксель, так что будет весьма дезориентирующим перемещаться по изображению, которое велико при малых масштабах масштабирования.Но используйте ручное перетаскивание в подробном представлении для меньших движений, которые не так дезориентируют.Эта сторона решает проблему переопределения JScrollBar и, вероятно, будет лучшим вариантом.

1 голос
/ 27 октября 2011

Я, вероятно, попытался бы создать подкласс JScrollBar, переопределить setValue и соответствующим образом настроить (масштабировать) значение.

...