Паттерн модель-вид-контроллер и Swing

Содержание

Паттерн модель-вид-контроллер

  • Модель
    • Хранит данные
  • Вид
    • Отображает данные
  • Контроллер
    • Обеспечивает взаимодействие вида и модели

Модель Swing

  • Вид и контроллер совмещены в компоненте
  • Компонента устанавливает слушателя модели

Типы моделей

  • GUI-модели
    • Определяют видимое состояние компонента
    • Интерфейс ListSelectionModel
  • Модели данных
    • Хранят данные
    • Интерфейс ListModel

Типы событий

  • Lightweight
    • Сообщают о факте изменения
    • Класс ChangeEvent
  • Stateful
    • Сообщают что и как изменилось
    • Класс ListDataEvent

Модель кнопки

Реализации моделей кнопки

Модель-диапазон

Использование модели-диапазона

  • Компоненты

Списки

Модель списка

Порождение событий

Модель списка по умолчанию

Отображение элементов списка

Принцип работы

  • При отрисовке элемента списка
    • Берется соответствующая компонента
    • Рисуется в том месте, в котором находится элемент списка
    • Выбрасывается
  • Шаблон Lightweight

Модель выбора элементов

Выбранные значения

  • Свойства JList
    • selectedIndex – индекс первого выбранного элемента
    • selectedValue – первый выбранный элемент
    • selectedIndices – индексы выбранных элементы
    • selectedValues – значения выбранных элементов

Выпадающие списки

Таблицы

Модель данных

Порождение событий

Модель таблицы по умолчанию

  • Класс DefaultTableModel
  • Позволяет
    • Добавлять/убирать/перемещать строки
    • Добавлять/убирать/перемещать столбцы
    • Оперировать заголовками столбцов

Модель столбцов

  • Интерфейс TableColumnModel
  • Позволяет переставлять столбцы
  • Хранит набор TableColumn
    • Для каждого столбца хранит
    • Заголовок
    • Cell renderer
    • Header renderer

Классы текстовых компонет

Структура текстовой компоненты

Виды документов

Документ как текст

  • Документ состоит из символов
  • Смещение – расстояние от начала документа
  • Диапазон – текст между двумя смещениями

Местоположения

Структура элементов

  • Документ состоит из элементов
  • Элементы состоят из элементов

Элементы

Атрибуты элемента

Пример: полужирный текст

  • Является ли текст со смещением offset полужирным
    • //  Получение корневого элемента текста
      Element element = document.getDefaultRootElement();
      int index;
      while ((index = element.getElementIndex(offset)) >= 0) {
              element = element.getElement(index);
      }
      AttributeSet attributes = element.getAttributes();
      // Получение результата
      return attributes.containsAttribute(
          StyleConstants.Bold, Boolean.TRUE);
      

События документа

Вид

  • Класс JTextComponent
  • Состав
    • Курсор и выделение
    • Подсвечивание текста
    • Ограничитель перемещения курсора

Операции с видом

Курсор и выделение

Контроллер

Виды контроллеров

Элементы управления

Ссылки

Вопросы