37
Java Практическое занятие Графический интерфейс Преподаватель: Бирюкова А.А.

Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Java Практическое занятие

Графический интерфейс

Преподаватель: Бирюкова А.А.

Page 2: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Имеется 4 класса: Девочка, Мальчик, Человек, Встреча.

2

Page 3: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

3

Page 4: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

4

Page 5: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

5

Page 6: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Требуется выводить не в консоль, а в графический интерфейс

6

Page 7: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Диалоговые окна JOptionPane

• Для вывода в графический интерфейс приложения разнообразной информации и выбора простых данных предназначен класс JOptionPane, работа с которым связана с вызовом одного из многочисленных статических методов, создающих и выводящих на экран модальное диалоговое окно стандартного вида. В диалоговых окнах JOptionPane можно выводить самую разнообразную информацию и, при необходимости, размещать в них дополнительные компоненты.

• JOptionPane унаследован от базового класса JComponent библиотеки Swing, так что можно работать с ним напрямую, т.е. создавать экземпляры класса JOptionPane и настраивать их свойства. Использование стандартных диалоговых окон существенно упрощает разработку приложения и позволяет ускорить процесс освоения пользователем интерфейса.

• Все стандартные диалоговые окна Swing имеют собственные UI-представители, отвечающие за интерфейс окна в используемом приложении. Это особенно важно для внешних видов окон, имитирующих известные платформы, пользователи которых не должны ощущать значительной разницы при переходе от «родных» приложений к Java-приложениям.

http://java-online.ru/swing-joptionpane.xhtml 7

Page 8: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Диалоговые окна JOptionPane

Наименование метода Описание

showMessageDialog Диалоговое окно вывода сообщения

showConfirmDialog Диалоговое окно подтверждения, с включением кнопок типа yes/no/cancel

showInputDialog Диалоговое окно с выбором

Основные диалоговые методы JOptionPane

http://java-online.ru/swing-joptionpane.xhtml 8

Page 9: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Конструкторы окна сообщений showMessageDialog

9

Page 10: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

• parent - родительское окно (может быть null);

• message - отображаемый в окне текст сообщения. В большинстве случаев это строка, но может быть использован массив строк String[], компонент Component, иконка Icon, представленная меткой JLabel, объект Object, конвертируемый в строку методом toString().

• title - заголовок окна.

• messageType - тип диалогового окна :

– INFORMATION_MESSAGE - стандартное диалоговое окно для вывода информации со значком соответствующего вида;

– WARNING_MESSAGE - стандартное диалоговое окно для вывода предупреждающей информации со значком соответствующего вида;

– QUESTION_MESSAGE - стандартное диалоговое окно для вывода информации. Как правило, не используется для информационных сообщений;

– ERROR_MESSAGE - стандартное диалоговое окно для вывода информации об ошибке со значком соответствующего вида;

– PLAIN_MESSAGE - стандартное диалоговое окно для вывода информации без значка.

• icon - отображаемая в диалоговом окне иконка.

10

Page 11: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Задание

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

чтобы вывод диалога девочки и мальчика осуществлялся и в

командную строку и в диалоговое окно.

11

Page 12: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Использование Swing

Swing — библиотека для создания графического интерфейса для программ на языке Java.

12

Page 13: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Обзор библиотеки Java Swing

• контейнеры верхнего уровня

– JApplet - главное окно апплета;

– JFrame - окно приложения;

– JDialog - диалог приложения.

– JColorChooser - диалог выбора цвета;

– JFileChooser - диалог выбора файлов и директорий;

– FileDialog - диалог выбора файлов и директорий (awt компонент).

• простые контейнеры

– JPanel - простая панель для группировки элементов, включая вложенные панели;

– JToolBar - панель инструментов (обычно это кнопки);

– JScroolPane - панель прокрутки, позволяющая прокручивать содержимое дочернего элемента;

– JDesktopPane - контейнер для создания виртуального рабочего стола или приложений на основе MDI (multiple-document interface);

– JEditorPane, JTextPane - контейнеры для отображения сложного документа как HTML или RTF;

– JTabbedPane - контейнер для управления закладками;

– JSplitPane - контейнер, разделяющий два элемента и позволяющий пользователю изменять их размер.

http://darkraha.com/rus/java/swing/swing00.php 13

Page 14: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Обзор библиотеки Java Swing

элементы интерфейса

