Линейные регуляторы Java

Линейные регуляторы JavaВыпадающие списки позволяют пользователю делать выбор из дискретного набора значений. Линейные регуляторы(ползунки) дают возможность выбрать конкретное  значение из диапазона возможных, например, любое число из интервала 1-100.

Наиболее часто линейные регуляторы создаются следующим образом:

Если не указывать минимальное, максимальное и начальное значение, принимаются соответственно величины 0, 100 и 50.

Если линейный регулятор должен располагаться вертикально, используется приведенный ниже конструктор:

Каждый из этих конструкторов создает простой регулятор. В качестве примера можно привести регулятор, который расположен в верхней части окна, представленного на рис.1. Позже мы рассмотрим более сложные варианты линейных регуляторов.

Линейные регуляторы JavaКогда пользователь перемещает ползунок регулятора, значение компонента изменяется в пределах от минимального до максимального. Все слушатели, связанные с линейным регулятором, получают событие ChangeEvent. Для этого чтобы получать извещения об изменении значения регулятора, нужно создать объект, реализующий интерфейс ChangeListener, и вызвать метод addChangeListener(). В этом интерфейсе объявлен лишь один метод stateChanged(). При его выполнении определяется значение регулятора.

Линейный регулятор можно дополнить делениями(tic). Например, в программе, рассматриваемой в качестве примера, для второго регулятора производятся следующие установки:

Регулятор снабжен основными делениями, следующими через каждые 20 единиц измерения, и вспомогательными, которые следуют через каждые 5 единиц. В данном случае единицы измерения связываются со значениями регулятора и не имеют никакого отношения к пикселям.

Приведенные выше выражения лишь устанавливают деления регулятора. Чтобы вывести их на экран, нужно вызвать следующий метод:

Основные и вспомогательные деления не зависят друг от друга. Например, можно задать расстановку основных делений через каждые 20 единиц, а вспомогательных — через 7 единиц, хотя такая шкала будет довольно неудобной.

Можно перевести регулятор в режим привязки к делениям. Как только пользователь отпустит ползунок регулятора, он тут же переместится на ближайшее деление. Чтобы задать такой режим работы, нужно вызвать следующий метод:

В режиме привязки к делениями компонент работает несколько неожиданно. Пока регулятор не установится точно на деление, обработчик событий изменений получает значения, не соответствующие делениями шкалы. Если же пользователь перемещает ползунок щелчком мыши, то все равно не попадает на ближайшее деление.

С помощью приведенного ниже вызова можно задать метки основных делений:

Например, если значение регулятора изменяется в пределах от 0 до 100, а шаг основных делений равен 20, на экране появятся метки 0, 20, 40, 60, 80 и 100.

Можно задать и другие типы меток, например строки или пиктограммы(смотрите рис.1). Эта задача не тривиальна. Сначала нужно заполнить хеш-таблицу с ключами типа Integer и значениями типа Component(автоматическое преобразование, реализованное в Java SE 5.0 и последующих версиях, упрощает этот процесс). Затем следует вызвать метод setLabelTable(). Компоненты размещаются под делениями.

Обычно используются объекты класса JLabel. Ниже показано, как можно задать метки делений A, B, C, D, E и F.

В сегодняшней пример программы показан пример создания регулятора, у которого метками деления являются пиктограммы.

Если деления или их метки не выводятся на экран, проверьте, вызваны ли методы setPaintTicks(true) и setpaintLabels(true).

Четвертый регулятор на рис.1 не имеет «дорожки». Подавить изображение «дорожки», по которой двигается ползунок, можно с помощью вызова:

Для пятого регулятора на этом рисунке направление движение изменено посредством следующего метода:

Набор регуляторов, создаваемых в приведенном здесь примере, демонстрирует различные визуальные эффекты. Для каждого регулятора установлен обработчик событий, который отображает текущее значение выбранного регулятора в поле редактирования, расположенном в нижней части окна.

Код программы:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *