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

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

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

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

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

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

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

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