Глухих Михаил Игоревич mailto:...

Post on 25-Aug-2020

11 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Глухих Михаил Игоревичmailto: glukhikh@mail.ru

Программа отвечает на запросы, а не действует активно

2

Программа отвечает на запросы, а не действует активно◦ Консольное приложение получает задачу и

решает её

3

Программа отвечает на запросы, а не действует активно◦ Консольное приложение получает задачу и

решает её

Иногда переключаясь на режим «вопрос (программы) – ответ (пользователя)»

4

Программа отвечает на запросы, а не действует активно◦ Консольное приложение получает задачу и

решает её

Иногда переключаясь на режим «вопрос (программы) – ответ (пользователя)»

◦ GUI-приложение функционирует в режиме «запрос (пользователя) – ответ (программы)»

5

Программа отвечает на запросы, а не действует активно◦ Консольное приложение получает задачу и

решает её

Иногда переключаясь на режим «вопрос (программы) – ответ (пользователя)»

◦ GUI-приложение функционирует в режиме «запрос (пользователя) – ответ (программы)»

Иногда переключаясь на режим «вопрос (программы) – ответ (пользователя)»

6

Программа отвечает на запросы, а не действует активно

Механизм событий (сообщений, сигналов) для получения информации от пользователя (окружения)◦ Поток обработки сообщений

7

8

начало

создание главного окна

ожидание события

обработкасобытия

выход?

разрушение главного окна

конец

да

нет

С точки зрения структуры программы◦ Исторически

Создание главного окна

Запуск цикла обработки сообщений

9

С точки зрения структуры программы◦ Исторически

Создание главного окна

Запуск цикла обработки сообщений

◦ Современность

Создание главного окна (или приложения с окном)

?

10

Механизм компонентов (элементов, элементов управления) для представления графической информации

11

Механизм компонентов (элементов, элементов управления) для представления графической информации◦ Компонент ~ прямоугольник с содержимым

12

Механизм компонентов (элементов, элементов управления) для представления графической информации◦ Компонент ~ прямоугольник с содержимым

◦ Контейнер = содержит другие компоненты

13

Механизм компонентов (элементов, элементов управления) для представления графической информации◦ Компонент ~ прямоугольник с содержимым

◦ Контейнер = содержит другие компоненты

◦ Менеджер размещения: управляет размещением компонентов в контейнере

14

Механизм компонентов (элементов, элементов управления) для представления графической информации

Механизм перерисовки через события◦ Нет (в непосредственном виде) функции

«нарисовать окно»

15

Механизм компонентов (элементов, элементов управления) для представления графической информации

Механизм перерисовки через события◦ Нет (в непосредственном виде) функции

«нарисовать окно»

◦ Как по команде от ОС (событие)

16

Механизм компонентов (элементов, элементов управления) для представления графической информации

Механизм перерисовки через события◦ Нет (в непосредственном виде) функции

«нарисовать окно»

◦ Как по команде от ОС (событие)

◦ Так и по команде от программы (отправка этого события)

17

Механизм компонентов (элементов, элементов управления) для представления графической информации

Механизм перерисовки через события◦ Нет (в непосредственном виде) функции

«нарисовать окно»

◦ Как по команде от ОС (событие)

◦ Так и по команде от программы (отправка этого события)

◦ Набор графических примитивов для отрисовки

18

19

События обеспечивают связь…◦ с периферийными устройствами (мышь,

клавиатура)◦ с изменением состояния одного из

компонентов приложения◦ с изменением состояния рабочего стола◦ с изменением состояния нитей, таймеров и

других составляющих приложения◦ …

Механизм компонентов (элементов, элементов управления) для представления графической информации

Механизм перерисовки через события

Редактор форм

20

Механизм компонентов (элементов, элементов управления) для представления графической информации

Механизм перерисовки через события

Редактор форм◦ Предназначен для интерактивного описания

GUI-компонентов

◦ Поддерживается IDE и/или плагинами к ней

21

Механизм компонентов (элементов, элементов управления) для представления графической информации

Механизм перерисовки через события

Редактор форм◦ Предназначен для интерактивного описания

GUI-компонентов

◦ Поддерживается IDE и/или плагинами к ней

◦ См. https://habr.com/ru/post/305974/

22

Библиотеки AWT + Swing (= JFC)

23

Библиотеки AWT + Swing (= JFC)◦ AWT (1995 год)

Поддержка GUI через peer-интерфейсы

Метод на Java вызывает «родную» (native) функцию ОС для работы с GUI

24

Component◦ Container

Frame

Panel

Dialog

◦ Label

◦ Button

◦ ComboBox

◦ …

25

Библиотеки AWT + Swing (= JFC)◦ AWT (1995 год)

