Компонент Checkbox
Компонент checkbox — это надпись справа от небольшого квадратика, в котором в некоторых графических системах появляется галочка после щелчка кнопкой мыши — компонент переходит в состояние (state) on. После следующего щелчка галочка пропадает — это состояние off. В других графических системах состояние on отмечается «вдавливанием» квадратика. В компоненте checkbox состояния on/off отмечаются логическими значениями true/false соответственно.
Три конструктора Checkbox (), Checkbox (String label), Checkbox (String label,
boolean state) создают компонент без надписи, с надписью label в состоянии off, и в заданном состоянии state.
Методы доступа getLabelO, setLabel (String label), getState(), setstate (boolean state) возвращают и изменяют эти параметры компонента.
Компоненты checkbox удобны для быстрого и наглядного выбора из списка на экране. Там же продемонстрирована ситуация, в которой нужно выбрать только один пункт из нескольких. В таких ситуациях образуется группа так называемых радиокнопок (radio buttons). Они помечаются обычно кружком или ромбиком, а не квадратиком, выбор обозначается жирной точкой в кружке или «вдавливанием» ромбика.
События
В классе Checkbox происходят события класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, а при изменении состояния кнопки возникает событие ItemEvent.
В библиотеке AWT радиокнопки не образуют отдельный компонент. Вместо этого несколько компонентов checkbox объединяются в группу с помощью объекта класса checkboxGroup.
Класс CheckboxGroup
Класс CheckboxGroup очень мал, поскольку его задача — просто дать общее имя всем объектам checkbox, образующим одну группу. В него входит один конструктор по умолчанию CheckboxGroup () и два метода доступа:
- getSelectedCheckbox() , Возвращающий выбранный объект Checkbox;
- setSelectedCheckbox (Checkbox box) , задающий выбор.
Как создать группу радиокнопок
Чтобы организовать группу радиокнопок, надо сначала сформировать объект класса CheckboxGroup, а затем создавать кнопки конструкторами
Checkbox(String label, CheckboxGroup group, boolean state)
Checkbox(String label, boolean state, CheckboxGroup group)
Эти конструкторы идентичны, просто при записи конструктора можно не думать о порядке следования его аргументов.
Только одна радиокнопка в группе может иметь состояние state = true.
Пора привести пример. В листинге 10.1 приведена программа, помещающая в контейнер Frame две метки Label сверху, под ними слева три объекта checkbox, справа — группу радиокнопок. Внизу — три кнопки Button.
Листинг 10.1. Размещение компонентов
import java.awt.*;
import j ava.awt.event.*;
class SimpleComp extends Frame{
SimpleComp(String s){ super(s);
setLayout(null);
Font f = new Font(«Serif», Font.BOLD, 15);
setFont(f);
Label 11 = new Label(«Выберите товар:», Labe1.CENTER);
l1.setBoundsdO, 50, 120, 30); add(11);
Label 12 = new Label(«Выберите способ оплаты:»);
l2.setBounds(160, 50, 200, 30); add(12);
Checkbox chl = new Checkbox(«Книги»);
chl.setBounds(20, 90, 100, 30); add(chl);
Checkbox ch2 = new Checkbox(«Диски»);
ch2.setBounds(20, 120, 100, 30); add(ch2);
Checkbox ch3 = new Checkbox(«Игрушки»);
ch3.setBounds(20, 150, 100, 30); add(ch3);
CheckboxGroup grp = new CheckboxGroup();
Checkbox chgl = new Checkbox(«Почтовым переводом», grp,-true);
chgl.setBounds{170, 90, 200, 30); add(chgl);
Checkbox chg2 = new Checkbox{«Кредитной картой», grp, false);
chg2.setBounds(170, 120, 200, 30); add(chg2);
Button b1 = new Button(«Продолжить»);
bl.setBounds( 30, 220, 100, 30); add(bl));
Button b2 = new Button(«Отменить»);
b2.setBounds(140, 220, 100, 30); add(b2);
Button b3 = new Button(«Выйти»);
b3.setBounds(250, 220, 100, 30); add(b3);
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args)(
Frame f = new SimpleComp (» Простые компоненты»);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
}
}
Заметьте, что каждый создаваемый компонент следует заносить в контейнер, в данном случае Frame, методом add(). Левый верхний угол компонента помещается в точку контейнера с координатами, указанными первыми двумя аргументами метода setBounds(). Размер компонента задается последними двумя параметрами этого метода.
Если нет необходимости отображать весь список на экране, то вместо группы радиокнопок можно создать раскрывающийся список — объект класса Choice.