Факультет "Информатика и системы управления"
Методические указания к лабораторной работе
по курсу "Распределенные системы обработки информации"
Программирование графики и обработка событий
Москва 2004 г.
Оглавление
Задание для домашней подготовки. 3
Задания к лабораторной работе. 3
Приложение 1. Спецификация класса Calc.6
Приложение 2. Иерархия классов AWT.9
Приложение 3. Основные компоненты.10
Приложение 4. Менеджеры размещения.16
Менеджер абсолютного размещения. 16
Приложение 5. Обработка событий.25
1. Познакомиться с библиотекой java.awt.
2. Научится обрабатывать события.
3. Освоить работу с управляющими компонентами и менеджерами размещения.
4. Применить полученные знания на практике
Ознакомиться с материалом, предоставленным в приложениях к данным методическим указаниям. Ознакомиться с текстом задания к лабораторной работе и написать программу.
Написать программу обработки щелчков на любую из трех кнопок, расположенных на панели. Каждый раз, когда пользователь щелкает мышью на какой-нибудь из трех кнопок, должен изменяться цвет панели (желтый, синий, красный).
o Написать программу–калькулятор, реализующую графический интерфейс.
Отчет должен содержать:
1. Постановку задачи, решаемой отлаженной программой.
2. Руководство пользователя отлаженной программы, содержащее описание интерфейсов всех функций программы.
3. Листинг программы с необходимыми комментариями.
1. Почему в программе необходимо записать обработчик события закрытия окна? Как закрыть окно в случае, если программа запущена без этого обработчика?
2. Какие менеджеры размещения компонентов вы знаете? В чем особенность каждого из них?
3. Измените программу так, чтобы метод getRez() вызывался при:
a) вводе текста в одно из текстовых полей
b) изменении состояния флажка (переключателей)
c) выборе одного из пунктов выпадающего списка
4. Как изменится работа программы, если внутри блока switch(){} не записывать операторы break.
5. Назовите два способа, которыми можно задать заголовок (title) окна.
Официальные источники:
1. Кен Арнольд, Джеймс Гослинг, Дэвид Холмс. Язык программирования Java™.
2. Официальный сайт Java — http://java.sun.com/ (есть раздел на русском языке с учебником).
3. Java™ 2 SDK, Standard Edition Documentation — http://java.sun.com/products/jdk/1.5/index.html.
4. Джеймс Гослинг, Билл Джой, Гай Стил. СпецификацияязыкаJava (TheJavaLanguageSpecification — http://www.javasoft.com/docs/books/jls/). Перевод на русский язык — http://www.uni-vologda.ac.ru/java/jls/index.html
5. Официальный сайт проекта Eclipse — http://www.eclipse.org/.
Другое:
1. Дмитрий Рамодин. Начинаем программировать на языке Java.
2. Николай Смирнов. Java 2: Учебное пособие.
3. Картузов А. В. Программирование на языке Java.
4. Вязовик Н.А. Программирование на Java.
5. Алексей Литвинюк. Введение в интегрированную среду разработки Eclipse — http://lib.juga.ru/article/articleview/174/1/69/.
importjava.awt.*; //подключение пакета с классами графических компонентов
importjava.awt.event.*; // подключение пакета с интерфейсами – “слушателями”
class Calc extends Frame implements ActionListener
//наследуем класс Frame (окно) и интерфейс “слушателя” события нажатия кнопки
{
TextFieldt1=newTextField(8); //размер поля – 8 символов
//… другие текстовые поля
Labell1=newLabel("(double)"); //метка по умолчанию содержит текст «(double)»
//… другие метки
Button b = new Button("Получить результат"); //кнопка
Checkboxcb=newCheckbox("+20%");//флажок с названием
Choicech;//выпадающий список
publicCalc(){//конструктор класса
super();
setSize(400,200);//размер окна
ch = newChoice();//конструктор выпадающего списка
ch.addItem("+");//добавляем пункты списка
//… другие пункты списка
setLayout(newFlowLayout()); //назначаем менеджер размещения компонентов (компоновщик)
add(l1);//выводим созданные компоненты на экран
add(t1);
add(ch);
//… и другие
addWindowListener(newWindowAdapter(){ //добавляем обработчик кнопки закрытия окна
public void windowClosing(WindowEvent e){
dispose(); System.exit(0);
}
}
);
b.addActionListener(this);//добавляемобработчикнажатиянакнопку
show();//делает окно видимым
}//конец конструктора
publicvoidgetRez(){//метод, вычисляющий результат
doublex, //значение из первого текстового поля
Rez=0; //результат
//… вторая переменная – значение второго текстового поля
try{
x=newDouble(t1.getText()).doubleValue();//извлечение числа из первого текстового поля
//…
switch(ch.getSelectedIndex()){//какой пункт выпадающего списка выбран? (номер)
case 0: Rez = x + /*вторая переменная*/; break;
case 1: //…
//… остальные операторы
};
if (cb.getState()) Rez*=1.2;//если флажок нажат, умножаем результат на 1.2
//записываем текст в поле (метку) результата с помощью метода setText(String.valueOf(Rez));
} //окончаниеблока try
catch(Exception ex){
String s=new String(ex.getMessage());
//записываем текст в поле (метку) сообщения об ощибке с помощью метода setText("Ошибка "+s);
}// окончание блока catch
}// окончание метода getRez()
public void actionPerformed(ActionEvent e){getRez();}//реализацияметода actionPerformed
//(метод вызывается нажатием на кнопку b), см. выше
publicstaticvoidmain(String []a){Calcclc=newCalc();} //создаем только экземпляр класса Calc и все.
} //окончание класса Calc
На рис. 1 показана иерархия основных классов AWT. Основу ее составляют готовые компоненты: Button, Canvas, Checkbox, Choice, Container, Label, List, Scrollbar, TextArea, TextField, Menubar, Menu, PopupMenu, Menultem, CheckboxMenuItem. Если этого набора не хватает, то от класса Canvas можно породить собственные "тяжелые" компоненты, а от класса Component — "легкие" компоненты.
Основныеконтейнеры — этоклассы Panel, ScrollPane, Window, Frame, Dialog, FileDialog. Свои "тяжелые" контейнеры можно породить от класса Panel, а "легкие" — от класса Сontainer.
На рис. 1 также показаны и начальные классы иерархии библиотеки Swing — классы JComponent, JWindow, JFrame, JDialog, JApplet.
Рис. 1 Иерархия основных классов AWT
Компонент Label — это просто строка текста, оформленная как графический компонент для размещения в контейнере. Текст можно поменять только методом доступа setText(string text), но не вводом пользователя с клавиатуры или с помощью мыши.
Создается объект этого класса одним из трех конструкторов:
· Label () — пустой объект без текста;
· Label (string text) — объект с текстом text, который прижимается клевому краю компонента;
· Label (String text, int alignment) — объект с текстом text и определенным размещением в компоненте текста, задаваемого одной из трех констант: CENTER, LEFT, RIGHT.
Размещение можно изменить методом доступа setAlignment(int alignment).
Остальные методы позволяют получить текст getText() и размещение getAlignment ().
В классе Label происходят события классов Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent.
Компонент Button — это кнопка стандартного для данной графической системы вида с надписью, умеющая реагировать на щелчок кнопки мыши — при нажатии она "вдавливается" в плоскость контейнера, при отпускании — становится "выпуклой".
Два конструктора Button () и Button (String label) создают кнопку без надписи и с надписью label соответственно.
Методы доступа getLabel() и setLabel (String label) позволяют получить и изменить надпись на кнопке.
Главная функция кнопки — реагировать на щелчки мыши, и прочие методы класса обрабатывают эти действия.
Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при воздействии на кнопку происходит событие ActionEvent.
Компонент Checkbox — это надпись справа от небольшого квадратика, в котором в некоторых графических системах появляется галочка после щелчка кнопкой мыши — компонент переходит в состояние on. После следующего щелчка галочка пропадает — это состояние off. В других графических системах состояние on отмечается "вдавливанием" квадратика. В компоненте Checkbox состояния on/off отмечаются логическими значениями true/false соответственно.
Три конструктора Checkbox (), Checkbox (Stringlabel), Checkbox (Stringlabel, boolean state) создают компонент без надписи, с надписью label в состоянии off, и в заданном состоянии state.
Методы доступа getLabel(), setLabel (String label), getState(), setState (boolean state) возвращают и изменяют эти параметры компонента.
В классе Checkbox происходят события класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, а при изменении состояния кнопки возникает событие ItemEvent.
В библиотеке AWT радиокнопки не образуют отдельный компонент. Вместо этого несколько компонентов Checkbox объединяются в группу с помощью объекта класса CheckboxGroup.