Лекция_6_Графический_интерфейс.ppt
- Количество слайдов: 42
Санкт-Петербургский государственный политехнический университет Лекция 4 Графический интерфейс Преподаватель: Никифоров Игорь Валерьевич
Обзор подходов n AWT (Abstract Window Toolkit) – первый графический фреймворк использующий визуальные компоненты операционной системы q q n Swing q q n Так как требовалось обеспечить кроссплатформенность, то возникла проблема различия состава визуальных компонент в различных операционных системах (ОС) По этой причине часть полезных компонент была исключена из состава AWT Для решения данной проблемы была создана мощная, включающая большое количество компонент библиотека Swing В отличие от AWT компоненты Swing не зависят от widget'ов операционной системы За прорисовку и поведение GUI элементов полностью отвечает библиотека Swing Это позволило создать GUI компонетны, которые одинаково выглядят и функционируют на различных операционных системах SWT q q q В SWT, как и AWT, максимально используются компоненты операционной системы. Но в отличие от AWT, отсутствующие в конкретной операционной системе компоненты не исключены, а эмулируются В результате, была создана быстрая высокоэффективная кросс платформенная библиотека компонент, которые выглядят и ведут себя как нативные компоненты операционной системы. Что в свою очередь упрощает процесс обучения пользователей java приложений, так как SWT программы не отличаются от обычных приложений Для каждой операционной системы были разработаны настройки внешнего вида и поведения (Look. And. Feel), которые максимально эмулировали компоненты конкретной операционной системы. Использование look. And. Feel позволило создавать красочные и привлекательные интерфейсы java приложений 2
SWT и AWT (отличия) n Основные концепции SWT и AWT похожи, но реализация разная q q n n Основная разница, как две библиотеки используют родные компоненты AWT принцип q q n q q Не все платформы поддерживают одинаковый набор виджитов. Поэтому появляется проблема «наименьшего общего знаменателя". AWT предоставляет только очень простой набор виджитов, которые предоставляются всеми современными платформами Если требуется предоставить компонент, которого нет на каких-либо платформах, необходимо закодировать его именно на Java. Как раз это и есть идея Swing -- Swing компоненты написаны на Java, отрисовывая новые компоненты, такие как Trees и Tables используя вызов AWT Большая часть кода написана на C или C++ и не поставляется в нормальной сборке Java SDK. Поэтому сложно отслеживать ошибки. Принцип SWT q q n Родной код, написан на C или C++ и использовался для управления реальными виджитами операционной системы. Например на Windows, этот код использует MFC или Win 32 для отображения. На других платформах родной GUI вызывает модуль управления виджитами Каждая сборка Java Runtime Environment (JRE) предоставляет уникальный набор для управления виджитами. Java классы не изменяются, изменяется native код Реализация AWT приводит к трем основным проблемам: q n Пользовать пишет программы, которые используют AWT или SWT библиотеки для графических интерфейсов AWT и SWT поручают управления виджитами родным компонентам операционной системы Чтобы не писать каждый виджет на нативном коде, был использован слой Java Native Interface (JNI) для каждой платформы, которая предоставляет GUI. Java код, похож на AWT native-код, и использует вызовы родных API платформы для управления жизнью виджитов. В SWT, реализация некоторых библиотек различается между платформами, и это лучше чем поставлять native код Этот подход решает описанные выше проблемы q q Если платформа поддерживает виджет, который другая не поддерживает, этот виджет может быть native на этих платформах, а на других эмулироваться. В обоих случаях только Java код должен быть написан, чтобы использовать виджет. Вся логика добавленная в SWT написана на Java. Поэтому отладка становится легче 3
Графический интерфейс Eclipse n Компонент SWT (Standard widget toolkit) – это фундамент, на котором построены все графические средства Eclipse и является составной частью Workbench q q q n n n Использование под каждой ОС стандартных элементов управления позволяет существенно улучшить производительность и избежать запаздывания реакции на события в сложных, многооконных интерфейсах SWT (в виде набора библиотек) может быть использован в качестве замены Swing и AWT, отдельно от Eclipse и компонента Workbench Основным недостатком SWT было отсутствие визуального редактора для создания графических интерфейсов на его основе. q n Безусловно, разработку кода графического приложения с нуля трудно назвать увлекательной или интеллектуальной задачей. Заполнить этот пробел призваны следующие средства: n Eclipse Visual Editor – заморожен n Window. Builder – активный по настоящее время На основе SWT построен компонент JFace, который решает более высокоуровневые задачи построения пользовательского интерфейса q n SWT является основным средством создания пользовательского интерфейса для приложений на основе Eclipse. Поскольку для прорисовки элементов интерфейса SWT максимально использует средства оконного менеджера операционной системы (Win 32, GTK, Motif), приложения, построенные на базе SWT, визуально не отличаются от “родных” приложений, разработанных специально для конкретной операционной системы. При этом они сохраняют совместимость со всеми платформами, поддерживаемыми Eclipse. JFace содержит классы для создания диалогов, страниц свойств, управления шрифтами, поддержки архитектуры модель/вид и т. п. Сам Eclipse создан исключительно с использованием SWT и JFace 4
SWT и JFace n n Eclipse предоставляет разработчикам основу для разработки широкого управляемого графическим интерфейсом инструментария и приложений. Основной базой для этого являются библиотеки графических интерфейсов Eclipse SWT и JFace SWT – это библиотека, которая создает Java-представление графических элементов управления в базовой операционной системе. Она зависима от реализации хост системы. Это означает, что приложения, основанные на SWT, обладают следующими основными характеристиками q q q n Они выглядят, работают и действуют в точности, как и "собственные" приложения операционной системы Предлагаемые widgets отображают компоненты и элементы управления, предлагаемые операционной системой Любое особенное поведение графических библиотек хоста отражается в графическом интерфейсе SWT JFace q q q Библиотеки SWT показывают основные widgets операционной системы Во многих средах такой подход к разработке является слишком низкоуровненным Библиотека JFace осуществляет поддержку, добавляя SWT-приложениям многочисленные сервисы. JFace не скрывает возможностей SWT. Напротив, она расширяет их. Одним из основных важных расширений является способность изолировать модель данных приложения от графического интерфейса, который воспроизводит и модифицирует их 5
Определения n Терминология, применяемая в SWT q Widget – основной компонент графического интерфейса SWT (сродни компоненту в пакете Java AWT и JComponent в Swing). Widget является абстрактным классом. q Control (Элемент управления ) – это widget, который имеет сходный элемент в операционной системе (другими словами, имеет тождественный элемент в операционной системе). Данный элемент является абстрактным классом. q Composite (Композит) – это элемент управления, который может заключать в себе другие элементы (сродни термину Контейнер в пакете Java AWT и JPanel в пакете Swing). q Объект – это widget, содержащийся в других элементах (которые могут и не быть композитами), например, таких как, список или таблица. Заметьте, что элементы управления, содержащие объекты, редко содержат еще и элементы и наоборот. Объект является абстрактным классом. 6
Иерархия классов Дерево SWT Widget Дерево SWT Composite Список SWT объектов 7
Конструктор элементов управления n Почти все графические интерфейсы SWT создаются из нескольких основных частей. Все SWT widgets могут быть найдены в пакетах org. eclipse. swt. widgets или org. eclipse. swt. custom (некоторые плагины Eclipse также предоставляют кастомизируемые widgets в других пакетах). q q n Как требуется в SWT, все элементы управления (за исключением таких элементов верхнего уровня, как shells) в момент инициализации должны включать элементы предка (композитные экземпляры). q n В пакете widgets содержатся элементы управления, основанные на элементах управления операционной системы, Кастомизируемый пакет содержит элементы управления в большем количестве, чем в наборе элементов операционной системы. Некоторые кастомизируемые элементы управления схожи с элементами пакета widgets. Для избегания конфликта имен названия кастомизируемых элементов начинаются с "C" (CLabel vs. Label). При инициализации элементы управления автоматически добавляются к предку, в то время как в AWT/Swing они должны быть явно указаны, реализуя нисходящий способ реализации графических интерфейсов. Таким образом, все элементы управления получают композитный родительский класс (или внутренний класс), как аргумент конструктора. Большинство элементов имеют опции флага, которые должны быть установлены при создании. q Таким образом, большинство элементов получает второй аргумент конструктора, часто называемый “Стиль”, который задает флаги для установки этих опций. Все значения флага имеют тип static final int и описываются в классе SWT в пакете org. eclipse. swt. Если ни одной опции не требуется, используйте значение SWT. NONE. 8
Метки n Самый простой для использования элемент управления – метка – служит для показа плоского (без цвета, специальных шрифтов и стилей) текста или небольшого изображения, называемого иконкой. q n Метки не получают фокус (другими словами, пользователь не может перемещать метку клавишей Тab или мышью) и, таким образом, не генерируют входных событий. Текстовая строка инициализируется отдельным методом от конструктора. q q Это характерно для всех элементов SWT. Только родительский класс и стиль инициализируются в конструкторе, а все остальные параметры определяются в созданном объекте. import org. eclipse. swt. widgets. *; : Composite parent =. . . ; : // create a center aligned label Label label = new Label(parent, SWT. CENTER); label. set. Text("This is the label text"); 9
Кастомизированные метки n n Из-за платформенных ограничений стандартные элементы управления не могут содержать строку и иконку одновременно. Для их совместного использования необходимо применить кастомизированный элемент управления CLabel import com. eclipse. swt. graphics. *; import org. eclipse. swt. widgets. *; import org. eclipse. swt. custom. *; : Composite parent =. . . ; Image image =. . . ; : // create a left aligned label with an icon CLabel Clabel = new CLabel(parent, SWT. LEFT); label. set. Text("This is the imaged label text""); label. set. Image(image); 10
Элементы редактирования текста n n Метки отображают текст, но не позволяют его редактировать. Элементы редактирования текста позволяют это сделать. q q n Текст может быть однострочным (текстовым полем) или многострочной (текстовые области) областью ввода. Он также может быть не редактируемым. Текстовые поля не имеют описания, поэтому часто за ними следуют метки с пояснениями. Элемент редактирования текста может иметь "подсказку", предоставляющую информацию о его использовании (это свойство имеют все элементы). Создание простого текстового поля с ограничением по количеству символов. q Текст, заданный по-умолчанию, выбран таким образом, чтобы разрешить легкое удаление. Composite parent =. . . ; : // create a text field Text name = new Text(parent, SWT. SINGLE); name. set. Text("<none>"); name. set. Text. Limit(50); name. set. Tool. Tip. Text("Enter your name -- Last, First"); name. select. All(); // enable fast erase 11
Кнопки n Необходимо, чтобы пользователь давал знать, когда должно произойти некоторое действие. Обычно это происходит при помощи элемента управления Кнопка. Существует несколько видов кнопок q Стрелка (ARROW) – отображаеися в виде стрелки, направленной вверх, вниз, влево или вправо q Флажок (CHECK) – область, которую можно отметить q Плоская (FLAT) – обычная кнопка, но без рельефа q Нажатие (PUSH) – обыкновенная выпуклая кнопка (самое распространенное) q Переключатель(RADIO) – используется только вместе с другими элементами для выбора единственного варианта q Переключение (TOGGLE) – кнопка n Символ & в имени вызывает создание акселератора с использованием последующего символа в имени, позволяющего нажимать кнопку, используя сочетание клавиш Ctrl+<символ> (сочетание клавиш зависит от операционной системы). Создание кнопки n import org. eclipse. swt. widgets. *; : Composite parent =. . . ; : // create a push button Button clear = new Button(parent, SWT. PUSH); clear. set. Text("Clea&r"); 12
Слушатели событий (1) n n Необходимо произвести действие в ответ на выбор кнопки (особенно кнопки типа push) Достигается путем добавления интерфейса прослушивания событий Selection. Listener (пакет org. eclipse. swt. events) к кнопке Изменение состояния кнопки (обычно при ее нажатии) генерирует событие По нажатию на кнопку Clear выводится сообщение import org. eclipse. swt. events. *; : // Clear button pressed event handler clear. add. Selection. Listener(new Selection. Listener() { public void widget. Selected(selection. Event e) { System. out. println("Clear pressed!"); } public void widget. Default. Selected(selection. Event e) { widget. Selected(e); } }); 13
Слушатели событий(2) n n n Пример с предыдущего слайда использует неименованный внутренний класс, но вы можете использовать именованные внутренние классы или независимые классы в качестве блоков прослушивания. Большая часть классов. . . Listener с двумя или более методами также имеет параллельный класс. . . Adapter, q Обеспечивает пустые реализации методов, а также может уменьшить время, требуемое для написания кода q Существует также класс Selection. Adapter, реализующий Selection. Listener Действие, реализуемое в этих методах должно осуществляться мгновенно (обычно за доли секунды), иначе интерфейс будет считаться невосприимчивым. q Более длинные действия такие как, получение доступа к файлам, потребует отдельных процессов, Job 14
Композиты n В большинстве графических интерфейсах несколько элементов объединяются вместе, чтобы обеспечить больше возможностей для пользователя. q n Композиты могут быть вставлены в любой уровень, а также могут комбинировать производные элементы управления и композиты. q q q n В SWT, это объединение реализуется с использованием класса Композит (Composite class). Упрощает разработку графического интерфейса Создает возможности повторного использования кода интерфейса (инкапсулированием внутреннего графического интерфейса). Композиты могут иметь границы и визуально легко различимы. Или они могут не иметь границ и могут легко интегрироваться даже в более крупные группы. Пример, композит с границами import org. eclipse. swt. widgets. *; : Composite parent =. . . ; : Composite border = new Composite(parent, SWT. BORDER); 15
Группы n Group – разновидность композита с границей q q n Помимо объекта border внутренний композитный класс Group поддерживает название. Группы часто используются для того, чтобы содержать кнопки типа radio, так как они определяют набор исключающих кнопок Пример, создание группы import org. eclipse. swt. widgets. *; : Composite parent =. . . ; : Group border = new Group(parent, SWT. SHADOW_OUT); border. set. Text("Group Description"); 16
Оболочка (Shell) n Оболочка – это композитный элемент верхнего уровня (рамка или окно), который может не иметь родительского композита. q q q Часто имеет устанавливаемый по-умолчанию родительский класс Display Оболочки могут иметь много стилей, но самым популярным является стиль SWT. SHELL_TRIM или SWT. DIALOG_TRIM. Оболочки могут быть модальными и немодальными. n n Модальные оболочки, часто используемые для диалоговых окон, запрещают дальнейшие действия над родительским интерфейсом (если такие есть) до тех пор, пока дочерняя (child) оболочка не закроется В примере создается немодальная оболочка верхнего уровня в стиле фрейма import org. eclipse. swt. widgets. *; : Shell frame = new Shell(SWT. SHELL_TRIM); : 17
Менеджеры компоновки n Композиты часто содержат более одного элемента, а элементы могут быть размещены двумя способами: q q n Абсолютное позиционирование – каждый элемент устанавливается в точные X, Y координаты, а в вашем коде задаются конкретная ширина и высота Автоматическое размещение менеджером – положение элемента X, Y, ширина и высота автоматически задаются менеджером компоновки Layout. Manager В большинстве случаев, используя менеджер компоновки Layout. Managers, можно делать выравнивание в графических интерфейсах с плавающими размерами намного легче. q SWT предлагает к использованию несколько менеджеров компоновки n n n Fill. Layout Grid. Layout В обоих случаях позиционирование элемента происходит всякий раз при изменении размеров содержащего элемента Менеджеры компоновки уникальным образом назначаются композиту Некоторые менеджеры контролируются своими собственными параметрами, в то время как другие требуют дополнительных параметров Layout. Data, заданных для каждого элемента управления. 18
Менеджер Fill. Layout n Менеджер Fill. Layout размещает элементы по горизонтали или по вертикали. q q n Каждый элемент масштабируется так, чтобы быть как требуется соразмерным по ширине и высоте с композитом, который он заполняет, а пространство между элементами разделяется равномерно. Особенным является случай, когда имеется только один дочерний элемент. В этом случае элемент масштабируется таким образом, чтобы полностью заполнить родительский композит В примере создается композит с использованием вертикального размещения элементов Fill. Layout import org. eclipse. swt. widgets. *; import org. eclipse. swt. layouts. *; : Composite composite =. . . ; Fill. Layout fill. Layout = new Fill. Layout(SWT. VERTICAL); composite. set. Layout(fill. Layout); 19
Менеджер Grid. Layout n Менеджер Grid. Layout предоставляет более мощный подход к размещению компонента, напоминающий использование таблиц HTML. q q Создает двумерную сетку для расположения компонентов Компоненты могут быть размещены в одну или более ячеек (называемых cell spanning) Сетка может быть задана в абсолютных единицах или относительно ширины и высоты окна Элементы добавляются к следующему возможному столбцу в строке. Если больше столбцов в строке не существует, элемент перемещается к первому столбцу следующей строки 20
Создание таблицы из элементов n В примере создается композит из двух строк и двух столбцов, содержащих два текстовых поля с метками. Столбцам может быть задана различная ширина. import org. eclipse. swt. widgets. *; import org. eclipse. swt. layouts. *; : Composite composite =. . . ; Grid. Layout grid. Layout = new Grid. Layout(2, false); composite. set. Layout(grid. Layout); Label l 1 = new Label(composite, SWT. LEFT); l 1. settext("First Name: "); Text first = new Text(composite, SWT. SINGLE); Label l 1 = new Label(composite, SWT. LEFT); l 2. set. Text("Last Name: "); Text last = new Text(composite, SWT. SINGLE); 21
Grid Data n Grid. Data – используется когда требуется точно определить способ, с помощью которого каждый элемент использует лишнее пространство внутри своей сетки. q n Чтобы в каждой сетке обеспечить такой тип улучшенного элемента, элементы, добавляемые в композит, управляемый Grid. Layout, могут иметь экземпляры класса Grid. Data (внутренний класс Layout. Data) В примере устанавливаются текстовые поля, занимающие любое свободное пространство (пример основан на примере Grid. Layout) first. set. Layout. Data(new Grid. Data(SWT. FILL, true, true)); last. set. Layout. Data(new Grid. Data(SWT. FILL, true, true)); 22
Display n Графические интерфейсы SWT требуют для исполнения сконфигурированной среды q q Среда предоставляется экземпляром, который обеспечивает доступ к графическому устройству базовой операционной системы Display позволяет обрабатывать каждый ввод данных пользователем (с мыши или клавиатуры) для управления графическим интерфейсом 23
Пример import org. eclipse. swt. widgets. *; : Display display = new Display(); Shell shell = new Shell(display); shell. set. Text("Shell Title"); // *** construct Shell children here *** shell. open(); // open shell for user access // process all user input events while(!shell. is. Disposed()) { // process the next event, wait when none available if(!display. read. And. Dispatch()) { display. sleep(); } } display. dispose(); // must always clean up 24
Меню (1) n Многие простые приложения с графическим интерфейсом нуждаются в меню q q q Меню привносят в любой графический интерфейс юзабилити. Они представляют собой динамические списки выбора, которые реализуют доступные функции (команды) или состояния интерфейса. Создаются меню с помощью средства menu widget. Меню могут содержать другие меню или объекты menu. Items, которые сами могут быть меню (иерархическая структура). Объекты Menu. Items могут представлять собой исполняемые команды или же состояния по выбору Меню могут быть связаны с панелью меню приложения (оболочкой), а также быть всплывающим меню 25
Меню(2) n Необходимо определять каждое отдельное меню, как один из трех взаимно исключающих видов: q q q n Меню также поддерживают использование дополнительных параметров: q q n NO_RADIO_GROUP – не действует как группа радио. Следует использовать его, когда меню содержит объекты стиля RADIO LEFT_TO_RIGHT или RIGHT_TO_LEFT – выбирает направление текста Объекты меню menu. Items должны быть определены как один из пяти взаимоисключающих видов: q q q n BAR – панель меню работает, как панель меню верхнего уровня для оболочки DROP_DOWN – выпадающее меню, связанное с элементом меню верхнего уровня или объектом меню POP_UP – окно, всплывающее из оболочки, но контекстно привязанное к некоторому элементу CHECK – может быть выбран в течении продолжительного времени (если поставлен флажок) CASCADE – объект содержит меню, которое должно выпадать PUSH – объект действует как кнопка, вызывая мгновенное действие RADIO – действует как CHECK, но при этом может быть выбран только один объект данного типа SEPARATOR – действует как разделитель (часто как полоса) между группами объектов. Этот объект не имеет ассоциированого действия Создание системы меню является достаточно сложной процедурой. В листинге 1 показан пример кода, реализующего работающую систему меню. 26
Меню (3) – пример создания n Создание системы меню является достаточно сложной процедурой. В примере показан пример кода, реализующего работающую систему меню import org. eclipse. swt. *; : Shell shell =. . . ; : Label body =. . . ; : // Создание системы меню Menu main = create. Menu(shell, SWT. BAR | SWT. LEFT_TO_RIGHT); shell. set. Menu. Bar(main); Menu. Item file. Menu. Item = create. Menu. Item(main, SWT. CASCADE, "&File", null, -1, true, null); Menu file. Menu = create. Menu(shell, SWT. DROP_DOWN, file. Menu. Item, true); Menu. Item exit. Menu. Item = create. Menu. Item(file. Menu, SWT. PUSH, "E&xitt. Ctrl+X", null, SWT. CTRL + 'X', true, "do. Exit"); Menu. Item help. Menu. Item = create. Menu. Item(main, SWT. CASCADE, "&Help", null, -1, true, null); Menu help. Menu = create. Menu(shell, SWT. DROP_DOWN, help. Menu. Item, true); Menu. Item about. Menu. Item = create. Menu. Item(help. Menu, SWT. PUSH, "&Aboutt. Ctrl+A", null, SWT. CTRL + 'A', true, "do. About"); // добавление всплывающего меню Menu popup = create. Popup. Menu(shell, body); Menu. Item popup. Menu. Item 1 = create. Menu. Item(popup, SWT. PUSH, "&About", null, -1, true, "do. About"); Menu. Item popup. Menu. Item 2 = create. Menu. Item(popup, SWT. PUSH, "&Noop", null, -1, true, "do. Nothing"); 27
Меню(4) n Объекты меню могут иметь горячие клавиши (Ctrl+? ) и мнемонику (подчеркнутые символы, идентифицируемые символом &), чтобы облегчить пользователю выбор объектов меню с помощью клавиатуры 28
Комбо и списки (1) n Список показывает предопределенный набор строковых значений, из которых может выбирать пользователь. q q q n Комбо должен быть определен как один из двух взаимоисключающих стилей: q q n q SINGLE – пользователи могут выбрать только один объект MULTI users - пользователи могут выбрать сразу несколько объектов Эти элементы также поддерживают использование дополнительных параметров: q q n READ_ONLY – запрещает пользователю редактировать в комбо текстовое поле Все обсуждаемые элементы (списки, комбо, таблицы и деревья) поддерживают использование одного из двух взаимоисключающих стилей: q n SIMPLE – показывает список значений DROP_DOWN – реализует выпадающий список значений Комбо также поддерживают использование дополнительного параметра: q n Списки обычно требуют большое пространство экрана. Если вам необходимо сэкономить пространство, вы можете использовать элемент combo, который позволяет при необходимости развернуть список. Комбо также опционально разрешают пользователю вводить желаемые значения в текстовое поле. H_SCROLL - реализует горизонтальную полосу прокрутки при необходимости V_SCROLL - реализует вертикальную полосу прокрутки при необходимости Создание комбо и списка является достаточно легким занятием 29
Комбо и Списки(2) 30
Form. Layout n n Предыдущий пример использует менеджер Form. Layout для позиционирования комбо и списка. Form. Layout – один из самых полезных менеджеров компоновки, так как он позволяет вам автоматически размещать каждый элемент относительно других элементов. q q q Он позволяет присоединять любые стороны элемента (левую, верхнюю, праву или низ) к (обычно противоположным) сторонам другого элемента или стороне контейнера. Невыровненные стороны принимают обычные размеры элемента. Используйте экземпляр класса Form. Attachment для точного определения размера элемента управления или его процентного соотношения относительно размера контейнера, а также для указания размера пробела в пикселях экрана от этой точки. 31
Таблицы (1) n n Таблицы – это расширенная форма списков, поддерживающих Table. Columns. q Эти столбы располагают данные в более читаемом формате. q Они включают поддержку имен столбцов и возможность изменять размер столбцов. q Для создания таблиц, сначала создайте элемент таблица, добавьте в него столбцы, а затем добавьте строковые данные, завернутые в объекты Table. Items. Таблицы поддерживают опциональные стили: q CHECK - добавляет флажки в первый столбец q VIRTUAL - поддерживает крупные таблицы (является платформенно-зависимым) q FULL_SELECTION – выбирает все столбцы (не только первый) 32
Таблицы (2) 33
Деревья (1) n Дерево – это список, который может показывать данные, расположенные в иерархическом порядке. q n Деревья поддерживают возможность вашего приложения раскрывать и схлопывать промежуточные уровни иерархии. Так как деревья часто изображают иерархические структуры, необходимо предоставить модель данных 34
Деревья (2) 35
Окно сообщения n Вы должны описать Message. Boxes при помощи одного из пяти взаимоисключающих стилей: q q q n ICON_ERROR – показывает сообщение об ошибке ICON_INFORMATION – показывает информационное сообщение ICON_QUESTION – показывает сообщение, cодержащее вопрос ICON_WARNING – показывает предупреждающее сообщение ICON_WORKING – показывает рабочее сообщение Окна сообщений Message. Boxes поддерживают некоторые дополнительные стили, каждый из которых представляет собой комбинацию данных кнопок: q q OK, OK | CANCEL YES | NO, YES | NO | CANCEL RETRY | CANCEL ABORT | RETRY | IGNORE 36
Окно сообщения(2) n. В примере показан вариант типичного использования Message. Box, в котором при закрытии пользователем оболочки приложения отображается окно запроса подтверждения 37
MVC (Model Viewer Controller) n n Шаблон проектирования MVC предполагает разделение данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: q модель, представление и контроллер q модификация каждого компонента может осуществляться независимо. Модель (Model) предоставляет данные предметной области представлению и реагирует на команды контроллера, изменяя свое состояние Представление (View) отвечает за отображение данных предметной области (модели) пользователю, реагируя на изменения модели Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений 38
Пример n Рассмотрим простой пример MVC q Модель может представлять собой объект, реализующий переключатель n n q Представление отображает на дисплее состояние переключателя с помощью определенной текстовой или графической формы. n n q модель характеризуется состоянием: выключен или включен позволяет изменять его – объект модели имеет метод изменения состояния: выключить и включить Например, представление может отображать текстовую метку, которая при изменении состояния модели переключателя отобразит соответствующий текст: «выключен» или «включен» Помимо отображения представление позволяет пользователю изменять состояние переключателя с помощью графических примитивов, к примеру, двух кнопок с надписями: «Включить» и «Выключить» . Контроллер n n Представление умеет только отображать состояние модели переключателя, для изменения представление обращается к контроллеру. Контроллер представляет собой объект, который в нашем случае умеет только изменять состояние модели переключателя 39
Цикл взаимодействия При инициализации представления пользователем обращается к модели и устанавливает текст метки в соответствии с текущим состоянием переключателя. Пользователь инициирует изменение переключателя, нажимая на определенную кнопку. При этом представление отправляет соответствующую команду контроллеру: включить или выключить. Контроллер интерпретирует команду и изменяет модель. Представление регистрирует изменение модели: по этому событию оно изменяет текст метки для соответствия новому состоянию модели переключателя. 40
MVC принципы n MVC задает не столько правила разделения приложения на отдельные компоненты, сколько правила их взаимодействия. q n В то время как представление и контроллер зависят от модели, модель не зависит ни от представления, ни от контроллера. Это ключевая особенность разделения, которая позволяет работать с моделью, а значит, и с бизнес-логикой приложения, независимо от визуального представления. Следует четко разделять MVC компонентного уровня, по-другому – framework, и уровня приложения. q q К примеру, Swing является решением идеи MVC на компонентном уровне. Но при проектировании приложения на основе Swing можно также воспользоваться преимуществами MVC, выделив бизнес-логику приложения в модель, и построив представление и контроллер на основе соответствующих классов Swing. 41
Спасибо за внимание 42
Лекция_6_Графический_интерфейс.ppt