Вторая часть схемы MVC —
Эта идея частично реализована абстрактным классом View. Он задает для каждого документа целую структуру
Создание дочерних
Каждый
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 ( ).
Каждый
В этом класс 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, иерархия
, класс FormView тег
класс ObjectView — тег
Класс PlainView создает несколько строк текста с одним шрифтом и используется в области ввода JTextArea, класс FieldView образует одну строку и применяется в поле ввода JTextField, класс PasswordView — в поле ввода пароля JPasswordView.
Класс BoxView и его подклассы создают прямоугольный вид текста разного вида.
Такое разнообразие видов обычно удовлетворяет запросы разработчика, и созданием собственных видов приходится заниматься редко.
Третья часть модели MVC —
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();