Сначала создается объект класса File по имени файла. Если файл существует, то устанавливается заголовок окна по имени файла, возможность менять размеры окна, исходные размеры окна и его положение. После этого устанавливается меню. Запоминается режим записи во внутреннюю переменную класса и определяется пустая строка для поиска. Далее считываются параметры шрифта (фонта), по номеру типа фонта задается сам фонт из пяти встроенных фонтов. Определяется контейнер окна, затем область редактирования как объект класса JTextArea. Устанавливается фонт показа символов как новый объект класса java.awt.Font с тремя параметрами в конструкторе: сам фонт, тип PLAIN (еще бывает BOLD и ITALIC, но здесь все зафиксировано), и размер букв. Затем делается попытка считать файл в текстовый массив целиком. Обработка ошибки стандартная. После этого массив байтов преобразуется в символьный массив. При этом вычеркивается символ с номером 13, так как редактор работает по системе UNIX, используя только символ с номером 10 как признак конца строки. И кроме того, отрицательные байты увеличиваются на 1104. Это фактически означает декодировку русских ASCII кодов в Windows кодировке в систему уникодов русских знаков. Для этого байт сначала переписывается в переменную типа short. Вообще то говоря, в Java существует более элегантная система кодировки, а на Windows компьютерах кодировка происходит автоматически при правильном задании локальных переменных. Но в других виртуальных машинах, поддерживающих Java, (например в Ewe) это не работает автоматически. А использовать более универсальную систему не хочется. Поэтому здесь реализована принудительная перекодировка русских ASCII файлов в Windows кодировке и для многих пользователей этого будет достаточно. После того, как массив уникодов определен, он преобразуется в строку с использованием конструктора класса String и строка записывается в область редактирования. Затем эта область вставляется в объект класса JScrollPane, который автоматически осуществляет появление линеек прокрутки, когда текст вылезает за заданные размеры, и последний объект добавляется в контейнер в центр. Я уже говорил, что для компоновки используются различные схемы - объекты классов Layout. Но мы пока все время используем компоновку по умолчанию, то есть BorderLayout. В учебниках этому вопросу уделяется очень много внимания, но реально это не столь важная материя и ее можно будет обсудить как нибудь потом. Если же файл не существует, выдается диагностика и на этом все заканчивается.
Далее идет код, создающий меню. Но тут вам уже все знакомо, так что мы это пропустим. Рассмотрим функции,
которые выполняются по различным разделам меню. Первая функция реализует поиск текста по заданной
комбинации символов. Прежде всего необходимо спросить у пользователя какой текст искать. Это делается заданием
нового объекта класса inpForm. Это диалог. Конструктор этого класса в качестве аргументов имеет: окно
программы, название окна диалога, массив текстов-комментариев, массив исходных текстов в окнах ввода,
число окон ввода, параметр задающий ширину окна диалога и параметр, определяющий конфигурацию окон ввода,
когда их много. В нашем случае только одно окно ввода. Исходный текст в окне ввода определяется строкой
с названием "tefi", а текст-комментарий вы можете прочитать. Конструктор составлен так, что он сам окно не
показывает. Можно делать различным образом и это один из них. Поэтому после конструктора вызывается метод
Второй раздел меню позволяет изменить параметры фонта. Параметры вводятся двумя числами. Поэтому из
полученной обратно строки надо выделить два числа. Это делается методом
В меню редактора нет разделов [Copy] [Cut] [Paste] [Select All]. Но эти функции выполняются по горячим клавишам Ctrl+C, Ctrl+X, Ctrl+V, Ctrl+A автоматически. Этого вполне достаточно. Более того, буфер является общим для операционной системы и позволяет переносить тексты из других и в другие программы.