Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Васюткина Технология разработки програм java (Горячев).doc
Скачиваний:
135
Добавлен:
23.03.2016
Размер:
1.84 Mб
Скачать

Флажки (или переключатели). Язык Java поддерживает два типа флажков-переключателей: неисключающие (класс jCheckBox) и исключающие (класс jRadioButton).

Неисключающие флажки (переключатели с независимой фиксацией) могут быть выбраны независимо от состояния других флажков. Такие флажки являются самостоятельными объектами класса JCheckBox, для их создания используются конструкторы JCheckBox () и JCheckBox (String label).

Исключающие флажки (переключатели с зависимой фиксацией) позволяют одновременно выбрать только один элемент в группе флажков. Если выбирается другой элемент в группе, то выбор предыдущего флажка отменяется, а новый выбор выделяется. Для создания такой группы флажков сначала создается объект класса ButtonGroup, а затем создаются объекты класса JRadioButton, входящие в эту группу, для чего используются конструкторы JRadioButton (String label) и JRadioButton (String label, boolean state).

// создание независимого флажка и добавление в контейнер

add(new JCheckBox("It is checkbox"));

// создание группы переключателей

ButtonGroup gr = new ButtonGroup();

// создание переключателей, добавление в группу и в контейнер

JRadioButton first, second, third;

first = new JRadioButton("1st radiobutton from group");

gr.add(first); add(first);

// переключатель установлен

second = new JRadioButton("2nd radiobutton from group",true);

gr.add(second); add(second);

third = new JRadioButton("3rd radiobutton from group");

gr.add(third); add(third);

Класс ButtonGroup содержит методы для определения текущего выбора и установки нового выбора для флажков группы. Метод getSelection() возвращает ссылку на объект класса ButtonModel, содержащего информацию о выделенном переключателе. Метод setSelected(ButtonModel model, boolean b) устанавливает выделение. Объект класса ButtonModel можно получить из переключателя JRadioButton методом getModel().

При помощи методов класса getText() и isSelected() класса JRadioButton можно получить метку переключателя и текущее состояние переключателя, а при помощи методов setText() и setSelected(boolean b) изменить метку переключателя и установить состояние переключателя.

Обработка событий от флажка в Java. При изменении состояния переключателя (JCheckBox) генерируется событие ItemEvent. Интерфейс для обработки - ItemListener, в нем один метод - itemStateChanged().

myCheckbox.addItemListener(new ItemListener() {

public void itemStateChanged(ItemEvent e ) {

boolean i = ((JCheckBox)e.getItem()).isSelected();

((JCheckBox)e.getItem()).setBackground(i ?

Color.red : Color.white);

}

});

Комбобоксы (или выпадающие списки). Класс jComboBox дает возможность создавать список элементов выбора, который всплывает на экране в виде меню.

JComboBox cb = new JComboBox();

cb.addItem("1"); cb.addItem("2");

cb.addItem("3"); add(cb);

Рассмотрим некоторые методы класса JComboBox. Количество элементов выбора в выпадающем списке можно определить методом getItemCount(), добавляются элементы методом addItem(), а получить элемент по его порядковому номеру можно с помощью функции getItemAt(int index).

Для того чтобы определить индекс выбранного элемента или сам выбранный элемент, имеются методы getSelectedIndex() и getSelectedItem(). Изменить выбор можно при помощи методов setSelectedIndex(int index) и setSelectedItem(Object object).

Обработка событий от меню выбора в Java. При изменении выбора в выпадающем списке (JComboBox) генерируется событие ItemEvent. Интерфейс для обработки – ItemListener, также как при обработке событий от JCheckBox.

Списки. Для создания списка необходимо создать объект класса JList и ввести в него любые элементы. Затем необходимо этот объект добавить в контейнер.

JList list = new JList();

Vector<String> data = new Vector<String>();

data.add("1st item");

data.add("2nd item");

data.add("3rd item");

list.setListData(data);

add(list);

Множественный выбор устанавливается по умолчанию (элементы выделяются с зажатым Ctrl). Для того чтобы сделать единичный выбор, добавьте строчку.

list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

