Интерфейс | Класс |
BoundedRangeModel | DefaultBoundedRangeModel |
ButtonModel | De faultButtonModel |
JToggleButton.ToggleButtonModel | |
ComboBoxModel | De faultComboBoxModel |
MutableComboBoxModel | |
ListModel | AbstractListModel |
DefaultListModel | |
ListSelectionModel | DefaultListSelectionModel |
SingleSelectionModel | DefaultSingleSelectionModel |
ColorSelectionModel | DefaultColorSelectionModel |
SpinnerModel | AbstractSpinnerModelSpinnerDateModelSpinnerListModelSpinnerNumberModel |
TableColumnModel | DefaultTableColumnModel |
TableModel | DefaultTableModel |
TreeModel | DefaultTreeModel |
TreeSelectionModel | DefaultTreeSelectionModel |
JTree.EmptySelectionModel |
В графическом интерфейсе пользователя очень часто
Для реализации модели MVC библиотека Swing использует
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 () выделяет прямоугольную область в контейнере без надписи и изображения, в которую потом можно поместить текст методом
setText (String) и изображение методом setIcon (Icon).
□ Конструкторы JLabel (String) и JLabel(Icon) выделяют прямоугольную область и заносят в нее строку текста — экземпляр класса String, или изображение — экземпляр класса, реализующего интерфейс Icon, обычно это класс ImageIcon. Изображение размещается в центре области, а строка в центре по вертикали и слева.