Компонент Checkbox — это кнопка с двумя состояниями. Графически она выглядит как надпись справа от небольшого квадратика, в котором в некоторых графических системах появляется галочка после щелчка кнопкой мыши — компонент переходит в состояние (state) on. После следующего щелчка галочка пропадает — это состояние off. В других графических системах состояние on отмечается "вдавливанием" квадратика. В компоненте Checkbox состояния on/off отмечаются логическими значениями true/false соответственно.
Три конструктора, Checkbox(), Checkbox(String label), Checkbox(String label, boolean state), создают компонент без надписи, с надписью label в состоянии off и в заданном состоянии state соответственно.
Методы доступа getLabel(), setLabel(String label), getState(), setState(boolean state) возвращают и изменяют эти параметры компонента.
Компоненты Checkbox удобны для быстрого и наглядного выбора из списка, целиком расположенного на экране, как показано на рис. 10.1. Там же продемонстрирована ситуация, в которой нужно выбрать только один пункт из нескольких. В таких ситуациях образуется группа так называемых
В классе Checkbox происходят события класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, а при изменении состояния кнопки возникает событие ItemEvent.
Класс
В библиотеке AWT радиокнопки не образуют отдельный компонент. Вместо этого несколько компонентов Checkbox объединяются в группу с помощью объекта класса
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 java.awt.event.*;
class SimpleComp extends Frame{
SimpleComp(String s){ super(s); setLayout(null);
Font f = new Font("Serif", Font.BOLD, 15); setFont(f);
Label l1 = new Label("Выберите товар:", Label.CENTER); l1.setBounds(10, 50, 120, 30); add(l1);
Label l2 = new Label("Выберите способ оплаты:"); l2.setBounds(160, 50, 200, 30); add(l2);
Checkbox ch1 = new CheckboxCR^™"); ch1.setBounds(20, 90, 100, 30); add(ch1);
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 chg1 = new Checkbox("Почтовым переводом", grp, true); chg1.setBounds(170, 90, 200, 30); add(chg1);
Checkbox chg2 = new Checkbox("Кредитной картой", grp, false); chg2.setBounds(170, 120, 200, 30); add(chg2);
Button b1 = new Button("Продолжить"); b1.setBounds( 30, 220, 100, 30); add(b1);
Button b2 = new Button("Отменить");
b2.setBounds(140, 220, 100, 30); add(b2);
Button b3 = new Button^^M™"); 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);
}
});
}
}
Рис. 10.1. Простые компоненты |
Заметьте, что каждый создаваемый компонент следует заносить в контейнер, в данном случае Frame, методом add (). Левый верхний угол компонента помещается в точку контейнера с координатами, указанными первыми двумя аргументами метода setBounds (). Размер компонента задается последними двумя параметрами этого метода.
Раскрывающийся список
Если нет необходимости отображать весь список на экране, то вместо группы радиокнопок можно создать раскрывающийся список объект класса Choice.
Компонент Choice — это раскрывающийся список, один, выбранный, пункт (item) которого виден в поле, а другие появляются при щелчке кнопкой мыши на небольшой кнопке справа от поля компонента.
Вначале конструктором Choice () создается пустой список.