48
Java Advanced Интерфейс пользователя Часть 3

Интерфейс пользователя Часть 3

Embed Size (px)

DESCRIPTION

Java Advanced. Интерфейс пользователя Часть 3. Содержание. Паттерн модель-вид-контроллер и Swing Простые модели Списки Таблицы Текстовые компоненты Заключение. Часть 1. Паттерн модель-вид-контроллер и Swing. Паттерн модель-вид-контроллер. Модель Хранит данные Вид - PowerPoint PPT Presentation

Citation preview

Page 1: Интерфейс пользователя Часть  3

Java AdvancedИнтерфейс пользователя

Часть 3

Page 2: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 2

СПбГУ ИТМО

Georgiy Korneev

Содержание

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

2. Простые модели

3. Списки

4. Таблицы

5. Текстовые компоненты

6. Заключение

Page 3: Интерфейс пользователя Часть  3

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

Часть 1

Page 4: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 4Georgiy Korneev

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

Модель Хранит данные

Вид Отображает данные

Контроллер Обеспечивает

взаимодействие вида и модели

M

V

C

V

СобытияУправление

Данные

Page 5: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 5Georgiy Korneev

Модель Swing

Вид и контроллер совмещены в компоненте

Компонента устанавливает слушателя модели

Компонент

V

C

УправлениеДанные

M

Page 6: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 6Georgiy Korneev

Типы моделей

GUI-модели Определяют текущий компонента Интерфейс ListSelectionModel

Модели данных Хранят данные Интерфейс ListModel

Page 7: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 7Georgiy Korneev

Типы событий

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

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

Page 8: Интерфейс пользователя Часть  3

Простые моделиЧасть 2

Page 9: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 9Georgiy Korneev

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

Интерфейс ButtonModelСвойства

actionCommand – команда mnemonic – мнемоника group – группа кнопок armed – сработает при отпускании pressed – нажата rollover – курсор над кнопкой enabled – разрешена selected – выбрана

Page 10: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 10Georgiy Korneev

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

Классы DefaultButtonModel – модель кнопки по

умолчанию JToggleButton.ToggleButtonModel – модель

кнопки-переключателя

Page 11: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 11Georgiy Korneev

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

Интерфейс BoundedRangeModel Свойства

maximum – максимальное значение minimum – минимальное значение value – текущее значение extent – видимая часть valueIsAdjusting – меняется ли значение

Реализации Класс DefaultBoundedRangeModel

Page 12: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 12Georgiy Korneev

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

Компоненты JScrollBar – полоса прокрутки JProgressBar –индикатор прогресса JSlider – бегунок

Page 13: Интерфейс пользователя Часть  3

СпискиЧасть 3

Page 14: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 14Georgiy Korneev

Списки

Класс JListМодели

ListModel – модель элементов списка ListSelectionModel – модель выбора элементов

События ListSelectionEvent – изменились выбранные

элементы

Page 15: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 15Georgiy Korneev

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

Интерфейс ListModel Свойства

size – количество элементов elementAt(index) – элемент по номеру

Событие ListDataEvent

Page 16: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 16Georgiy Korneev

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

Класс AbstractListModelМетоды

Должны вызываться после изменения fireContentChanged(source, from, to) –

известить об изменении fireIntervalAdded(source, from, to) – известить о

добавлении fireIntervalRemoved(source, from, to) –

известить об удалении

Page 17: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 17Georgiy Korneev

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

Класс DefaultListModelПохожа на реализацию спискаМетоды

add(index, object) / addElement(object) – добавление элемента

get(index) / elementAt(index) – получение элемента

removeElement(object) / removeElementAt(index) – удаление элемента

set(index, object) – установка элемента …

Page 18: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 18Georgiy Korneev

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

Интерфейс ListCellRendererМетод

getListCellRendererComponent(

JList list, Object value, int index,

boolean sSelected, boolean cellHasFocus) – возвращает компоненту для отрисовки

JList.setCellRender(renderer) – установка

Класс DefaultListCellRenderer

Page 19: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 19Georgiy Korneev

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

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

элемент списка Выбрасывается

Page 20: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 20Georgiy Korneev

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

Обычно используется стандартнаяСвойства JList

selectionMode – режим выбора Режимы

SINGLE_SELECTION – одиночный элемент SINGLE_INTERVAL_SELECTION – непрерывный

интервал MULTIPLE_INTERVAL_SELECTION – несколько

интервалов

Page 21: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 21Georgiy Korneev

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

Свойства selectedIndex – индекс первого выбранного

элемента selectedValue – первый выбранный элемент selectedIndices – индексы выбранных

элементы selectedValues – значения выбранных

элементов

Page 22: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 22Georgiy Korneev

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

Класс JComboBoxМодели

ComboBoxModel extends ListModel MutableComboBoxModel extends

ComboBoxModel

Свойства модели selectedItem – выбранный элемент

Реализации модели DefaultComboBoxModel – модель по

умолчанию

Page 23: Интерфейс пользователя Часть  3

ТаблицыЧасть 4

Page 24: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 24Georgiy Korneev

Таблицы

Класс JTableМодели

TableModel – модель данных ColumnModel – модель столбцов

Page 25: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 25Georgiy Korneev

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

Интерфейс TableModelМетоды

