Таблица 11.1. Интерфейсы моделей и классы, реализующие их
ИнтерфейсКласс
BoundedRangeModelDefaultBoundedRangeModel
ButtonModelDe faultButtonModel
JToggleButton.ToggleButtonModel
ComboBoxModelDe faultComboBoxModel
MutableComboBoxModel
ListModelAbstractListModel
DefaultListModel
ListSelectionModelDefaultListSelectionModel
SingleSelectionModelDefaultSingleSelectionModel
ColorSelectionModelDefaultColorSelectionModel
SpinnerModelAbstractSpinnerModelSpinnerDateModelSpinnerListModelSpinnerNumberModel
TableColumnModelDefaultTableColumnModel
TableModelDefaultTableModel
TreeModelDefaultTreeModel
TreeSelectionModelDefaultTreeSelectionModel
JTree.EmptySelectionModel

В графическом интерфейсе пользователя очень часто Вид и Контроллер работают с одними и теми же графическими компонентами. Контроллер связан с нажатием кнопок, протаскиванием мыши по линейкам прокрутки и движкам, вводом текста в поля ввода, а Вид меняет на экране эти графические компоненты, получив от Модели сообщение о происшедших изменениях.

Для реализации модели MVC библиотека Swing использует делегирование (delegation) полномочий, назначая в качестве модели данных представителя (delegate) — экземпляр класса с именем вида xxxModel. Класс, описывающий компонент, содержит защищенное или даже закрытое поле model — объект этого класса-модели, и метод getModel (), предоставляющий разработчику доступ к полю model. Сложные компоненты могут иметь несколько моделей, например в классе JTable есть три поля-представителя:

protected TableColumnModel columnModel;

protected TableModel dataModel;

protected ListSelectionModel selectionModel;

и, соответственно, три метода доступа:

TableColumnModel getColumnModel();

TableModel getModel();

ListSelectionModel getSelectionModel();

Делегирование полномочий используется и для обеспечения PL&F. Класс JComponent содержит защищенное поле ui — экземпляр класса-представителя ComponentUI из пакета javax.swing.plaf, непосредственно отвечающего за вывод изображения на экран в нужном виде. Класс-представитель содержит методы paint() и update(), формирующие и обновляющие графические примитивы. Такие представители образуют целую иерархию с общим суперклассом ComponentUI. Они собраны в пакет javax.swing.plaf и его подпакеты. В их именах есть буквы UI (User Interface), например: ButtonUI, BasicButtonUI.

Представители класса тоже являются полями класса компонента, а доступ к ним осуществляется методами вида getUI ().

Класс, описывающий компонент, дублирует большинство методов модели, например в том же классе JTable есть множество методов доступа к информации getXxx(), большинство из них просто обращаются к соответствующим методам модели, например метод получения числа строк таблицы:

public int getRowCount(){

return getModel().getRowCount();

}

Поэтому при построении графического интерфейса пользователя редко приходится обращаться к моделям и представителям компонента. В большинстве случаев достаточно обращаться к методам самого класса компонента. Если модель, принятая по умолчанию, в чем-то не устраивает разработчика, можно заменить ее другой моделью, реализовав подходящий интерфейс или расширив существующий класс xxxModel. Новая модель данных устанавливается методом setModel (xxxModel). Если приложение не обращалось непосредственно к методам модели, то в нем ничего изменять не придется.

Надпись JLabel

Различные неизменяемые надписи и небольшие изображения в окне приложения представляются компонентом JLabel. Для создания экземпляра этого класса есть шесть конструкторов.

□ Конструктор по умолчанию JLabel () выделяет прямоугольную область в контейнере без надписи и изображения, в которую потом можно поместить текст методом

setText (String) и изображение методом setIcon (Icon).

□ Конструкторы JLabel (String) и JLabel(Icon) выделяют прямоугольную область и заносят в нее строку текста — экземпляр класса String, или изображение — экземпляр класса, реализующего интерфейс Icon, обычно это класс ImageIcon. Изображение размещается в центре области, а строка в центре по вертикали и слева.

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

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

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