• Следующие элементы управления могут использоваться и как контейнеры, так как наследуются от класса java.awt.Container.

• JButton - кнопка;

• JCheckBox - кнопка-флажок;

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

• JLabel - метка, надпись;

• JList - список;

• JPasswordField - текстовое поле для скрытого ввода;

• JProgressBar - компонент для отображения числа в некотором диапазоне;

• JRadioButton - преключатели, радио-кнопки, обычно используется с компонентом ButtonGroup;

• JSlider - компонент позволяющий выбрать значение из заданного диапазона;

• JSpinner - компонент позволяющий выбрать значение из указанной последовательности;

• JTable - таблица;

• JTextField - однострочное текстовое поле;

• JTextArea - многострочное текстовое поле;

• JTree - дерево.

14

Page 15: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Окно JFrame

• JFrame, представляющий собой окно с рамкой и строкой заголовка (с кнопками «Свернуть», «Во весь экран» и «Закрыть»). Оно может изменять размеры и перемещаться по экрану.

• Конструктор JFrame() без параметров создает пустое окно. Конструктор JFrame(String title) создает пустое окно с заголовком title.

• setSize(int width, int height) — устанавливает размеры окна. Если не задать размеры, окно будет иметь нулевую высоту независимо от того, что в нем находится и пользователю после запуска придется растягивать окно вручную. Размеры окна включают не только «рабочую» область, но и границы и строку заголовка.

• setDefaultCloseOperation(int operation) — позволяет указать действие, которое необходимо выполнить, когда пользователь закрывает окно нажатием на крестик. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // программа закроет окно и прекратит работу

• setVisible(boolean visible) — когда окно создается, оно по умолчанию невидимо. Чтобы отобразить окно на экране, вызывается данный метод с параметром true. Если вызвать его с параметром false, окно снова станет невидимым.

http://math.sgu.ru/sites/chairs/prinf/materials/java/lesson8.htm

import javax.swing.JFrame;

15

Page 16: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Пример создания окна

16

Page 17: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Правильнее создавать для окна отдельный класс

SimpleWindow.java Boss.java

В этом классе находится метод main

17

Page 18: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Панель содержимого

• Напрямую в окне элементы управления не размещаются. Для этого служит панель содержимого, занимающая все пространство окна.

• Обратиться к этой панели можно методом getContentPane() класса JFrame. С помощью метода add(Component component) можно добавить на нее любой элемент управления.

• Пример добавления кнопки на форму:

18

Page 19: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Класс JPanel (панель)

• Элементы, которые содержат другие элементы, называются контейнерами. Все они являются потомками класса Container.

• Панель JPanel — это элемент управления, представляющий собой прямоугольное пространство, на котором можно размещать другие элементы. Элементы добавляются и удаляются методами, унаследованными от класса Container.

• Некоторые наследуемые методы:

– add(Component component) — добавляет в контейнер элемент component;

– remove(Component component) — удаляет из контейнера элемент component;

– removeAll() — удаляет все элементы контейнера;

– getComponentCount() — возвращает число элементов контейнера.

import javax.swing.JPanel;

19 http://math.sgu.ru/sites/chairs/prinf/materials/java/lesson8.htm

Page 20: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Кнопка JButton

• Кнопка — это прямоугольник с текстом (и/или значком), по которому пользователь щелкает, когда хочет выполнить какое-то действие (или о чем-то сигнализировать).

• Кнопка создается одним из пяти конструкторов

– JButton()

– JButton(String text)

– JButton(Icon icon)

– JButton(String text, Icon icon)

• Для различных состояний - методы (каждому соответствует метод get):

• setRolloverIcon(Icon icon) позволяет задать значок, который будет появляться при наведении на кнопку мыши

• setPressedIcon(Icon icon) — значок для кнопки в нажатом состоянии

• setDisableIcon(Icon icon) — значок для неактивной кнопки

• Метод setMargin(Insets margin) позволяет задать величину отступов от текста надписи на кнопке до ее полей. Объект класса Insets, который передается в этот метод, может быть создан конструктором с четырьмя целочисленными параметрами, задающими величину отступов: Insets(int top, int left, int bottom, int right). Метод getMargin() возвращает величину текущих отступов в виде объекта того же класса.

import javax.swing.JButton;

20

Page 21: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Пример использования панели и кнопкии

SimpleWindow.java Boss.java

В этом классе находится метод main

21