Так как список связан с коллекцией Vector<String>, то можно изменять список, изменяя коллекцию. Для добавления/удаления элементов используются методы коллекции add(…)/remove(…).

Работа с выделенными элементами осуществляется через методы вида getSelected*(…) и setSelected*(…).

Обработка событий от списка в Java. При выборе строки (или нескольких строк) в списке JList вырабатывается событие ListSelectionEvent. Для прослушивания этого события используется интерфейс ListSelectionListener.

list.addListSelectionListener(new ListSelectionListener(){

public void valueChanged(ListSelectionEvent listSelectionEvent) {

JList l = (JList)listSelectionEvent.getSource();

if (l.getSelectedIndex() == 0) {

// todo something

}

else if (l.getSelectedIndex() == 1) {

// todo something else

}

}

});

Метки-надписи (класс Label) - это простейшие устройства. Не порождают событий и используются для размещения на экране строк текста.

// для метки задается выравнивание по центру

add(new JLabel("Label 1!", JLabel.CENTER));

Для изменения установок меток служат методы: setHorizontalAlignment(int) - устанавливает режим выравнивания, setText() - устанавливает текст надписи. Для получения текущего режима выравнивания используется метод getHorizontalAlignment(), а для определения текста надписи - метод getText().

Текстовые компоненты. Текстовые компоненты рассмотрим из библиотеки AWT. Дело в том, что по какой-то причине разработчики языка лишили компоненты JTextField и JTextArea обработчиков событий на изменение текста. Кроме того, классы JTextField и TextField (JTextArea и TextArea) очень похожи вплоть до названий методов. Так что если не планируется обрабатывать ввод текста можно воспользоваться классами из библиотеки Swing. Следует также напомнить, что в одном интерфейсе можно использовать компоненты из библиотеки Swing и AWT одновременно.

Поля редактирования этого типа TextArea состоят из нескольких строк текста и имеют полосы прокрутки. Напротив, поля редактирования типа TextField состоят из одной строки и не имеют полос прокрутки. Оба этих класса являются наследниками класса TextComponent и аналогичны друг другу.

Вывести текст в поле редактирования или получить текст из поля можно методами setText() и getText() соответственно. Для выделения фрагмента текста применяется метод select() (для выделения всего текста - метод selectAll()), а для получения номеров первого и последнего выделенных символов - методы getSelectionStart() и getSelectionEnd(). Для получения выделенного фрагмента текста используется метод getSelectedText(). Запретить или разрешить редактирование можно при помощи метода setEditable(), а проверить, разрешено ли редактирование - методом isEditable().

Например, создадим поле редактирования шириной 20 символов, инициализированной строкой "Enter text":

TextField tField=new TextField("Enter text",20);

add(tField);

Для получения информации о том, какова ширина текстового поля в символах, используется метод getColums().

Текстовые поля поддерживают ввод маскируемых символов (в Swing введен специальный класс JPasswordField), т.е. символов, ввод которых на экране отображается каким-либо одним символом (эхо-символом), а не фактически вводимыми символами. Для установки эхо-символа используется метод setEchoCharacter(), а для того, чтобы определить, какой символ используется в качестве эхо-символа, - метод getEchoChar(). Для проверки того, имеет ли поле эхо-символ, применяется метод echoCharIsSet().

Обработка событий от текстовых полей в Java. При работе с текстовыми полями можно использовать события ActionEvent и TextEvent. Первое вырабатывается, когда пользователь нажал клавишу Enter, а второе - при изменении текста. Первое событие прослушивается ActionListener, а второе - TextListener. Оба интерфейса имеют по одному методу, поэтому механизм обработки событий прост. Для текстовой области используется событие TextEvent.

textField1.addTextListener(new java.awt.event.TextListener() {

public void textValueChanged(TextEvent e) {

button1.setLabel("Изменяем текст в поле");

}

}); textField1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

button1.setLabel("Изменили текст в поле");

}

});

TextArea textArea1 = new TextArea(); textArea1.setText("textArea1"); textArea1.addTextListener(new java.awt.event.TextListener() {

public void textValueChanged(TextEvent e) {

button1.setLabel("Изменяем текст в области");

}

});