Программирование графики и обработка событий
3 Факультет "Информатика и системы управления" Методические указания к лабораторной работе по курсу "Распределенные системы обработки информации" Программирование графики и обработка событий Москва 2004 г. Оглавление - Цель работы 3
- Задание для домашней подготовки 3
- Задания к лабораторной работе 3
- Задание 1 3
- Задание 2 3
- Содержание отчета 3
- Контрольные вопросы. 4
- Литература. 5
- Приложение 1. Спецификация класса Calc. 6
- Приложение 2. Иерархия классов AWT. 9
- Приложение 3. Основные компоненты. 10
- Компонент Label 10
- Компонент Button 10
- Компонент Checkbox 11
- Класс CheckboxGroup 11
- Компонент Choice 12
- Компонент TextField 13
- Контейнер Framе 14
- Приложение 4. Менеджеры размещения. 16
- Менеджер абсолютного размещения 16
- Менеджер FlowLayout 18
- Менеджер BorderLayout 18
- Менеджер GridLayout 19
- Менеджер CardLayout 20
- Менеджер GridBagLayout 21
- Приложение 5. Обработка событий. 25
Цель работы1. Познакомиться с библиотекой java.awt.2. Научится обрабатывать события.3. Освоить работу с управляющими компонентами и менеджерами размещения.4. Применить полученные знания на практикеЗадание для домашней подготовки Ознакомиться с материалом, предоставленным в приложениях к данным методическим указаниям. Ознакомиться с текстом задания к лабораторной работе и написать программу. Задания к лабораторной работеЗадание 1Написать программу обработки щелчков на любую из трех кнопок, расположенных на панели. Каждый раз, когда пользователь щелкает мышью на какой-нибудь из трех кнопок, должен изменяться цвет панели (желтый, синий, красный).Задание 2o Написать программу-калькулятор, реализующую графический интерфейс. Содержание отчетаОтчет должен содержать:Постановку задачи, решаемой отлаженной программой.Руководство пользователя отлаженной программы, содержащее описание интерфейсов всех функций программы.Листинг программы с необходимыми комментариями.Контрольные вопросы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 (The Java Language Specification -- http://www.javasoft.com/docs/books/jls/). Перевод на русский язык -- http://www.uni-vologda.ac.ru/java/jls/index.html5. Официальный сайт проекта 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/.Приложение 1. Спецификация класса Calc.import java.awt.*; //подключение пакета с классами графических компонентовimport java.awt.event.*; // подключение пакета с интерфейсами - “слушателями”class Calc extends Frame implements ActionListener//наследуем класс Frame (окно) и интерфейс “слушателя” события нажатия кнопки {TextField t1=new TextField(8); //размер поля - 8 символов//… другие текстовые поляLabel l1=new Label("(double)"); //метка по умолчанию содержит текст «(double)»//… другие меткиButton b = new Button("Получить результат"); //кнопкаCheckbox cb=new Checkbox("+20%");//флажок с названиемChoice ch;//выпадающий списокpublic Calc(){//конструктор классаsuper();setSize(400,200);//размер окнаch = new Choice();//конструктор выпадающего спискаch.addItem("+");//добавляем пункты списка//… другие пункты спискаsetLayout(new FlowLayout()); //назначаем менеджер размещения компонентов (компоновщик)add(l1);//выводим созданные компоненты на экранadd(t1);add(ch);//… и другие addWindowListener(new WindowAdapter(){ //добавляем обработчик кнопки закрытия окнаpublic void windowClosing(WindowEvent e){dispose(); System.exit(0);}});b.addActionListener(this);//добавляем обработчик нажатия на кнопкуshow();//делает окно видимым}//конец конструктораpublic void getRez(){//метод, вычисляющий результатdouble x, //значение из первого текстового поляRez=0; //результат//… вторая переменная - значение второго текстового поляtry{x=new Double(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));} //окончание блока trycatch(Exception ex){String s=new String(ex.getMessage());//записываем текст в поле (метку) сообщения об ощибке с помощью метода setText("Ошибка "+s);}// окончание блока catch}// окончание метода getRez()public void actionPerformed(ActionEvent e){getRez();}//реализация метода actionPerformed//(метод вызывается нажатием на кнопку b), см. вышеpublic static void main(String []a){Calc clc=new Calc();} //создаем только экземпляр класса Calc и все.} //окончание класса CalcПриложение 2. Иерархия классов AWTНа рис. 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 Приложение 3. Основные компонентыКомпонент Label Компонент 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 () и Button (String label) создают кнопку без надписи и с надписью label соответственно. Методы доступа getLabel() и setLabel (String label) позволяют получить и изменить надпись на кнопке. Главная функция кнопки -- реагировать на щелчки мыши, и прочие методы класса обрабатывают эти действия. События Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при воздействии на кнопку происходит событие ActionEvent. Компонент Checkbox Компонент Checkbox -- это надпись справа от небольшого квадратика, в котором в некоторых графических системах появляется галочка после щелчка кнопкой мыши -- компонент переходит в состояние 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 происходят события класса 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. Компонент Choice Компонент Сhoice -- это раскрывающийся список, один, выбранный, пункт (item) которого виден в поле, а другие появляются при щелчке кнопкой мыши на небольшой кнопке справа от поля компонента. Вначале конструктором Choice() создается пустой список. Затем, методом add (String text), в список добавляются новые пункты с текстом text. Они располагаются в порядке написания методов add() и нумеруются от нуля. Вставить новый пункт в нужное место можно методом insert (string text, int position). Выбор пункта можно произвести из программы методом select (String text) или select(int position). Удалить один пункт из списка можно методом remove (String text) или remove (int position), а все пункты сразу -- методом removeAll(). Число пунктов в списке можно узнать методом getItemCount (). Выяснить, какой пункт находится в позиции pos можно методом getItem(int pos), возвращающим строку. Наконец, определение выбранного пункта производится методом getSelectedIndex(), возвращающим позицию этого пункта, или методом getSelectedItem(), возвращающим выделенную строку. События В классе Choice происходят события класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, а при выборе пункта возникает событие ItemEvent. Если надо показать на экране несколько пунктов списка, то в этом случае используется объект класса List. Компонент TextField Компонент TextField -- это поле для ввода одной строки текста. Ширина поля измеряется в колонках (column). Ширина колонки -- это средняя ширина символа в шрифте, которым вводится текст. Нажатие клавиши <Enter> заканчивает ввод и служит сигналом к началу обработки введенного текста, т. е. при этом происходит событие ActionEvent. В классе четыре конструктора: · TextField() -- создает пустое поле шириной в одну колонку; · TextField(int columns) -- создает пустое поле с числом колонок columns;
Страницы: 1, 2, 3
|