Технологии программирования

Задачи

Файлы и исключения

  1. Создайте функцию void fun(int x) throws Exception, которая бросает исключение для четных аргументов, и ничего не делает для нечетных аргументов. В методе main вызовите эту функцию с аргументами от 1 до 10 и для каждого аргумента выведите в консоль, возникло исключение или нет. Никакого другого текста, включая информацию о возникших исключениях, в консоль выводить не нужно.

  2. Создайте метод int readInt(String message), который выводит на экран сообщение message и ждет, когда пользователь введет число. Если пользователь ввел не число, ему отображается сообщение “это не число, попробуйте еще раз”, и снова предлагается ввести число. И так до тех пор, пока не будет введено число. Используйте метод Integer.parseInt(), и ловите исключение, которое он бросает, если не смог преобразовать строку в число.

  3. Дан список имен файлов. Предполагается, что эти файлы лежат в одном заранее выбранном вами каталоге. Нужно переименовать каждый файл так, чтобы в начало к нему был приписан номер файла в списке. Например, если был список a.txt, b.txt, то нунжо переименовать файлы в 1 a.txt и 2 b.txt. Для каждого файла выведите, удалось ли его переименовать, а если нет, то что именно пошло не так. Проследите, чтобы не выводилось лишней информации об ошибках наподобие содержимого стека. Используйте метод Files.move().

  4. Чтение и запись файлов в разных кодировках

    1. Заведите в программе переменную text и присвойте ей какой-нибудь русский текст длиной в одно предложение.
    2. Запишите текст в файлы text_utf8.txt, text_win1251.txt, text_koi8r.txt в соответствующих кодировках.
    3. Прочитать каждый файл побайтово (Files.readAllBytes()) и вывести байты в файлы, соответственно, text_utf8.bin и т.п. Байты выводятся текстом через пробел, т.е., например, 128 210 30. На сайте hexed.it вы можете проверить содержимое файлов и сравнить с тем, что получилось у вас.
    4. Для файла в кодировке koi8r сделать следующее. Прочитать все его байты. Если какой-то байт < 0, то добавить к его значению 128. Записать полученные байты в новый файл text_koi7r.txt. Записывайте байты в виде байт, а не в виде текста, как требовала прошлая задача. Откройте полученный файл в текстовом редакторе (можно через IDEA) и посмотрите, что получилось.

JavaFX

  1. Создайте интерфейс мессенджера, который мы обсудили на паре.
    • Добавьте в список контактов несколько человек, научите кнопку посылать сообщение в историю сообщений, запретите изменения в истории сообщений
  2. Реализуйте программу, которая показывает на экране круг и дает возможность изменять его размер, цвет и т.п. Окно приложения разделено на две части, в левой части находятся элементы управления для выбора цветов и размеров круга, в правой части находится круг. Нужны следующие элементы управления: Slider для выбора радиуса круга, два ColorPicker для выбора цвета круга и цвета фона. Добавьте заодно метки с текстом, чтобы было понятно, где радиус, где цвет фона, где цвет круга.

    1. Начните с создания левой части интерфейса, добавьте на левую панель все элементы интерфейса.

    2. Наполните правую часть интерфейса, она должна состоять из панели Pane, которая будет являться фоном и, соответственно, раскрашиваться и отвечать за цвет фона. На панели должен лежать Circle. Это такой узел (Node), который изображается в виде круга указанного радиуса.
    3. Свяжите цвет из первого ColorPicker c цветом круга.
    4. Свяжите значение из Slider с радиусом круга.
    5. Свяжите цвет из второго ColorPicker c цветом фона.
    6. Свяжите координаты x и y круга с половиной, соответственно, ширины и высоты правой панели. Тем самым круг расположится ровно по центру панели.
    7. Свяжите максимальное значение слайдера выбора радиуса с максимально возможным радиусом круга, при котором круг все еще помещается на панель.
  3. Просмотр изображений.
    1. Создайте интерфейс программы просмотра изображений из каталога. Интерфейс состоит из:
      • SplitPane, который занимает всё пространство и вертикально разделяет окно на две части
      • ListView для предпросмотра всех изображений. Он и занимает всю левую панель SplitPane.
      • Выбор каталога для просмотра. Это кнопка «Выбрать» справа сверху на правой панели SplitPane. И TextField с выбранным путем к каталогу. Он занимает все пространство слева от кнопки до ListView.
      • Всё оставшееся пространство на правой панели SplitPane занимает панель Pane с лежащей на ней ImageView. Она используется для просмотра полного изображения.
    2. Для начала выберите какой-то фиксированный каталог с изображениями, напишите код, который находит все файлы в этом каталоге и добавляет их в список ObservableList. Считайте пока, что все файлы в этом каталоге являются изображениями. В следующих пунктах нужно будет обрабатывать ошибки, и тогда потребуется исключить из списка все файлы, которые не удалось загрузить как изображения.
    3. Сделайте так, что при выборе изображения в списке, оно бы отображалось в ImageView. Для того, чтобы иметь доступ к выбранным элементам списка, нужно обратиться к myListView.getSelectionModel(). В этой Модели есть информация о выбранном элементе (файле), его индексе (номеру в списке), при этом выбранный элемент и его индекс — это свойства, поэтому вы можете следить за их изменениями и, при необходимотсти, связывать их с другими свойствами.
    4. Сделайте так, что ListView при отображении элемента показывает картинку и имя файла. Используйте CellFactory и метод setGraphics(new ImageView(...)) у вашего анонимного класса, наследника ListCell. А при загрузке картинки с диска, укажите, что вы хотите загрузить уменьшенную версию изображения, для этого можно при загрузке указать в качестве дополнительных аргументов размеры уменьшенной копии, например, 64 на 64.
    5. Сделайте так, что каталог можно выбирать. Используйте класс Directory Chooser. Это должен быть один DirectoryChooser на всю программу, созадйте его один раз при запуске программы, тогда он будет запоминать, какой каталог открывал в прошлый раз.
    6. Сделайте так, что если в данный момент в списке нет ни одного изображения, список пишет «нет изображений».
    7. Сделайте так, что если не выбрано ни одного изображения, в просмотрете изображения написано “выберите изображение”.
    8. Сделайте так, чтобы программа не ломалась при невозможности загрузить картинку, а как-то сообщала об этом пользователю или просто не отображала в списке картинку, которую невозможно загрузить.