Java Практическое занятие
Графический интерфейс
Преподаватель: Бирюкова А.А.
Имеется 4 класса: Девочка, Мальчик, Человек, Встреча.
2
3
4
5
Требуется выводить не в консоль, а в графический интерфейс
6
Диалоговые окна JOptionPane
• Для вывода в графический интерфейс приложения разнообразной информации и выбора простых данных предназначен класс JOptionPane, работа с которым связана с вызовом одного из многочисленных статических методов, создающих и выводящих на экран модальное диалоговое окно стандартного вида. В диалоговых окнах JOptionPane можно выводить самую разнообразную информацию и, при необходимости, размещать в них дополнительные компоненты.
• JOptionPane унаследован от базового класса JComponent библиотеки Swing, так что можно работать с ним напрямую, т.е. создавать экземпляры класса JOptionPane и настраивать их свойства. Использование стандартных диалоговых окон существенно упрощает разработку приложения и позволяет ускорить процесс освоения пользователем интерфейса.
• Все стандартные диалоговые окна Swing имеют собственные UI-представители, отвечающие за интерфейс окна в используемом приложении. Это особенно важно для внешних видов окон, имитирующих известные платформы, пользователи которых не должны ощущать значительной разницы при переходе от «родных» приложений к Java-приложениям.
http://java-online.ru/swing-joptionpane.xhtml 7
Диалоговые окна JOptionPane
Наименование метода Описание
showMessageDialog Диалоговое окно вывода сообщения
showConfirmDialog Диалоговое окно подтверждения, с включением кнопок типа yes/no/cancel
showInputDialog Диалоговое окно с выбором
Основные диалоговые методы JOptionPane
http://java-online.ru/swing-joptionpane.xhtml 8
Конструкторы окна сообщений showMessageDialog
9
• parent - родительское окно (может быть null);
• message - отображаемый в окне текст сообщения. В большинстве случаев это строка, но может быть использован массив строк String[], компонент Component, иконка Icon, представленная меткой JLabel, объект Object, конвертируемый в строку методом toString().
• title - заголовок окна.
• messageType - тип диалогового окна :
– INFORMATION_MESSAGE - стандартное диалоговое окно для вывода информации со значком соответствующего вида;
– WARNING_MESSAGE - стандартное диалоговое окно для вывода предупреждающей информации со значком соответствующего вида;
– QUESTION_MESSAGE - стандартное диалоговое окно для вывода информации. Как правило, не используется для информационных сообщений;
– ERROR_MESSAGE - стандартное диалоговое окно для вывода информации об ошибке со значком соответствующего вида;
– PLAIN_MESSAGE - стандартное диалоговое окно для вывода информации без значка.
• icon - отображаемая в диалоговом окне иконка.
10
Задание
Преобразуйте вывод в программе таким образом,
чтобы вывод диалога девочки и мальчика осуществлялся и в
командную строку и в диалоговое окно.
11
Использование Swing
Swing — библиотека для создания графического интерфейса для программ на языке Java.
12
Обзор библиотеки 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
Обзор библиотеки Java Swing
элементы интерфейса
• Следующие элементы управления могут использоваться и как контейнеры, так как наследуются от класса java.awt.Container.
• JButton - кнопка;
• JCheckBox - кнопка-флажок;
• JComboBox - выпадающий список;
• JLabel - метка, надпись;
• JList - список;
• JPasswordField - текстовое поле для скрытого ввода;
• JProgressBar - компонент для отображения числа в некотором диапазоне;
• JRadioButton - преключатели, радио-кнопки, обычно используется с компонентом ButtonGroup;
• JSlider - компонент позволяющий выбрать значение из заданного диапазона;
• JSpinner - компонент позволяющий выбрать значение из указанной последовательности;
• JTable - таблица;
• JTextField - однострочное текстовое поле;
• JTextArea - многострочное текстовое поле;
• JTree - дерево.
14
Окно 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
Пример создания окна
16
Правильнее создавать для окна отдельный класс
SimpleWindow.java Boss.java
В этом классе находится метод main
17
Панель содержимого
• Напрямую в окне элементы управления не размещаются. Для этого служит панель содержимого, занимающая все пространство окна.
• Обратиться к этой панели можно методом getContentPane() класса JFrame. С помощью метода add(Component component) можно добавить на нее любой элемент управления.
• Пример добавления кнопки на форму:
18
Класс 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
Кнопка 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
Пример использования панели и кнопкии
SimpleWindow.java Boss.java
В этом классе находится метод main
21
Менеджеры размещения элементов
• 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
Пример FlowLayout
23
Пример BorderLayout
24
Менеджеры размещения элементов
• Существуют и другие менеджеры размещения элементов, например:
– Менеджер табличного размещения 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
Метка 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
Метка 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
Область для ввода текста 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
Задание
Порядок выполнения:
• Создание класса для интерфейса, например MeetingGUI
• Наследуем методы и переменные от класса JFrame
• На форме должны быть: JLabel, JTextArea, JButton. Создаем переменные этих классов.
• Добавляем созданные компоненты на форму.
• Задаем размер формы
• В классе Meeting создаем экземпляр класса MeetingGUI • Поправляем свойство видимости формы • Задание 1. Пробуем вывести весь диалог в Jlabel • Задание 2. Пробуем вывести константу TEXT в Jlabel, а остальной диалог в
JTextArea
• Вызываем метод setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) для того, чтобы кнопочка с крестиком в правом углу формы выполнила процедуру закрытия формы.
29
Кнопка
• Как только пользователь нажимает кнопку, создается ActionEvent событие, которое передается слушателям кнопки.
• Для того, чтобы организовать слушателя Swing предоставляет интерфейс ActionListener, который необходимо реализовать.
• Интерфейс ActionListener требует только реализации одного метода — actionPerformed.
После того, как обработчик создан, его необходимо добавить к кнопке.
30
Задание
В классе MeetingGUI добавьте обработчик на кнопку, в соответствии с которым форма закрывается при нажатии на кнопку.
Примечание:
Для закрытия формы используете метод
dispose();
Можно использовать без указания экземпляра класса как setSize(300,300);
31
Задание
В классе MeetingGUI добавьте вторую кнопку «Сменить цвет» (например, bColor) и обработчик на эту кнопку, в соответствии с которым цвет выводимого текста меняется.
Примечание:
Для изменения цвета используйте метод
setForeground(Color.blue); Метод применяется к экземпляру класса JTextArea
32
Второй способ обработки событий кнопки
• Возможно в одном слушателе «ловить» события, связанные с разными кнопками.
http://math.sgu.ru/sites/chairs/prinf/materials/java/lesson10.htm 33
Задание
Модифицируйте обработку кнопок в классе MeetingGUI в соответствии со вторым способом обработки.
34
Текстовое поле 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;
Задание • Добавляем на форму еще одну панель (JPanel), на которой размещаем
JLabel и JTextField.
• JLabel – «Введите цвет текста (blue, green):»
• JTextField – ожидаем ввод значений blue, green или пустая строка.
• Обработчик кнопки «Поменять цвет» меняем таким образом:
36
JLabel Кнопка «Поменять цвет»
blue Меняем цвет текста на синий
green Меняем цвет текста на зеленый
Пустая строка Меняем цвет текста на черный
Для стравнения строк следует использовать метод: testStroka1.equals(testStroka2);
где testStroka1 и testStroka2 – сравниваемые строки
Задание
• Перегруппируйте элементы на форме
• Добавьте красный цвет для отображения текста
37