Page 22: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Менеджеры размещения элементов

• FlowLayout

Рисует в строку все компоненты в том порядке, в котором они были помещены в контейнер. Если места в строке уже не хватает, то переносит оставшиеся компоненты на другую строку. Чем-то это напоминает написание текста в текстовом редакторе.

http://java-course.ru/articles/layoutmanager/ http://www.quizful.net/post/swing-layout-managers

http://math.sgu.ru/sites/chairs/prinf/materials/java/lesson8.htm

• BorderLayout Компоненты располагаются в пяти областях: центр, север, юг, запад, восток. В момент расчета расположения преимущество имеют компоненты на севере и юге. После того, как эти компоненты размещены, layout определяет размещение компонентов на востоке и западе. И уже в последнюю очередь размещается компонент по центру, который занимает все оставшееся пространство. При добавлении элемента на панель с менеджером размещения BorderLayout, необходимо дополнительно указывать в методе add(), какая из областей имеется в виду. Для этого рекомендуется использовать константы, определенные в классе BorderLayout: NORTH, SOUTH, EAST, WEST и CENTER. Если же использовать метод add() как обычно, с одним параметром, элемент будет добавлен в центр.

import java.awt.FlowLayout;

setLayout(new FlowLayout());

setLayout(new BorderLayout());

import java.awt.BorderLayout;

22

Page 23: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Пример FlowLayout

23

Page 24: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Пример BorderLayout

24

Page 25: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Менеджеры размещения элементов

• Существуют и другие менеджеры размещения элементов, например:

– Менеджер табличного размещения GridLayout

– Менеджер блочного размещения BoxLayout и класс Box

http://java-course.ru/articles/layoutmanager/ http://www.quizful.net/post/swing-layout-managers

http://math.sgu.ru/sites/chairs/prinf/materials/java/lesson8.htm 25

Page 26: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Метка JLabel

• Метка представляет собой обычный текст, который выводится в заданном месте окна и используется для вывода вспомогательной текстовой информации: подписи к другим элементам, инструкции и предупреждения для пользователя.

• Помимо текста можно использовать значок.

• Можно выводить отформатированный текст.

• Несколько конструкторов с различными параметрами, в частности:

– JLabel(String text) — создает метку с надписью text

– JLabel(Icon image) — создает метку со значком image

– JLabel(String text, Icon image, int align) — создает метку с надписью text и значком image. Третий параметр задает выравнивание текста вместе со значком. В качестве него может быть использована одна из констант, описанных в интерфейсе SwingConstants: LEFT, RIGHT, CENTER.

• Метка может быть настроена для отображения отформатированного текста в формате HTML. Для этого необходимо, чтобы строка, устанавливаемая в качестве надписи метки, начиналась с тега <html>.

26

Page 27: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Метка JLabel

Перечислим основные методы класса JLabel:

• getText() — возвращает текущий текст надписи метки

• setText(String text) — задает новый текст надписи

• getIcon() — возвращает значок метки

• setIcon(Icon image) — устанавливает новый значок. В качестве значка обычно используется объект простого класса ImageIcon.

• getVerticalAlignment(), setVerticalAlignment(int align), getHorizontalAlignment(), setHorizontalAlignment(int align) — эти четыре метода позволяют получить текущее или установить новое выравнивание (по горизонтали и вертикали) метки относительно ее границ. Возможные положения описаны в интерфейсе SwingConstants.

• getVerticalTextPosition(), setVerticalTextPosition(int align), getHorizontalTextPosition(), setHorizontalTextPosition(int align) — эти четыре метода позволяют получить текущее или установить новое выравнивание текста относительно значка. Возможные положения описаны в интерфейсе SwingConstants.

• getIconTextGap(), setIconTextGap(int gap) — позволяет получить или задать расстояние между текстом и значком метки в пикселах.

27

Page 28: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Область для ввода текста JTextArea

• JTextArea также является потомком JTextField и наследует все его методы. В отличие от текстового поля область для ввода текста позволяет ввести не одну строку, а несколько.

• Наследуемые конструкторы

– JTextField(int columns) — создает пустое текстовое поле, ширина которого достаточна для размещения columns символов. При этом пользователь может вводить в текстовое поле строку какой угодно длины: она просто будет прокручиваться.

– JTextField(String text) — создает текстовое поле с начальным текстом text.

– JTextField(String text, int columns) — устанавливает и ширину и начальный текст.

