Читаем Java 7 полностью

Вторая часть схемы MVC — Вид — построена для текстовых компонентов так, что для каждого элемента документа создается свой вид, значит, каждый элемент может получить свое графическое оформление.

Эта идея частично реализована абстрактным классом View. Он задает для каждого документа целую структуру Видов, отвечающую структуре элементов документа. Каждый вид из этой структуры при своем создании получает ссылку на определенный элемент документа, которую можно отследить методом getElement (). Документ, к которому относится Вид, можно получить методом getDocument(). У каждого Вида есть родительский вид, который определяется методами getParent() и setParent ( ), и множество дочерних видов. Их число можно определить методом getViewCount(), получить дочерние виды можно методом getView(int).

Создание дочерних Видов выполняется методом create(Element), описанным в интерфейсе ViewFactory. В документе у каждого элемента есть объект, реализующий этот интерфейс, который можно получить методом getViewFactory(). Еще несколько методов занимаются добавлением видов в иерархию и удалением их оттуда.

Каждый Вид должен преобразовать линейный порядок следования символов в элементе документа, определяемый их позициями, в двумерное отображение символов на экран, состоящее из нескольких строк экрана. Это выполняется методом

Shape modelToView(int startPos, Position.Bias b0,

int endPos, Position.Bias b1, Shape fig);

который возвращает двумерную фигуру класса Shape. Параметры метода задают начальную startPos и конечную endPos позиции текста, направления b0 и b1 от этих позиций к преобразуемому тексту, которые могут принимать одно из двух значений:

Position.Bias.Backward или Position.Bias. Forward, и окружающую фигуру fig.

Обратное преобразование выполняется методом

int viewToModel(float x, float y, Shape fig, Position.Bias[] b);

возвращающим позицию символа, имеющего координаты (x, y) на экране в фигуре fig. Кроме того, метод вычисляет массив направлений b, уточняющий положение символа в модели данных.

Для вывода на экран в каждом виде создается графический контекст — экземпляр класса Graphics. Непосредственный вывод элемента на экран выполняется методом paint (Graphics) подобно выводу компонента. Графическим контекстом можно воспользоваться не только в методе paint(Graphics), но и непосредственно, получив его методом getGraphics ( ).

Каждый Вид устанавливает свой размер методом setSize(float width, float height), у него есть минимальный, предпочтительный и максимальный размер.

В этом класс View напоминает класс Component. Сходство усиливается тем, что подобно тому, как класс Component порождает множество компонентов, создающих на экране графический интерфейс, класс View порождает множество подклассов-видов, отображающих на экране различные типы документов. Их иерархия показана на рис. 12.1.

Object

L View-г CompositeView— BoxView

PlainView

ImageView - IconView

-1— BlockView — ListView

— FlowView-ParagraphView

FieldView — TableView

LPasswordView — TableView.TableRow

— WrappedPlainView

— ZoneView

-GlyphView-LabelView—InlineView

-AsyncBoxView

- ComponentView-p FormView LobjectView

Рис. 12.1. Иерархия классов-видов

Как видно из рис. 12.1, иерархия Видов обширна и разветвлена. Большинство классов связано с интерпретацией языка HTML, например класс ImageView обрабатывает тег

, класс FormView тег

и относящиеся к нему теги ,

класс ObjectView — тег .

Класс PlainView создает несколько строк текста с одним шрифтом и используется в области ввода JTextArea, класс FieldView образует одну строку и применяется в поле ввода JTextField, класс PasswordView — в поле ввода пароля JPasswordView.

Класс BoxView и его подклассы создают прямоугольный вид текста разного вида.

Такое разнообразие видов обычно удовлетворяет запросы разработчика, и созданием собственных видов приходится заниматься редко.

Контроллер — редактор текста

Третья часть модели MVC — Контроллер — реализована в текстовых компонентах набором редакторов текста. Их иерархия начинается с абстрактного класса EditorKit, в котором описаны абстрактные методы чтения из байтового и символьного входного потока, например, связанного с клавиатурой, в модель данных

void read(InputStream in, Document doc, int pos); void read(Reader in, Document doc, int pos);

и методы записи из модели данных в байтовый и символьный потоки

void write(OutputStream out, Document doc, int pos, int length); void write(Writer out, Document doc, int pos, int length);

Класс позволяет создать свой документ методом

Document createDefaultDocument();

и получить связанную с ним "фабрику" видов методом

ViewFactory getViewFactory();

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT