Главная страница
Навигация по странице:

  • Лабораторная работа № 3. Обработка событий

  • 3.1. Модель обработки событий

  • 3.2. Порядок выполнения лабораторной работы

  • Лабораторная работа № 4. Обработка исключений Цель работы: знакомство с механизмом обработки исключений в языке Java. 4.1. Описание процесса обработки исключений

  • 4.2. Порядок выполнения лабораторной работы

  • Лабораторная работа № 5. Сохранение и загрузка данных из файла

  • 5.1. Организация ввода-вывода данных

  • БЖД методичка. Метод указания лаб - последняя редакция (1). Методические указания к лабораторным работам СанктПетербург Издательство спбгэту лэти 2013


    Скачать 1.15 Mb.
    НазваниеМетодические указания к лабораторным работам СанктПетербург Издательство спбгэту лэти 2013
    АнкорБЖД методичка
    Дата06.09.2021
    Размер1.15 Mb.
    Формат файлаpdf
    Имя файлаМетод указания лаб - последняя редакция (1).pdf
    ТипМетодические указания
    #229976
    страница2 из 6
    1   2   3   4   5   6
    2.2. Порядок выполнения лабораторной работы
    1. Из задания к курсовой работе выберите экранную форму, содержащую от 8 до 12 графических компонентов.
    2. Опишите назначение экранной формы с указанием перечня вводимой и выводимой информации, а также списка функций, доступных пользователю.
    3. С помощью стандартных средств рисования или с использованием демоверсии Balsamiq Mockups спроектируйте внешний вид экранной формы.
    4. Для каждого нарисованного элемента экранной формы подберите из библиотеки java.awt или javax.swing подходящий графический компонент.
    5. Выберите способ компоновки графических элементов на экранной форме.
    6. Создайте класс «Приложение» и объявите в нем графические компоненты.
    7. Разработайте метод построения и визуализации экранной формы, который создает и размещает объявленные графические компоненты с помощью выбранных классов компоновки. В код метода должны быть вставлены комментарии документации, отражающие процесс построения экранной формы.
    8. Создайте и отобразите разработанную экранную форму.
    9. Сгенерируйте документацию с помощью Javadoc и просмотрите ее в браузере.
    2.3. Содержание отчета
    Отчет по лабораторной работе должен содержать:
    1. Описание назначения экранной формы.
    2. Макет экранной формы.
    3. Описание проверки работоспособности приложения и экранные формы, которые отображаются при запуске контрольного примера.
    4. Текст документации, сгенерированный Javadoc.
    5. Текст программы.

    17
    Лабораторная работа № 3. Обработка событий
    Цель работы: знакомство со способами подключения слушателей со- бытий к графическим компонентам пользовательского интерфейса.
    3.1. Модель обработки событий
    Графический пользовательский интерфейс относится к системам, управляемым по событиям. При запуске приложения создается пользова- тельский интерфейс, а затем приложение переходит в состояние ожидания некоторого события. Событие в пользовательском интерфейсе

    это либо не- посредственное действие пользователя (щелчок или движение мыши, нажа- тие клавиши), либо изменение состояния какого-либо компонента интерфей- са (например, щелчок мышью может привести к нажатию кнопки). При на- ступлении события программа выполняет необходимые действия, а затем снова переходит в состояние ожидания.
    Модель обработки событий базируется на концепции источника и слу- шателя (listener) событий. Источник

    это объект, который генерирует собы- тие. Генерация события происходит тогда, когда каким-то образом изменяет- ся внутреннее состояние объекта. Источники могут генерировать несколько типов событий. Чтобы блоки прослушивания могли принимать уведомление об определенном типе событий, источник должен регистрировать эти блоки.
    Каждый тип событий имеет собственный метод регистрации. Общая форма таких методов: public void addTypeListener(TypeListener el)
    Здесь Type

    это имя события, a el

    ссылка на блок прослушивания события. Например, метод, который регистрирует блок прослушивания со- бытия клавиатуры, называется addKeyListener; метод, регистрирующий об- работчика таких событий мыши, как вход мыши в область компонента и вы- ход из нее, нажатие клавиши мыши, отпускание клавиши и клик мышью по компоненту, – addMouseListener, а метод, который регистрирует обработчи- ка событий простого движения мыши над компонентом и движения с нажа- той клавишей (drag),

    addMouseMotionListener.
    Блок прослушивания может быть описан либо как отдельный имено- ванный класс, либо как анонимный внутренний класс, создание которого со- вмещено с его определением при описании вызова метода регистрации.
    В обоих случаях классы должны реализовать интерфейс, соответствующий данному событию.

    18
    Когда событие происходит, все зарегистрированные блоки прослуши- вания уведомляются о происшедшем событии и принимают копию объекта события. Чтобы удалить блок прослушивания клавиатуры, следует вызвать метод public void removeTypeListener(TypeListener el)
    Все события в AWT классифицированы. При возникновении события исполняющая система Java автоматически создает объект соответствующего событию класса. В таблице приведены определенные в пакете java.awt.event типы событий, источники этих событий, интерфейс слушателей, а также ме- тоды, определенные в каждом интерфейсе слушателя.
    Класс события
    Источник события Интерфейс слушателя
    Методы слушателя
    ActionEvent
    Button (пользова- тель нажал кноп- ку); List (пользова- тель выполнил двойной щелчок мышью на элемен- те списка);
    TextField (пользо- ватель нажал кнопку Enter);
    MenuItem (пользо- ватель выбрал пункт меню)
    ActionListener actionPerformed()
    AdjustmentEvent
    Scrollbar (пользо- ватель осуществил прокрутку)
    AdjustmentListener adjustmentValueChanged()
    ComponentEvent
    Во всех компонен- тах (элемент либо перемещен, либо он стал скрытым, либо видимым)
    ComponentListener componentHidden() componentMoved() componentResized() componentShown()
    ContainerEvent
    Container
    Dialog,
    FileDialog, Frame,
    Panel,
    ScrollPane,
    Window (элемент добавлен в кон- тейнер или удален из него)
    ContainerListener componentAdded() componentRemoved()

    19
    Продолжение табицы
    Класс события
    Источник события Интерфейс слушателя
    Методы слушателя
    FocusEvent
    Во всех компонен- тах (элемент полу- чил или потерял фокус ввода)
    FocusListener focusGained() focusLost ()
    ItemEvent
    Checkbox (пользо- ватель установил или сбросил фла- жок);
    Choice
    (пользователь вы- брал элемент спи- ска или отменил его выбор);
    List (пользователь выбрал элемент списка или отме- нил выбор)
    ItemListener itemStateChanged()
    KeyEvent
    Во всех компонен- тах (пользователь нажал или отпус- тил клавишу)
    KeyListener keyPressed() keyReleased() keyTyped()
    MouseEvent
    Во всех компонен- тах (пользователь нажал или отпус- тил клавишу мы- ши, либо курсор мыши вошел в об- ласть, занимаемую элементом, или покинул ее, либо пользователь про- сто переместил мышь или пере- местил мышь при нажатой клавише мыши)
    MouseListener mouseClicked() mouseEntered() mouseExited() mousePressed() mouseReleased()
    MouseMotionListener mouseDragged() mouseMoved()

    20
    Окончание таблицы
    Класс события
    Источник события Интерфейс слушателя
    Методы слушателя
    TextEvent
    Textcomponent
    TextArea, TextField
    (пользователь внес изменения в текст элемента)
    TextListener textValueChanged()
    WindowEvent
    Frame,
    Dialog,
    FileDialog, Window
    (окно было откры- то, дана команда на закрытие окна, окно закрыто, представлено в виде пиктограм- мы, восстановлено или требует вос- становления)
    WindowListener windowActivated() windowClosed() windowClosing() windowDeactivated() windowDeiconified() windowlconified() windowOpened()
    Блок прослушивания (обработчик)

    это объект, который получает уведомление, когда происходит событие. Он должен реализовать методы для приема и обработки этих уведомлений. Методы, которые принимают и обра- батывают события, определены в наборе интерфейсов, находящихся в пакете java.awt.event. Например, интерфейс MouseMotionListener определяет 2 мето- да для приема уведомлений о событиях перетаскивания или передвижения мыши. Любой объект может принимать и обрабатывать одно или оба этих события, если он обеспечивает реализацию данного интерфейса.
    По установленному соглашению, методам слушателей событий может быть передан только один аргумент, являющийся объектом того события, ко- торое соответствует данному слушателю. В этом объекте содержится вся информация, необходимая программе для формирования реакции на данное событие. Для доступа к этой информации можно воспользоваться методами, определенными для каждого класса событий. В частности, для события
    KeyEvent команда getKeyChar() возвращает символ типа char, связанный с нажатой клавишей. Если с нажатой клавишей не связан никакой символ, воз- вращается константа CHAR_UNDEFINED. Команда getKeyCode() возвратит код нажатой клавиши в виде целого числа типа int. Его можно сравнить с од- ной из многочисленных констант, определенных в классе KeyEvent: VK_F1,

    21
    VK_SHIFT, VK_D, VK_MINUS и т. д. Методы isAltDown(), isControlDown(), isShiftDown() позволяют узнать, не была ли одновременно нажата одна из клавиш-модификаторов Alt, Ctrl или Shift. Более подробное описание классов событий можно найти по следующей ссылке: http://docs.oracle.com/javase/6/docs/api/java/awt/event/package-summary.html
    Для иллюстрации способа подключения слушателей событий к графи- ческим компонентам пользовательского интерфейса рассмотрим добавление слушателя к кнопке «Поиск» для интерфейса пользователя, разработанного во второй лабораторной работе. При нажатии на эту кнопку левой клавишей мыши на экран выводится сообщение «Проверка нажатия на кнопку» (рису- нок).
    Результат нажатия кнопки «Поиск»
    Чтобы реализовать указанную функциональность, в приложение долж- ны быть добавлены следующие строчки кода: import java.awt.event.*; filter.addActionListener (new ActionListener()
    { public void actionPerformed (ActionEvent event)
    {
    JOptionPane.showMessageDialog (bookList, "Проверка нажатия на кнопку");
    }};

    22
    Первая строка приведенного кода необходима для доступа приложения к стандартной библиотеке java.awt.event. Следующий фрагмент кода добав- ляется в метод show(). Он подключает к объекту filter (кнопка «Поиск») слу- шателя ActionListener, который отслеживает появление события ActionEvent
    (нажатие на кнопку). Слушатель описан как неименованный класс, реали- зующий метод actionPerformed. Для вывода сообщения пользователю ис- пользуется класс JOptionPane, содержащий несколько статических методов, отображающих стандартные диалоги. Метод showMessageDialog() выводит на экран диалоговое окно, информирующее пользователя. Оно содержит надпись, значок и кнопку ОК. В качестве первого параметра метода указыва- ется компонент, над которым должно появиться диалоговое окно.
    3.2. Порядок выполнения лабораторной работы
    1. Создайте новый проект, который будет дублировать проект лабораторной работы № 2.
    2. Выявите на экранной форме, разработанной в лабораторной работе
    № 2, события, в ответ на которые потребуется реакция приложения.
    3. К двум-трем разнотипным компонентам графического интерфейса пользователя напишите код слушателей. Слушатели должны реализовать полностью или частично свою функциональность, вывести на экран результат своей работы или информационное сообщение. В код слушателей должны быть вставлены комментарии документации, отражающие их работу.
    4. Запустите приложение и снимите с экрана скриншоты, иллюстрирующие работу слушателей.
    5. Сгенерируйте документацию с помощью Javadoc и просмотрите ее в браузере.
    3.3. Содержание отчета
    Отчет по лабораторной работе должен содержать:
    1. Описание действий, которые должны реализовать слушатели.
    2. Скриншоты, иллюстрирующие работу слушателей.
    3. Текст документации, сгенерированный Javadoc.
    4. Исходные тексты слушателей.

    23
    Лабораторная работа № 4. Обработка исключений
    Цель работы: знакомство с механизмом обработки исключений в языке
    Java.
    4.1. Описание процесса обработки исключений
    Исключение

    это объект, который описывает исключительную ситуа- цию, возникшую в каком-либо участке программного кода. Когда возникает исключительная ситуация, создается объект, который пересылается в метод
    (обработчик ситуации), обрабатывающий данный тип исключительной си- туации. Исключения делятся на стандартные (класс Exception) и собствен- ные, описывающие нестандартные ситуации. Стандартные исключения гене- рируются автоматически методами библиотеки классов Java при возникнове- нии ошибочных ситуаций, например выход за пределы массива или строки в процессе индексации, деление на нуль, попытка использования ссылки со значением null, недопустимое преобразование классов и т. д. В стандартном исключении имеются методы toString() и getMessage(), которые позволяют получить строку, содержащую сообщение об ошибке.
    Для создания собственного класса исключения необходимо наследо- вать его от Exception. Генерация такого исключения осуществляется с помо- щью оператора throw Обект. При достижении этого оператора нормальное выполнение кода прекращается и управление передается обработчику ис- ключения. Ниже приведена общая форма обработки исключений.
    try {
    // блок кода, где контролируются появления исключения
    }
    catch (ТипИсключения1 е)
    {
    // обработчик исключений типа ТипИсключения1
    }
    catch (ТипИсключения2 е)
    {
    // обработчик исключений типа ТипИсключения2
    }
    finally
    { // обработчик остальных исключений
    }
    Для задания блока программного кода, в котором требуется контроли- ровать появление исключений, используется блок try. Сразу же после try- блока помещаются блоки catch, где обрабатываются заданные типы исклю- чений. Поиск нужного блока catch осуществляется в порядке их написания,

    24 поэтому первыми должны идти блоки catch, параметрами которых являются производные типы исключений. Если требуется перехватить другие исклю- чения, не упомянутые в блоках catch, то последним обработчиком должен быть блок finally.
    Метод, способный возбуждать исключения, которые он сам не обраба- тывает, должен объявить о таком поведении, чтобы вызывающие методы могли защитить себя от этих исключений. Для задания списка исключений, которые могут возбуждаться методом, используется спецификация исключе- ний. Спецификация исключений описывается в заголовке метода после клю- чевого слова throws:
    тип имя_метода (список аргументов) throws список_исключений {}
    В качестве примера рассмотрим использование исключений для кон- троля за значением в поле ввода названия книги при нажатии кнопки «По- иск». Чтобы реализовать такой контроль, в приложение необходимо доба- вить метод checkName, который будет генерировать собственное исключение
    MyException и стандартное исключение NullPointerException (контролирует ссылку, содержащую значение null). Первое исключение генерируется, если поле ввода содержит строку «Название книги», а второе

    если поле ввода пустое. Описание класса MyException и метода checkName приведено ниже: private class MyException extends Exception { public MyException() { super ("Вы не ввели название книги для поиска");
    }} private void checkName (JTextField bName) throws MyException,NullPointerException
    {
    String sName = bName.getText(); if (sName.contains("Название книги")) throw new MyException(); if (sName.length() == 0) throw new NullPointerException();
    }
    Класс собственного исключения MyException наследует класс
    Exception и содержит конструктор, который вызывает конструктор базового класса (super) и передает информацию об исключении. Поскольку контроль за значением поля ввода должен осуществляться при нажатии кнопки «По- иск», то необходимо изменить слушателя этого объекта. Его код будет иметь следующий вид: filter.addActionListener(new ActionListener() {
    public
    void
    actionPerformed(ActionEvent arg0) {
    try
    { checkName(
    bookName
    );
    }

    25
    catch
    (NullPointerException ex) {
    JOptionPane.showMessageDialog(
    bookList
    , ex.toString());
    }
    catch
    (MyException myEx) {
    JOptionPane.showMessageDialog(
    null
    , myEx.getMessage());
    }}};
    Данный слушатель будет реагировать следующим образом: если в по- ле ввода содержится строка «Название книги», то будет выведено сообще- ние, представленное на рис. 4.1; если поле ввода пусто, то будет выведено сообщение, представленное на рис. 4.2.
    Рис. 4.1. Сообщение на собственное исключение MyException
    Рис. 4.2. Сообщение на стандартное исключение NullPointerException

    26
    4.2. Порядок выполнения лабораторной работы
    1. Создайте новый проект, который будет дублировать проект лабораторной работы № 3.
    2. Проанализируйте методы приложения и определите ошибочные ситуации, которые необходимо в них контролировать.
    3. Напишите 1

    2 класса собственных исключений. В текст классов должны быть вставлены комментарии документации, поясняющие типы контролируемых ситуаций.
    4. Задайте спецификацию исключений и разработайте код методов, где генерируются исключительные ситуации.
    5. Разработайте код методов, где контролируются и обрабатываются исключительные ситуации.
    6. Запустите приложение и снимите с экрана скриншоты, иллюстрирующие работу обработчиков ситуаций.
    7. Сгенерируйте документацию с помощью Javadoc и просмотрите ее в браузере.
    4.3. Содержание отчета
    Отчет по лабораторной работе должен содержать:
    1. Перечень ситуаций, которые контролируются с помощью исключений.
    2. Скриншоты, иллюстрирующие работу обработчиков ситуаций.
    3. Текст документации, сгенерированный Javadoc.
    4. Исходные тексты классов собственных исключений, методов, где генерируются и обрабатываются исключительные ситуации.
    Лабораторная работа № 5. Сохранение и загрузка данных из файла
    Цель работы: знакомство с организацией обмена данными между объ- ектами экранной формы и файлом.
    5.1. Организация ввода-вывода данных
    В языке Java функции ввода-вывода информации реализованы в соста- ве стандартного пакета Java.io и определены в терминах потоков данных. По- токи данных

    это упорядоченные последовательности данных, которым со- ответствует определенный источник (для потоков ввода) или получатель
    (для потоков вывода). Ввод-вывод может быть либо текстовым (по16 бит на

    27 символ в кодировке Unicode), либо бинарным (8 бит). Бинарные потоки при- нято называть потоками ввода (input streams) и потоками вывода (output streams), а символьные

    потоками чтения (readers) и потоками записи
    (writers).
    Для входных потоков readers и input streams определены 4 метода:

    read ()

    возвращает один символ или байт, взятый из входного пото- ка, в виде целого значения типа int; если поток уже закончился, возвращает

    1;

    read (char[] buf)

    для потока чтения заполняет заранее определенный массив buf символами из входного потока; для потока ввода массив типа byte[] заполняется байтами; метод возвращает фактическое число взятых из потока элементов или

    1, если поток уже закончился;

    read (char[] buf, int offset, int len)

    заполняет часть символьного или байтового массива buf, начиная с индекса offset, число взятых из потока эле- ментов равно len; метод возвращает фактическое число взятых из потока элементов или

    1;

    skip (long n) «проматывает» поток с текущей позиции на n символов или байт вперед. Эти элементы потока не вводятся методами read(). Метод возвращает реальное число пропущенных элементов, которое может отли- чаться от n, например поток может закончиться.
    Для выходных потоков writers и output stream определены 3 метода:

    write (char[] buf)

    выводит массив в выходной поток, для потока output stream массив имеет тип byte[];

    write (char[] buf, int offset, int len)

    выводит len элементов массива buf, начиная с элемента с индексом offset;

    write (int elem) в классе Writer

    выводит 16, а в потоке output stream
    8 младших бит аргумента elem в выходной поток.
    Для потока writer есть еще 2 метода:

    write (string s)

    выводит строку s в выходной поток;

    write (String s, int offset, int len)

    выводит len символов строки s, на- чиная с символа с номером offset.
    Буферизованные потоки являются расширением стандартных потоков, в них к потокам ввода-вывода присоединяется буфер в памяти. Этот буфер вы- полняет две основные функции:

    28

    позволяет проделывать за один раз операции ввода-вывода более чем с одним байтом, тем самым повышая производительность ввода-вывода;

    делает возможным такие операции, как пропуск данных в потоке, ус- тановка меток и очистка буфера.
    Четыре класса выполняют буферизованный ввод/вывод:
    BufferedReader, BufferedlnputStream, BufferedWriter, BufferedOutputStream.
    При буферизованном выводе элементы сначала накапливаются в буфере опе- ративной памяти и выводятся в выходной поток только после того, как буфер заполнится. Это удобно для выравнивания скоростей вывода из программы и вывода потока, но часто надо вывести информацию в поток еще до заполне- ния буфера. Для этого предусмотрен метод flush. Данный метод сразу же вы- водит все содержимое буфера в поток. В классе BufferedReader имеется ме- тод readLine( ), позволяющий прочитать целиком строку из потока.
    Для работы с текстовыми файлами используются производные клас- сы FileReader и FileWriter. Эти классы могут считывать файлы посим- вольно, используя метод read(), или же построчно, с помощью метода readLine(). У классов FileReader и FileWriter также есть аналоги,
    BufferedReader и BufferedWriter, позволяющие ускорить работу с файлами.
    Если программа должна записывать текстовые данные на диск, то можно ис- пользовать один из перегруженных методов write() класса FileWriter.
    Эти методы позволяют записать в файл символ, строку String или целый массив символов. У класса FileWriter есть несколько перегруженных конст- рукторов. Если открыть файл, задав только его имя, то он будет перезаписан заново при каждом запуске программы. Если нужно дозаписать данные в уже существующий файл, то нужно использовать конструктор с двумя аргу- ментами: имя и параметр true, что означает режим добавления, если файл существует. По окончании работы с файлом его необходимо закрыть мето- дом close().
    Объекты класса IOException используются многими методами ввода- вывода в качестве сигнала о возникновении исключительной ситуации. Не- которые классы, производные от IOException, служат для представления конкретных проблем ввода-вывода, но в большинстве случаев используются объекты IOException со строкой, содержащей описание ошибки.
    Прежде чем начать программировать файловый ввод-вывод данных, необходимо определить формат, в котором будут храниться данные в файле.
    Если входные данные готовятся с помощью внешнего текстового редактора,

    29 а затем загружаются в экранную форму, то целесообразно использовать фай- лы, созданные на основе символьных потоков чтения и записи. Такие файлы могут представлять собой строки символов без разделителей или с раздели- телями (CVS-формат). Исходный файл в формате CSV легко можно подго- товить в любом редакторе, но удобнее для этих целей использовать Microsoft
    Excel. Если требуется сначала записать данные в файл и эти данные имеют разнотипные значения (целые, вещественные, символы, строки), то целесо- образно использовать классы DataInputStream и DataOutputStream, созданные на основе бинарных потоков FileInputStream и FileOutputStream.
    1   2   3   4   5   6


    написать администратору сайта