Окончание работы с GUI

Для окончательного вида нам необходимо сделать еще три вещи:

  1. Сделать диалоговое окно для ввода данных при перемещении студентов из одной группы в другую
  2. Сделать диалог для ввода данных для студента
  3. Сделать форму для вывода отчета по всем студентам

Давайте начнем с формы для перемещения студентов из группы в группу. Сама по себе форма не сложная — давайте просто посмотрим код для класса и после этого код для вызова этой формы и реализации команды. Итак, наш новый класс GroupDialog.
Самое главное находится в его конструкторе — тут мы создаем все необходимые элементы — выпадающий список для групп и спинер для года. Также обратите внимание на то, как мы обрабатываем нажатие кнопок — ловим событие листенером и устанавливаем внутренне поле result в true или false.
Если объявить result как int, то по идее можно устанавливать фактически любое количество возможных результатов — т.е. любая кнопка может закрыть окно и можно потом проверить, какая конкретно была нажата.
Кроме этого мы воспользовались достаточно сложным layout’ом — GridBagLayout. Вы можете почитать о нем в статье Что такое LayoutManager

 

GroupDialog.java

Пока не будем приводить полностью код StudentsFrame. Покажем только наш новый вариант метода moveGroup

Теперь посмотрим, каким образом нам сделать класс для редактирования данных о студенте. Этот класс может служить как для добавления так и для редактирования — поля будут одинаковые. Отметим, что ИД студента должно где-то храниться и если этот ИД будет больше 0 — это может служить нам знаком, что студента надо редактировать — т.е. выполнить обновление данных. Если же ИД равен 0, то это значит, что данные надо будет добавить. Также у нас есть два варианта передачи данных:

  1. Передавть отдельно по всем полям, т.е. разбивать данные о студенте на строки, цифры и даты и передавать каждое поле отдельно своим сеттером и геттером.
  2. Передавать сразу всего студента целиком как экземпляр класса и получать его также

Мы выберем второй способ. Первый может быть привлекателен только если мы хотим сделать некое универсальное окно, которое потом использовать в других проектах. Но я думаю, что это больше затруднит нам работу. Количество методов будет велико и, на мой взгляд, не оправдано. Таким образом мы сделаем два метода setStudent/getStudent. setStudent распределит данные о студенте по всем полям, а getStudent соберет данные со всех полей и отдаст нам уже готовый экземпляр типа Student. Значение поля StudentId в экземпляре Student скажет нам, добавлять нового студента или изменить данные о существующем.
Также необходимо отметить, что нам потребуется конструктор для класса Student — сейчас он конструируется прямо из ResultSet. Нам же необходимо сделать конструктор без параметров. Он в общем-то совсем ничего не делает, но правила языка требуют. Мы ранее упоминали, что при добавлении студента программа будет позволять добавлять студента без закрытия окна — это удобно, когда набирают данные о новой группе. В этом случае мы оставляем данные о группе и годе такими же, а остальные поля очищаем. Всего у нас будет 7 полей:

  • Три обычных тескстовых поля — Фамилия, Имя, отчество
  • Спинер для выбора даты рожения — не очень он мне нравится, но вы можете его исправить до того, чтобы Вам хотелось
  • Радио-кнопки для выбора пола — муж/жен
  • Выпадающий список с группами
  • Спинер для выбора года обучения

Автор не претендует на высокий уровень дизайна данного окна — возможно специалисты по GUI выявят много недостатков. Моя цель — показать возможности GUI. Так что вы можете самостоятельно подправить неудачные места. Кроме этого отметим, что нам необходимо будет перегружать данные о студентах не выходя из диалогового окна — значит нам, во-первых, потребуется сделать метод StudentsFrame.reloadStudents()доступным (public). И также мы в конструкторе передаем ссылку на главную форму StudentsFrame чтобы можно было вызвать данный метод. Итак, вот наш класс для ввода данных для студента.

 

StudentDialog.java

Теперь нам осталось сделать только форму для показа полного списка студентов. И этот момент мне бы хотелось оставить вам для самостоятельного изучения. Если очень захочется узнать, как это надо сделать — пишите свои отзывы. И если их будет много — я что-нибудь придумаю.

Для сборки всех файлов нам потребуется команда

javac students/frame/*.java students/logic/*.java
Для сборки примера
javac -encoding UTF-8 students/frame/*.java students/logic/*.java

Для запуска нам надо указать в CLASSPATH файл mysqlJDBC-3.1.13-bin.jar

java -cp .;mysql-connector-java-3.1.13-bin.jar students.frame.StudentsFrame

Итак, мы в общих чертах прошли по возможностям Java в части работы с коллекциями, базами данных и пользовательским интерфейсом. Теперь нас ждет путешествие в мир Web — мы посмотрим, как можно создавать Интернет-приложения, как пользоваться сервлетами, java-server pages (JSP) и другими технологиями Java для мира Интернет. Представляем — Часть 7 — Первые шаги в Интернет

Архив с исходными кодами: Исходный код

2 comments to Пользовательский интерфейс, часть 3

  • Олег  says:

    Есть вопросик в методе getStudent() создается объект Student st = new Student(); с использованием конструктора по умолчанию new Student() которого нет. Как быть?

    • admin  says:

      Если конструктор не указан, это значит, что автоматически при компиляции будет создан конструктор без параметров.

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.