Поддержка GUI через peer-интерфейсы

Метод на Java вызывает «родную» (native) функцию ОС для работы с GUI

◦ Swing (1998 год)

«Тяжёлые» компоненты ~ как в AWT

«Лёгкие» компоненты = напрямую не связаны с API операционной системы

Кросс-платформенная архитектура = приложение одинаково выглядит везде

26

Container◦ JFrame -> Frame

◦ JDialog -> Dialog

◦ JWindow, JApplet

◦ JComponent

JPanel

JLabel

JButton

JComboBox

27

heavyweight component: всегда имеет привязанное к нему окно ОС◦ Любой наследник Component, но не JComponent

28

heavyweight component: всегда имеет привязанное к нему окно ОС◦ Любой наследник Component, но не JComponent

lightweight component: переиспользуетокно ОС ближайшего «тяжелого» родителя◦ Любой наследник JComponent

◦ NB: JFrame НЕ наследник JComponent (!)

29

Container◦ Window

JWindow

Frame

JFrame

Dialog

JDialog

◦ Panel

Applet

JApplet

30

Библиотеки AWT + Swing (= JFC)

Библиотека JavaFX

31

Библиотеки AWT + Swing (= JFC)

Библиотека JavaFX◦ Создана в 2007-2008, изначально в виде языка

JavaFX Script

◦ Вошла в JRE / JDK в 2014

◦ Не только Desktop, но и Web

◦ Считается более современной и продвинутой

32

Библиотеки AWT + Swing (= JFC)

Библиотека JavaFX◦ Организация на основе Scene Tree (по сути дела

это дерево компонентов, в JavaFX -- узлов)

◦ Графические примитивы входят в дерево узлов

◦ Нет выделенной функции отрисовки

33

Button

CheckBox

List

34

Button

CheckBox

List

А также◦ Circle

◦ Rectangle

◦ Polygon

35

Control◦ Button

◦ CheckBox

◦ List

Shape◦ Circle

◦ Rectangle

◦ Polygon

36

Библиотеки AWT + Swing (= JFC)

Библиотека JavaFX

Android SDK◦ Разработка под ОС Android, 2009 год (v1)

◦ 2017 год (v26.1.1)

37

Библиотеки AWT + Swing (= JFC)

Библиотека JavaFX

Android SDK

Другие◦ SWT (Eclipse, 2003)

◦ Qt Jambi (open-source)

◦ Java OpenGL = JOGL (2010)

◦ Java 3D (on top of OpenGL or Direct3D, 2008)

38

Всё, что есть для Java +◦ tornadofx

DSL для JavaFX

39

Всё, что есть для Java +◦ tornadofx

DSL для JavaFX

◦ anko

DSL для Android SDK

40

Всё, что есть для Java +◦ tornadofx

DSL для JavaFX

◦ anko

DSL для Android SDK

DSL = Domain Specific Language (проблемно-ориентированный язык)

41

42

Все, что требуется сделать - создать окно Frame, задать его размеры setSize, отобразить его на экране setVisible и создать обработчик закрытия окна addWindowListener

Логика создания нити обработки событий зашита внутрь библиотеки

43

public class MainFrame extends Frame {

MainFrame(String s) {

super(s);

setSize(400, 400);

setVisible(true);

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

}

public static void main(String[] args) {

new MainFrame("Приложение AWT");

}

}

44

Все делается примерно аналогично

Вместо класса Frame (AWT) используется класс JFrame (Swing)

45

public class MainFrame extends JFrame {

MainFrame(String s) {

super(s);

setSize(400, 400);

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

new MainFrame("Приложение Swing");

}

});

}

}

Создателями Swing рекомендуется вызывать конструктор главного фрейма в нити обработки сообщений

Для этой цели служит метод SwingUtilities.invokeLater(runnable);

Runnable – интерфейс "запускаемый" с одним методом run

46

47

public class MainFrame extends JFrame {

MainFrame(String s) {

super(s);

setSize(400, 400);

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(

() -> new MainFrame("Простое окно Swing")

);

}

}

class HelloView : View("Простое окно JavaFX") {

override val root = BorderPane()

}

class HelloApp : App(HelloView::class)

fun main(args: Array<String>) {

Application.launch(

HelloApp::class.java, *args)

}

48

49

Label - текстовая строка

Button - клавиша

Checkbox - пункт выбора

Choice - выпадающий список

List - постоянный список

50

JLabel - текстовая строка

JButton - клавиша

JCheckBox - пункт выбора

JComboBox - выпадающий список

JList - постоянный список

Label

Button

CheckBox

ComboBox

51

52

Обратите внимание на отличия компонентов AWT и Swing

53

Рассмотрены◦ Основные концепции GUI

Далее◦ Создание приложений

◦ …

top related