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

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

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

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

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

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

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

— Для выполнения обратись к агенту 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. Чт