— Привет, Амиго!
— Здравия желаю, Капитан Бобров!
— Боец, для тебя есть секретная миссия. Ты будешь разрабатывать инструмент для создания веб — страниц.
— Круто, веб – страницы. А зачем нам свой редактор?
— Как это зачем? Боец, приказы не обсуждаются, а выполняются.
— Есть, написать инструмент для создания веб — станиц.
— Да не кричи ты. Говорят же тебе – полностью секретное задание.
— Для выполнения обратись к агенту Intellij IDEA. Он введет тебя в курс дела.
— Все дальнейшие инструкции также через него.
— Разрешите приступить, сэр?
— Приступайте.
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.
Чт
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