getColumnCount() – количество столбцов getRowCount() – количество строк getValueAt(row, col) – получить значение setValueAt(row, col) – записать значение isCellEditable(row, col) – можно ли изменять

значение getColumnName(col) – название столбца

Событие TableModelEvent

Page 26: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 26Georgiy Korneev

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

Класс AbstractTableModelМетоды

fireTableCellUpdated(row, col) – известить об изменении ячейки

fireTableRowsUpdated(Inserted, Deleted)(from, to) – известить о изменении/добавлении/удалении сточек

fireTableDataChanged() – известить об изменении данных

fireTableStructureChanged() – известить об изменении столбцов

Page 27: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 27Georgiy Korneev

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

Класс DefaultTableModelПозволяет

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

Page 28: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 28Georgiy Korneev

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

Класс TableColumnModelПозволяет переставлять столбцыХранит набор TableColumn

Для каждого столбца хранит Заголовок Cell renderer Header renderer

Page 29: Интерфейс пользователя Часть  3

Текстовые компонентыЧасть 5

Page 30: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 30Georgiy Korneev

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

JTextComponentБазовый класс

JTextField JTextArea JEditorPane

JPasswordField JTextPane

ОднострочныеМногострочный без

форматированияМногострочные

с форматированием

Page 31: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 31Georgiy Korneev

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

Модель Интерфейс Document

Вид Класс View

Контроллер Класс EditorKit

Page 32: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 32Georgiy Korneev

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

AbstractDocumentБазовый класс

PlainDocumentБез

форматирования

DefaultStyledDocumentС форматированием

HTMLDocumentHTML-документ

Page 33: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 33Georgiy Korneev

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

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

документаДиапазон – текст между двумя

смещениями

П р о с т о й т е к с

Смещение

Диапазон

т

Page 34: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 34Georgiy Korneev

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

Отслеживает местоположение текста в документе

Интерфейс PositionМетоды

getOffset() – смещение Document.createPositio

n(offset) – создание местоположения

К о л о р и т

К р и т

К о т

Page 35: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 35Georgiy Korneev

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

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

Текст

Элемент-абзац

Элемент-абзац

Элемент-строка

Элемент-строка

Элемент-строка

Элемент-строка

Page 36: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 36Georgiy Korneev

Элементы

Интерфейс ElementМетоды

getName() – имя элемента getStartOffset() – смещение начала getEndOffset() – смещение конца getParentElement() – подительский элемент getElementCount() – количество детей getElement(index) – вложенный элемент getElementIndex(offset) – номер ребенка,

содержащего смещение getAttributes() – атрибуты элемента

Page 37: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 37Georgiy Korneev

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

Интерфейс AttributeSetМетоды

getAttributeCount() – количество атрибутов getAttribute(key) – получить атрибут isDefined(key) – определен ли атрибут containsAttribute(key, value) – имеет ли атрибут

указанное значение

Page 38: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 38Georgiy Korneev

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

Является ли текст со смещением 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);

Page 39: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 39Georgiy Korneev

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

Класс DocumentEventПодсобытия

changedUpdate – изменили текст insertUpdate – вставили текст removeUpdate – удалили текст

Методы getOffset() – смещение изменения getLength() – длина изменения getDocument() – изменившийся документ getChange(Element) – информация об

изменении структуры документа

Page 40: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 40Georgiy Korneev

Вид

Класс JTextComponentСостав

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

Page 41: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 41Georgiy Korneev

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

Методы JTextComponent cut() / copy() / paste() – операции с выделением getSelectedText() – выделенный текст …

Свойства JTextComponent editable – возможность редактирования selectionStart(End) – выделение document – редактируемый документ editorKit – используемый контроллер caret – используемые курсор и выделение …

Page 42: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 42Georgiy Korneev

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

Класс Caret Событие CaretEventМетоды

getDot() – смещение курсора getMark() – смещение начала выделения moveDot() – переместить курсор moveMark() – переместить начало выделения

ПРИМЕРMark Dot

Page 43: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 43Georgiy Korneev

Контроллер

Класс EditorKitМетоды

read(…, document, offset, length) – прочитать с диска

write(… , document, offset, length) – записать на диск

getActions() – возможные действия getContentType() – MIME-тип документа …

Page 44: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 44Georgiy Korneev

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

EditorKitБазовый класс

DefaultEditorKitПо умолчанию

StyledEditorKitCо стилями

HTMLEditorKitРедактирование HTML

RTFEditorKitРедактирование RTF

Page 45: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 45Georgiy Korneev

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

Возможные действия с документами Класс DefaultEditorKit.CopyAction Класс StyledEditorKit.FontSizeAction …

Названия действий по умолчанию forwardAction – на смивол вперед beginLineAction – в начало строки endLineAction – в конец строки …

Page 46: Интерфейс пользователя Часть  3

ЗаключениеЧасть 6

Page 47: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 47Georgiy Korneev

Ссылки

Creating a GUI with JFC/Swing (Tutorial) // http://java.sun.com/docs/books/tutorial/uiswing/

Java Foundation Classes // http://java.sun.com/products/jfc/

Swing Connection // http://java.sun.com/products/jfc/tsc/

Page 48: Интерфейс пользователя Часть  3

Java Advanced / Интерфейс пользователя 3 48

СПбГУ ИТМО

Georgiy Korneev

Вопросы