Компонент Scrollbar

 

Компонент Scrollbar — это полоса прокрутки, но в библиотеке AWT класс Scrollbar используется еще и для организации ползунка (slider). Объект может располагаться горизонтально или вертикально, обычно полосы прокрутки размещают внизу и справа.

Каждая полоса прокрутки охватывает некоторый диапазон значений и хранит текущее значение из этого диапазона. В линейке прокрутки есть пять элементов управления для перемещения по диапазону. Две стрелки на концах линейки вызывают перемещение на одну единицу (unit) в соответствующем направлении при щелчке на стрелке кнопкой мыши. Положение движка или бегунка (bubble, thumb) показывает текущее значение из диапазона и может его изменять при перемещении бегунка с помощью мыши. Два промежутка между движком и (Стрелками Позволяют переместиться на один блок (block) щелчком кнопки мыши.

Смысл понятий «единица» и «блок» зависит от объекта, с которым работает полоса прокрутки. Например, для вертикальной полосы прокрутки при просмотре текста это может быть строка и страница или строка и абзац.

Методы работы с данным компонентом описаны в интерфейсе Adjustable, который реализован классом scroiibar.

В классе scroiibar три конструктора:

  • Scrollbar () — создает вертикальную полосу прокрутки с диапазоном 0—100, текущим значением 0 и блоком 10 единиц;
  • Scrollbar (int orientation) — ориентация orientation задается одной из двух констант HORIZONTAL или VERTICAL ;
  • Scrollbar(int orientation, int value, int visible, int min, int max) — задает, кроме ориентации, еще начальное значение value, размер блока visible, диапазон значений min—max.

Аргумент visible определяет еще и длину движка — она устанавливается пропорционально диапазону значений и длине полосы прокрутки. Например, конструктор по умолчанию задаст длину движка равной 0,1 длины полосы прокрутки.

Основной метод класса — getvalue () — возвращает значение текущего положения движка на полосе прокрутки. Остальные методы доступа позволяют узнать и изменить характеристики объекта, примеры их использования показаны в листинге 12.6.

 

События

 

Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent , при изменении значения пользователем происходит событие Adj ustmentEvent.

В листинге 10.4 создаются три вертикальные полосы прокрутки — красная, зеленая и синяя, позволяющие выбрать какое-нибудь значение соответствующего цвета в диапазоне 0—255, с начальным значением 127. Кроме них создается область, заполняемая получившимся цветом, и две кнопки. Линейки прокрутки, их заголовок и масштабные метки помещены в отдельный контейнер р типа Panel. Об этом чуть позже в данной главе.

В листинге 12.6 мы «оживим» эту программу.

 

Листинг 10.4. Линейки прокрутки для выбора цвета

import j ava.awt.*; 

import j ava.awt.event.*;

class ScrollTest extends Frame!

Scroiibar sbRed = new Scroiibar{Scroiibar.VERTICAL, 127, 10, 0, 255);

Scroiibar sbGreen = new Scroiibar(Scroiibar.VERTICAL, 127, 10, 0, 255);

Scroiibar sbBlue = new Scroiibar(Scroiibar.VERTICAL, 127, 10, 0, 255);

Color mixedColor = ,new Color(127, 127, 127);

Label 1m = new Label();

Button Ы = new Button(«Применить»);

Button b2 = new Button(«Отменить»);

ScrollTest(String s){ super(s); 

setLayout(null); 

setFont(new Font(«Serif», Font.BOLD, 15));

Panel p = new Panel(); 

p.setLayout(null); 

p.setBounds(10,50, 150, 260); add(p);

Label Ic = new Label(«Подберите цвет»); 

lc.setBounds(20, 0, 120, 30); p.add(lc);

Label Imin = new Label(«0», Label.RIGHT); 

lmin.setBounds(0, 30, 30, 30); p.add(lmin); 

Label Imiddle = new Label(«127», Label.RIGHT); 

Imiddle.setBounds(0, 120, 30, 30); p.add(Imiddle); 

Label Imax = new Label(«255», Label.RIGHT); 

Imax.setBounds(0, 200, 30, 30); p.add(Imax);

sbRed.setBackground(Color.red);

sbRed.setBounds(40, 30, 20, 200); p.add(sbRed);

sbGreen.setBackground(Color.green);

sbGreen.setBounds(70, 30, 20, 200); p.add(sbGreen);

sbBlue.setBackground(Color.blue);

sbBlue.setBounds(100, 30, 20, 200); p.add{sbBlue);

Label Ip = new Label(«Образец:»);

lp.setBounds(250, 50, 120, 30); add dp);

1m.setBackground(new Color(127, 127, 127)); 

lm.setBounds(220, 80, 120, 80); add(lm); 

bl.setBounds(240, 200, 100, 30); add(bl); 

b2.setBounds(240, 240, 100, 30); add(b2);

setSize(400, 300); setVisible(true); 

public static void main(String[] args){

Frame f = new ScrollTestC’ Выбор цвета»); 

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){

System.exit(0); 

}

});

}