
- •Амурский государственный университет Факультет математики и информатики
- •Допущено учебно-методическим объединением (умо) вузов
- •Методические указания к лабораторной работе
- •1. Простейшее приложение Hello
- •2. Структура Java-программы
- •2.1 Переменные
- •2.1.1 Примитивные типы
- •2.1.2 Ссылочные типы
- •2.2 Методы
- •2.3 Классы
- •2.3.1 Статические и динамические элементы (модификатор static)
- •2.3.2 Модификаторы доступа
- •2.3.3 Наследование классов
- •2.3.4 Специальные переменные
- •2.4 Пакеты и импортирование
- •2.4.1 Использование пакетов
- •2.4.2 Создание пакетов
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Простейший апплет Hello
- •1.1 Апплет Неllo, управляемый мышью
- •2. Простейший апплет HelloApplet, созданный Java Applet Wizard
- •2.1 Создание шаблона апплета HelloApplet
- •2.2 Исходные файлы апплета HelloApplet
- •2.3 Упрощенный вариант исходного текста апплета HelloApplet
- •3. Аргументы апплета
- •3.1 Передача параметров апплету
- •3.2 Апплет, принимающий параметры
- •3.4 Двойная буферизация графического изображения
- •4. События и их обработка
- •4.1 Обработчики событий от мыши и клавиатуры
- •4.2 Обработка событий
- •4.3 Апплет, обрабатывающий события
- •4.4 Устранение мерцания при выводе, двойная буферизация
- •5. Апплеты двойного назначения
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Рисование в окне
- •1.1 Графика
- •1.2 Цвет
- •1.3 Шрифты
- •1.4 Приложение FontsList
- •2. Обработка событий
- •2.1 Как обрабатываются события
- •2.2 События от мыши
- •2.3 Приложение LinesDraw
- •2.4 События от клавиатуры
- •2.5 Приложение KeyCodes
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Компоненты gui
- •2. Устройства или элементы управления
- •2.1 Кнопки
- •2.2 Флажки (или переключатели)
- •2.3 Меню выбора (или выпадающие списки)
- •2.4 Раскрывающиеся списки
- •2.5 Полосы прокрутки
- •2.6 Метки
- •2.7 Текстовые компоненты
- •3. Приложение AllElements
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Контейнеры
- •1.1 Панели
- •1.2 Окна
- •1.3 Рамки, фреймы
- •2. Менеджеры размещения компонентов
- •2.1 Типы менеджеров размещения
- •3. Поведение контейнера при наличии элементов управления
- •4. Приложение PanelsDemo1
- •5. Приложение PanelsDemo2
- •6. Приложение WindowsDemo
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Процессы, задачи и приоритеты
- •2. Реализация многозадачности в Java
- •2.1 Создание подкласса Thread
- •2.2 Реализация интерфейса Runnable
- •2.3 Применение мультизадачности для анимации
- •2.4 Апплет двойного назначения, реализующий интерфейс Runnable
- •3. Потоки (нити)
- •3.1 Состояние потока
- •3.2 Исключительные ситуации для потоков
- •3.3 Приоритеты потоков
- •3.4 Группы потоков
- •4. Приложение VertScroller
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Автономные приложения. Потоки данных. Работа с локальными файлами (2 часа) методические указания к лабораторной работе
- •1. Самостоятельные графические приложения
- •2. Потоки ввода-вывода в Java
- •2.1. Обзор классов Java для работы с потоками
- •2.2 Стандартные потоки ввода-вывода
- •2.3 Потоки, связанные с локальными файлами
- •2.3.1 Создание потоков, связанных с локальными файлами
- •2.3.2 Запись данных в поток и чтение их из потока
- •2.3.3 Закрытие потоков
- •2.3.4 Принудительный сброс буферов
- •2.3.5 Приложение StreamDemo
- •2.4 Потоки в оперативной памяти
- •3 Работа с локальной файловой система
- •3.1 Работа с файлами и каталогами
- •3.2 Приложение DirList
- •3.3 Произвольный доступ к файлам
- •3.4 Просмотр локальной файловой системы
- •3.5 Приложение FileDialogDemo
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Сетевые приложения: передача данных с использованием сокетов (2 часа)
- •1. Сокеты
- •2. Протокол tcp/ip, адрес ip и класс InetAddress
- •3. Потоковые сокеты
- •3.1 Создание и использование канала передачи данных
- •3.2 Конструкторы и методы класса Socket
- •3.3 Пример использования потоковых сокетов
- •4. Датаграммные сокеты (несвязываемые датаграммы)
- •4.1 Конструкторы и методы класса DatagramSocket
- •4.3 Пример использования датаграммных сокетов
- •5 Приложения ServerSocketApp и ClientSocketApp
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Связь по сети с помощью url (2 часа) методические указания к лабораторной работе
- •1. Универсальный адрес ресурсов url
- •2. Класс java.Net.Url в библиотеке классов Java
- •3. Использование класса java.Net.Url
- •3.1 Чтение из потока класса InputStream, полученного от объекта класса url
- •3.2 Получение содержимого файла, связанного с объектом класса url
- •4. Соединение с помощью объекта класса urlConnection
- •5. Приложение Diagram
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Создание и использование сервлетов (2 часа) методические указания к лабораторной работе
- •1. Как устроен сервлет
- •2. Вспомогательные классы
- •3. Запуск и настройка сервлетов
- •4. Сервлет example, принимающий параметры
- •5. Сервлет, обрабатывающий запросы на основе методов cet и post
- •6. Сервлет MyselfInfo
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Работа с базами данных, использование интерфейса jdbc(2 часа) методические указания к лабораторной работе
- •1. Написание апплетов, сервлетов и приложений jdbc
- •1.1 Соединение с базой данных
- •1.2 Применение интерфейса DatabaseMetaData
- •1.3 Посылка статичных sql-запросов
- •1.4 Посылка параметризированных и частовыполняемых sql-запросов
- •1.5 Выборка результатов
- •1.6 Применение интерфейса ResultSetMetaData
- •1.7 Доступ к хранимым функциям и процедурам
- •1.8 Применение выходных параметров
- •2. Обработка исключений jdbc
- •3. Отладка приложений jdbc
- •4. Сервлет, работающий с информацией из базы данных
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Приложение 1 java-файл простейшего апплета и html-документ со ссылкой на него
- •Приложение 2 java-файл апплета, принимающего параметры, и html-документ со ссылкой на него
- •Приложение 3 java-файл апплета, обрабатывающего простые события мыши, и html-документ со ссылкой на него
- •Приложение 4 java-файлы апплета двойного назначения и html-документ со ссылкой на него
- •Приложение 5 java-файлы апплета двойного назначения, обрабатывающего сообщения от мыши, и html-документ со ссылкой на него
- •Приложение 6 java-файл апплета двойного назначения, реализующего интерфейс runnable, и html-документ со ссылкой на него
- •Приложение 7 самостоятельное графическое java-приложение
2.2 События от мыши
В результате таких операций как нажатие и отпускание клавиши мыши, перемещение курсора мыши в окне апплета с нажатой или отпущенной клавишей, перемещение курсора мыши в окно и выход курсора из окна, возникают события, которые можно обработать специальными методами.
Все перечисляемые ниже методы должны вернуть значение true, если обработка события выполнена успешно и дальнейшая обработка не требуется. Если же методы вернут значение false, то событие будет обработано методом-обработчиком суперкласса, то есть для него будет выполнена обработка, принятая по умолчанию.
Нажатие клавиши мыши
Переопределение метода
public boolean mouseDown(Event evt, int x, int y);
позволяет отслеживать нажатия клавиши мыши. Через параметр evt передается объект Event, с помощью которого можно получить полную информацию о событии. Анализируя параметры x и y, можно определить координаты курсора на момент возникновения события.
Для отслеживания двойного щелчка мыши не предусмотрено никакого отдельного метода. Однако, анализ содержимого элемента clickCount переменной evt, можно определить кратность щелчка мыши:
if(evt.clickCount>1) showStatus("Mouse Double Click");
else showStatus("Mouse Down");
Отпускание клавиши мыши
При отпускании клавиши мыши управление получает метод
public boolean mouseUp(Event evt, int x, int y);
Анализируя параметры x и y, можно определить координаты точки, в которой пользователь отпустил клавишу.
Перемещение курсора мыши
Когда пользователь перемещает курсор мыши над окном апплета, в процессе перемещения происходит вызов метода
public boolean mouseMove(Event evt, int x, int y);
Через переменные x и y передаются текущие координаты курсора мыши.
Перемещение курсора мыши с нажатой клавишей
Операция «Drag and Drop» выполняется следующим образом: пользователь нажимает клавишу мыши и начинает перемещать курсор мыши, не отпуская клавиши. При этом происходит вызов метода
public boolean mouseDrag(Event evt, int x, int y);
Через переменные x и y передаются текущие координаты курсора мыши. Метод mouseDrag() вызывается даже в том случае, если в процессе перемещения курсор вышел за пределы окна апплета.
Вход курсора мыши в область окна
Когда курсор мыши в процессе перемещения по экрану попадает в область окна, управление передается методу
public boolean mouseEnter(Event evt, int x, int y);
Этот метод можно использовать для активизации апплета, на который указывает курсор мыши.
Выход курсора мыши в области окна
Если курсор покидает область окна апплета, вызывается метод
public boolean mouseExit(Event evt, int x, int y);
Если пользователь убрал из окна апплета, активизированного методом mouseEnter(), то метод mouseExit() может переключить апплет в пассивное состояние.
2.3 Приложение LinesDraw
Задание. Создать апплет двойного назначения LinesDraw, в окне которого можно рисовать прямые линии при помощи мыши. Для того, чтобы нарисовать в окне апплета линию, пользователь должен установить курсор в начальную точку, нажать клавишу мыши и затем, не отпуская ее, переместить курсор в конечную точку. После отпускания клавиши координаты линии должны сохраняться апплетом в массиве, после чего будет происходить перерисовка апплета. При перерисовке апплет будет пользоваться координатами всех нарисованных ранее линий. Для того, чтобы стереть содержимое окна апплета, необходимо сделать двойной щелчок в окне. При этом из массива координат должны будут удалены все элементы.
Методические указания. Апплет должен быть создан на основе шаблонов, содержащихся в Приложении 5 (или при помощи системы Java Applet Wizard).
Объявление элементов класса апплета.
В классе апплета объявим следующие элементы:
int xDown, yDown; // координаты нажатия клавиши
int xPrev, yPrev; // предыдущие координаты конца линии
boolean bDrawing; // признак включения/выключения режима рисования
Vector lines; // массив координат линий
В массив lines типа Vector будем добавлять элементы типа Rectangle, которые будут содержать координаты линии (класс Rectangle содержит элементы x, y, width, height, сохраненная линия будет идти от (x, y) до (x+width, y+height)). Для того, чтобы использовать класс Vector, в файл класса апплета импортируем пакет java.util:
import java.util.*;
Инициализация апплета ( метод init()).
При инициализации апплета в методе init() установим признак bDrawing равным false (установлен признак выключения режима рисования) и создадим массив lines при помощи конструктора без параметров Vector().
Перерисовка окна апплета (метод paint()).
Для перерисовки изображения в окне используется метод paint(), которому передается объект g типа Graphics (g - контекст отображения для окна). Методами этого класса пользуются для вывода графической информации в окно апплета.
Сначала раскрасим фон окна и нарисуем рамку окна. Для этого сделаем следующие действия: при помощи метода size() класса апплета получим текущий размер окна - объект appSize типа Dimension; методом g.setColor() выберем цвет фона Color.yellow; зарисуем всю внутреннюю область окна с помощью метода g.fillRect() и объекта appSize; методом g.setColor() выберем цвет рамки Color.black; нарисуем рамку вокруг окна методом g.drawRect(), используя объект appSize.
Дальше следует вывод всех уже нарисованных линий. Для этого: получим размер массива lines с помощью метода lines.size(); затем в цикле получим координаты каждой (i-той) линии и нарисуем ее
Rectangle p=(Rectangle)lines.elementAt(i);
g.drawLine(p.x, p.y, p.x+p.width, p.y+p.height);
После вывода всего изображения установим признак выключения режима рисования.
Обработка нажатия клавиши мыши (метод mouseDown()).
Если сделан двойной щелчок мышью, то очистим массив lines методом lines.removeAllElements() и перерисуем содержимое окна вызовом метода repaint().
Иначе, если произошло просто нажатие на клавишу, то необходимо сохранить начальную координату линии. Для этого запомним в элементах xDown и yDown координаты начала линии, которые содержатся в параметрах x и y, передаваемых методу mouseDown(). Предыдущие координаты конца линии xPrev и yPrev для процесса рисования сначала установим равными началу линии. Затем установим признак включения режима рисования.
Обработка отпускании клавиши мыши (метод mouseUp()).
Если установлен признак включения режима рисования, то это значит, что данная координата указателя является конечной точкой линии, и что координаты линии необходимо запомнить в массиве lines. Поэтому создадим новый объект Rectangle и добавим его в массив lines:
Rectangle p=new Rectangle(xDown,yDown,x-xDown,y-yDown);
lines.addElement(p);
Затем перерисуем содержимое окна методом repaint() и установим признак выключения режима рисования.
Обработка перемещения указателя мыши при нажатой клавише (метод mouseDrag()).
Для того, чтобы что-то нарисовать в окне апплета вне метода paint(), необходимо получить контекст отображения (методу paint() этот контекст передается через параметр). Получим этот контекст методом апплета getGraphics():
Graphics g=getGraphics();
Затем удалим изображение линии, нарисованное ранее. Для этого методом g.setColor() выберем цвет фона Color.yellow и нарисуем линию от (xDown, yDown) до (xPrev, yPrev) методом g.drawLine().
Нарисуем новую линию, установив методом g.setColor() цвет Color.black и проведя методом g.drawLine() линию от (xDown, yDown) до (x, y). Параметры x и y передаются методу mouseDrag().
Предыдущие координаты конца линии xPrev и yPrev для процесса рисования установим теперь равными x и y соответственно. После этого установим признак включения режима рисования.
Обработка перемещения указателя мыши без нажатой клавиши (метод mouseMove()).
В этом методе просто установим признак выключения режима рисования.