JavaRush /Курсы /Java Multithreading /Большая задача: HTML редактор на Java

Большая задача: HTML редактор на Java

Java Multithreading
8 уровень , 15 лекция
Открыта

— Привет, Амиго!

— Здравия желаю, Капитан Бобров!

— Боец, для тебя есть секретная миссия. Ты будешь разрабатывать инструмент для создания веб — страниц.

— Круто, веб – страницы. А зачем нам свой редактор?

— Как это зачем? Боец, приказы не обсуждаются, а выполняются.

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

— Да не кричи ты. Говорят же тебе – полностью секретное задание.

— Для выполнения обратись к агенту Intellij IDEA. Он введет тебя в курс дела.

— Все дальнейшие инструкции также через него.

— Разрешите приступить, сэр?

— Приступайте.

Большая задача: HTML редактор на Java - 1
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (1)
Сегодня мы напишем HTML редактор с графическим интерфейсом. В качестве библиотеки для создания графического интерфейса воспользуемся Swing. А в качестве архитектурного каркаса нашего приложения будем использовать MVC модель. 1.1. Объяви класс Controller и класс View. Класс View должен быть унаследов
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (2)
2.1. Добавь в контроллер и представление по методу init(), пока без реализаций. Они будут отвечать за инициализацию контроллера и представления. 2.2. Теперь напишем в классе Controller метод main(). Он должен: 2.2.1. Создавать объект представления. 2.2.2. Создавать контроллер, используя представлени
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (3)
Графический интерфейс будет представлять собой окно, в котором будет меню и панель с двумя вкладками. На первой вкладке будет располагаться текстовая панель, которая будет отрисовывать html страницу. На ней можно будет форматировать и редактировать текст страницы. На второй вкладке будет редактор, к
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (4)
4.1. Объяви методы initMenuBar() и initEditor() в классе View. Они будут отвечать за инициализацию меню и панелей редактора. 4.2. Объяви в представлении метод initGui(). Он будет инициализировать графический интерфейс. Вызови из него инициализацию меню initMenuBar(), инициализацию редактора initEdit
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (5)
5.1. Объяви класс TabbedPaneChangeListener реализующий интерфейс ChangeListener в пакете listeners. Этот класс будет слушать и обрабатывать изменения состояния панели вкладок. Реализуй в этом классе: 5.1.1. Конструктор, принимающий представление в виде параметра и сохраняющий во внутреннее поле view
32
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (6)
Реализуй метод инициализации панелей редактора initEditor(). Он должен: 6.1. Устанавливать значение "text/html" в качестве типа контента для компонента htmlTextPane. Найди и используй подходящий метод. 6.2. Создавать новый локальный компонент JScrollPane на базе htmlTextPane. 6.3. Добавлять вкладку
32
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (7)
Добавь класс MenuHelper. Это будет вспомогательный класс для инициализации и настройки меню. У меню будет следующая структура: - Файл -- Новый -- Открыть -- Сохранить -- Сохранить как... -- Выход - Редактировать -- Отменить -- Вернуть -- Вырезать -- Копировать -- Вставить - Стиль -- Полужирный --
32
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (8)
Пришло время добавить все необходимые пункты меню и написать классы действий, выполняемые при нажатии. Это довольно трудоемкая и рутинная работа, а ты отличный ученик и не хотелось бы тебя огорчать. Поэтому, в качестве бонуса ты получаешь готовый класс MenuHelper! А ты: 8.1. Напиши в пакете actions
32
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (9)
9.1. Реализуй метод initMenuBar(). Он должен: 9.1.1. Создавать новый объект типа JMenuBar. Это и будет наша панель меню. 9.1.2. С помощью MenuHelper инициализировать меню в следующем порядке: Файл, Редактировать, Стиль, Выравнивание, Цвет, Шрифт и Помощь. 9.1.3. Добавлять в верхнюю часть панели конт
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (10)
Наш редактор будет поддерживать механизм отмены/возврата (undo/redo) действий в редакторе. Реализуй класс UndoMenuListener. Этот слушатель будет следить за меню, а если конкретнее, то за моментом, когда меню редактирования будет выбрано пользователем. В этот момент он будет запрашивать у представлен
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (11)
11.1. Добавь в представление поле UndoManager undoManager. Разберись для чего используется этот класс. Проинициализируй поле класса новым объектом. 11.2. Добавь класс UndoListener реализующий интерфейс UndoableEditListener в пакет listeners. Этот класс будет следить за правками, которые можно отмени
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (12)
12.1. Напиши реализацию класса RedoAction: 12.1.1. Добавь в класс поле View. Добавь его инициализацию в конструкторе. 12.1.2. Реализуй метод actionPerformed(ActionEvent actionEvent), он должен вызывать метод redo() у представления. 12.2. Напиши реализацию класса UndoAction по аналогии с RedoAction.
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (13)
Реализуем класс TextEditMenuListener в пакет listeners. Этот класс будет работать аналогично классу UndoMenuListener только для других пунктов меню. Пункты меню, отвечающие за стиль, шрифт, цвет и т.д. должны быть доступны только тогда, когда в нашем редакторе выбрана первая вкладка. 13.1. Добавь в
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (14)
14.1. Добавь в класс представления метод selectHtmlTab(). Он должен: 14.1.1. Выбирать html вкладку (переключаться на нее). 14.1.2. Сбрасывать все правки с помощью метода, который ты реализовал ранее. 14.2. Добавь в класс контроллера геттер для модели, в нашем случае это поле document. 14.3. Добавь в
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (15)
Добавь в контроллер метод resetDocument(), который будет сбрасывать текущий документ. Он должен: 15.1. Удалять у текущего документа document слушателя правок, которые можно отменить/вернуть (найди подходящий для этого метод, унаследованный от AbstractDocument). Слушателя нужно запросить у представлен
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (16)
Добавь метод setPlainText(String text) в контроллер. Он будет записывать переданный текст с html тегами в документ document. При его реализации: 16.1. Сбрось документ. 16.2. Создай новый ридер StringReader на базе переданного текста. 16.3. Вызови метод read() из класса HTMLEditorKit, который вычита
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (17)
Добавь метод String getPlainText() в контроллер. Он должен получать текст из документа со всеми html тегами. 17.1. Создай объект StringWriter. 17.2. Перепиши все содержимое из документа document в созданный объект с помощью метода write класса HTMLEditorKit. 17.3. Как обычно, метод не должен кидать
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (18)
Реализуй метод selectedTabChanged() представления. Этот метод вызывается, когда произошла смена выбранной вкладки. Итак: 18.1. Метод должен проверить, какая вкладка сейчас оказалась выбранной. 18.2. Если выбрана вкладка с индексом 0 (html вкладка), значит нам нужно получить текст из plainTextPane и
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (19)
Реализуем метод actionPerformed(ActionEvent actionEvent) у представления, этот метод наследуется от интерфейса ActionListener и будет вызваться при выборе пунктов меню, у которых наше представление указано в виде слушателя событий. 19.1. Получи из события команду с помощью метода getActionCommand().
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (20)
20.1. Реализуй метод создания нового документа createNewDocument() в контроллере. Он должен: 20.1.1. Выбирать html вкладку у представления. 20.1.2. Сбрасывать текущий документ. 20.1.3. Устанавливать новый заголовок окна, например: "HTML редактор". Воспользуйся методом setTitle(), который унаследован
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (21)
Для открытия или сохранения файла мы будем использовать JFileChooser из библиотеки swing. Объекты этого типа поддерживают фильтры, унаследованные от FileFilter. Сейчас мы напишем свой фильтр: 21.1. Создай публичный класс HTMLFileFilter унаследованный от FileFilter. 21.2. Мы хотим, чтобы окно выбора
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (22)
Реализуем в контроллере метод для сохранения файла под новым именем saveDocumentAs(). Реализация должна: 22.1. Переключать представление на html вкладку. 22.2. Создавать новый объект для выбора файла JFileChooser. 22.3. Устанавливать ему в качестве фильтра объект HTMLFileFilter. 22.4. Показывать диа
16
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (23)
23.1. Напишем метод для сохранения открытого файла saveDocument(). Метод должен работать также, как saveDocumentAs(), но не запрашивать файл у пользователя, а использовать currentFile. Если currentFile равен null, то вызывать метод saveDocumentAs(). 23.2. Пришло время реализовать метод openDocument(
9
Задача
Java Multithreading, 8 уровень, 15 лекция
Недоступна
HTML Editor (24)
Твой html редактор готов! Ты научился: - Создавать приложения с графическим интерфейсом. - Работать с диалоговыми окнами. - Пользоваться классами из библиотеки Swing. - Реализовывать взаимодействие компонентов программы с помощью событий, слушателей, действий. - Усилил свои знания в области MVC. Чт
Комментарии (287)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Алексей Уровень 45
2 мая 2025
меня уже трясет от капитана Боброва😬
Duxa552 Уровень 51
22 октября 2024
Считаю это высшей формой издевательства давать задание по темам, которые мы даже близко не проходили в курсе...
28 апреля 2025
soglasen
safelogj Уровень 51
31 августа 2024
24 изи задачи на знание syntax , добавь конструктор, вызови метод, инициализируй поле.
safelogj Уровень 51
2 сентября 2024
надо бы добавить 25 задачу чтоб прога проверяла сохраняемое расширение и если его не указали, добавляла бы сама, раз уж это html редактор, а не mp3 плеер. типа

if(!fileName.toLowerCase().endsWith(".html") 
&& !fileName.toLowerCase().endsWith(".htm")) {
 currentFile = new File(fileName + ".html");
            }
Virgilion Уровень 41
18 октября 2024
Я могу ошибаться, но как я понял, HTMLFilter и не даст сохранить файл с другим расширением🤔
safelogj Уровень 51
18 октября 2024
она сохраняет файл вообще без разрешения если оно не указано, вот так сохраняется файл с именем rrrr
Virgilion Уровень 41
18 октября 2024
Спасибо, буду знать
Denis Odesskiy Уровень 46
16 июня 2024
Прекрасная задача! Вот что вышло у меня: Реализовал полностью рабочий тулбар и динамическую смену темы светлая/темная в зависимости от выбранной темы в ОС. При наведении курсора мыши на кнопки тулбара, всплывает подсказка что это за кнопка. Всё на swing. Планирую ещё её допилить в учебных целях.
SomeBody098 Уровень 51
14 августа 2024
это офигенно!!! продолжай в том же духе!
Denis Odesskiy Уровень 46
14 августа 2024
Спасибо😊
safelogj Уровень 51
2 сентября 2024
спасибо за скрины, а то я думал что за нафиг, почему у меня в закладке html отображается не код html , а текст для отображения. И наоборот. Оказывается это такой нейминг :) вкладка браузера названа html, а вкладка с кодом названа текст.
Андрей Уровень 51
19 марта 2024
Самое интересное для меня в этой задаче было узнать, что существует undoManager и не нужно самому пилить такой функционал
Alexander Karpeev Уровень 51
3 марта 2024
Не скажу, что зря потратил время и не стоит проходить эту большую задачу. Сделал, но очень мало, что понял
Roman Уровень 33
26 декабря 2023
Закончить закончил, но прога не функционирует по задуманному, элементарно файлы не открывает как надо. Короче, после окончания этого задания, понять что мы делали не получится, но отдельные куски интересные.
Grock Уровень 44
18 октября 2023
А по мне, так задача крутая. Все понятно. Можно по шаблону сделать много полезного.
Loony.java Уровень 46
28 мая 2023
Не знаю, чего тут все бомбят. Незнакомая библиотека? Учись работать, смотри и тыкай, дебагай, в чем проблема? Спокойно и без нервов за 5 дней решил все задачи, попутно почитав документацию и потыкав в методы, посмотрел что и как меняется. Да, самому такую структуру методов - хрен придумаешь с моими знаниями, но тут по шагам тебя за ручку ведут и буквально ПИШУТ названия классов и методов, которыми нужно пользоваться. Задаче лайк, мне понравилось. Попробуйте переубедить.
Максим Дзенік Уровень 51
17 марта 2023
Цікаво коли нарешті дадуть спочатку адекватну теорію, а потім задачу. Бо постійно ось задача, щось ми у 2 словах згадали у лекції, але все інше шукай і вчи сам, ми тут щоб тебе направити. Цікаво за що я віддав гроші?
Lafaed Уровень 36
8 мая 2023
за те, щоб тебе післали на гугл, за твої ж грощі.
wokku Уровень 51
24 августа 2023
Хватит позориться, вы отдали примерно 5к рублей. Каждый из вас минимум 3-4 месяца уже платформой пользуется. Да за 5к дай бог хотя бы 2 раза с девчулей погулять, а тут контента на полгода не слишком усердной работы.