• Занести текст в поле можно методом setText(String text). Метод getText() возвращает содержимое текстового поля целиком, а getText(int offset, int length) — фрагмент содержимого длины length, начиная с символа offset.

28

Page 29: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Задание

Порядок выполнения:

• Создание класса для интерфейса, например MeetingGUI

• Наследуем методы и переменные от класса JFrame

• На форме должны быть: JLabel, JTextArea, JButton. Создаем переменные этих классов.

• Добавляем созданные компоненты на форму.

• Задаем размер формы

• В классе Meeting создаем экземпляр класса MeetingGUI • Поправляем свойство видимости формы • Задание 1. Пробуем вывести весь диалог в Jlabel • Задание 2. Пробуем вывести константу TEXT в Jlabel, а остальной диалог в

JTextArea

• Вызываем метод setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) для того, чтобы кнопочка с крестиком в правом углу формы выполнила процедуру закрытия формы.

29

Page 30: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Кнопка

• Как только пользователь нажимает кнопку, создается ActionEvent событие, которое передается слушателям кнопки.

• Для того, чтобы организовать слушателя Swing предоставляет интерфейс ActionListener, который необходимо реализовать.

• Интерфейс ActionListener требует только реализации одного метода — actionPerformed.

После того, как обработчик создан, его необходимо добавить к кнопке.

30

Page 31: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Задание

В классе MeetingGUI добавьте обработчик на кнопку, в соответствии с которым форма закрывается при нажатии на кнопку.

Примечание:

Для закрытия формы используете метод

dispose();

Можно использовать без указания экземпляра класса как setSize(300,300);

31

Page 32: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Задание

В классе MeetingGUI добавьте вторую кнопку «Сменить цвет» (например, bColor) и обработчик на эту кнопку, в соответствии с которым цвет выводимого текста меняется.

Примечание:

Для изменения цвета используйте метод

setForeground(Color.blue); Метод применяется к экземпляру класса JTextArea

32

Page 33: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Второй способ обработки событий кнопки

• Возможно в одном слушателе «ловить» события, связанные с разными кнопками.

http://math.sgu.ru/sites/chairs/prinf/materials/java/lesson10.htm 33

Page 34: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Задание

Модифицируйте обработку кнопок в классе MeetingGUI в соответствии со вторым способом обработки.

34

Page 35: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Текстовое поле JTextField

• Текстовое поле — простой и часто используемый компонент, предназначенный для ввода небольших по объему (записываемых в одну строку) текстовых данных.

• Для создания текстового поля чаще всего используются конструкторы:

– JTextField(int columns) — создает пустое текстовое поле, ширина которого достаточна для размещения columns символов. При этом пользователь может вводить в текстовое поле строку какой угодно длины: она просто будет прокручиваться.

– JTextField(String text) — создает текстовое поле с начальным текстом text.

– JTextField(String text, int columns) — устанавливает и ширину и начальный текст.

• Методы:

– setText(String text) – метод заносит текст в поле

– getText() – метод возвращает содержимое текстового поля целиком

– getText(int offset, int length) — метод возвращает фрагмент содержимого длины length, начиная с символа offset.

• По умолчанию текст в поле прижимается к левому краю. Изменить это можно методом setHorizontalAlignment(int align), в качестве параметра передается одна из констант выравнивания, определенных в этом же классе JTextField: LEFT, CENTER, RIGHT.

35

import javax.swing.JTextField;

Page 36: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Задание • Добавляем на форму еще одну панель (JPanel), на которой размещаем

JLabel и JTextField.

• JLabel – «Введите цвет текста (blue, green):»

• JTextField – ожидаем ввод значений blue, green или пустая строка.

• Обработчик кнопки «Поменять цвет» меняем таким образом:

36

JLabel Кнопка «Поменять цвет»

blue Меняем цвет текста на синий

green Меняем цвет текста на зеленый

Пустая строка Меняем цвет текста на черный

Для стравнения строк следует использовать метод: testStroka1.equals(testStroka2);

где testStroka1 и testStroka2 – сравниваемые строки

Page 37: Java Практическое занятие 3 Классыimlearning.ru/netcat_files/file/OOP/Seminar/03_ ПР... · 2017. 3. 12. · Обзор библиотеки Java Swing элементы

Задание

• Перегруппируйте элементы на форме

• Добавьте красный цвет для отображения текста

37