суббота, 16 марта 2019 г.

9 Создание GUI. Пакет Javax.Swing и краткое описание его классов

   GUI (graphical user interface) - это графический пользовательский интерфейс.

   Задача создания GUI - создание гибкого и дружелюбного интерфейса для использования приложения пользователями.


   Для того, чтобы разобраться, как создавать GUI на Java, познакомимся с пакетом javax.swing библиотеки Java API.


   Для подключения библиотеки Swing в приложении необходимо импортировать библиотеку javax.swing.

   Для создания графического пользовательского интерфейса приложения используют различные классы пакета javax.swing.

Классы, предназначенные для создания окон (JWindow, JFrame, JDialog)

   о классе Javax.Swing.JWindow:

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

   о классе Javax.Swing.JFrame:

   Основные отличия окна JFrame от JWindow:
      - наличие рамки, которая позволяет изменять размер окна
      - наличие заголовка с названием приложения (заголовок может быть пустым)
      - возможность использования системного меню, позволяющее проводить манипуляции с окном и приложением
      - наличие кнопок управления для закрытия и свертывания окна

   Класс JFrame(), если не задать параметры создаст пустое окно.
   Класс JFrame(String title) создаст пустое окно с заголовком title. Для определения заголовка окна можно также использовать метод setTitle() класса JFrame.

   Используемые методы для определения параметров окна:
      1) setSize(int width, int height) - для определения размеров окна
   Если не определить размеры окна, то оно будет иметь нулевую высоту независимо от того, что в нем находится. Здесь в размеры окна включены границы и строка заголовка.

      2) setLocation() - для задания положения окна

      3) setBounds(int x, int y, int width, int height) - для задания размеров окна и его положения (путём указания расположения его левого верхнего угла)

      4) setDefaultCloseOperation(int operation) - для определение действия при завершении программы.
   Данный метод позволяет указать, какое действие будет произведено при предварительной обработке события processWindowEvent() перед закрытием окна.
   По умолчанию в качестве параметра operation используется константа HIDE_ON_CLOSE, убирающая окно с экрана при его закрытии.
   При использовании константы EXIT_ON_CLOSE создаётся указание, что при закрытии окна необходимо закончить работу приложения.
   При использовании константы DO_NOTHING_ON_CLOSE - ничего не делать при закрытии окна. К окну JFrame подключается слушатель и обработка события закрытия окна выполняется в методе windowClosing. Алгоритм обработки построен таким образом, что окно закрывается при третьей попытке. Номер попытки отображается в метке интерфейса.

      5) setVisible(boolean visible) и show() - для того, чтобы сделать окно видимым.
   По умолчанию окно создается невидимым.
   Чтобы отобразить окно на экране вызывается метод setVisible с параметром true. Если вызвать его с параметром false, окно станет невидимым.
   Метод show(), вдобавок, проводит валидацию содержащихся в окне компонентов.

      6) pack() - для того, чтобы "упаковать" имеющиеся в окне компоненты так, чтобы они занимали столько места, сколько им необходимо. Компоненты при вызове этого метода переходят в «видимое» состояние, хотя и не появляются на экране до вызова одного из следующих методов

      7) setTitle() - для определения заголовка окна.

      8) setIconImage() - для определения иконки окна, которая располагается на кнопке свернутого окна или в заголовке окна в нормальном состоянии.

Окна Swing (JWindow, JFrame, JDialog) поддерживают два типа событий:

   WindowListener - позволяет узнать об изменениях в состоянии окна
   WindowFocusListener - сообщает о получении или потере компонентами окна фокуса ввода

   о классе Javax.Swing.JDialog:

   Диалоговые окна JDialog чаще всего используются в приложениях для получения дополнительной информации с целью установки параметров приложения, вывода важной вспомогательной или отладочной информации.
   Диалоговые окна при помощи этого класса можно создавать обычными или модальными (modal) - блокирующими доступ к остальным окнам приложения, пока пользователь не закончит работу с модальным диалоговым окном.
   Модальные диалоговые окна располагаются поверх основного окна приложения.
   Внешний вид диалоговых окон мало отличается от окон с рамкой JFrame, но обычно у них меньше элементов управления окна (чаще всего, имеется только кнопка закрытия окна) и отсутствует системное меню.
   Как и JFrame поддерживает закрытие окна, а в остальном сходен с другими окнами Swing.
   При создании диалоговых окон Swing необходимо указать «родительское окно», которым может быть окно с рамкой JFrame или другое диалоговое окно JDialog. Имеется также конструктор, не требующий «родительского» окна, но использующий вспомогательное прозрачное окно.


   Элементы управления - кнопки, флажки, переключатели, выключатели, меню и его элементы, и д.р. (JButton, JToggleButton, ButtonGroup, JRadioButton, JCheckBox)


   Выключатель JToggleButton
      Чаще всего используется в панелях инструментов, где он играет роль флажков.
      По внешнему виду это та же самая кнопка, только ее можно нажать, и она остается в этом состоянии.

   Группы элементов управления ButtonGroup
      Класс ButtonGroup позволяет связать несколько элементов управления в логическую группу, в которой выбранным может быть только один из них. При выборе пользователем другого элемента управления класс ButtonGroup позаботится о том, чтобы выбранный прежде элемент вернулся в исходное состояние.

   Переключатели JRadioButton
      Переключатель JRadioButton унаследован от выключателя JToggleButton и отличается от него только внешним видом.
      JRadioButton используют, как правило, при объединении нескольких переключателей в группу и реализации выбора «один из многих». По одиночке в интерфейсе их практически не используют; обычно эту роль исполняют флажки.

   Флажки JCheckBox
      Также как и переключатели, отличаются от выключателей только внешним видом.
      Флажки используются там, где нужно предоставить пользователю возможность что-то включить или выключить. Они также могут группироваться, но, в отличие от JRadioButton, никогда не реализуют выбор «один из нескольких», а всегда позволяют выбрать несколько равноценных вариантов.


   Текстовые компоненты библиотеки Swing (JTextField, JTextArea, JTextPane)

   Пакет javax.swing.text библиотеки Swing содержит компоненты для работы с текстом.
   Основные возможности всех текстовых компонентов Swing и их базовая архитектура описаны в абстрактном классе JTextComponent. Именно от этого класса унаследованы все текстовые компоненты Swing, будь то простое текстовое поле или многофункциональный редактор.
   Помимо того что в данном базовом классе задаются общие для всех текстовых компонентов свойства и действия (такие как цвет выделенного текста, цвет самого выделения, курсор, сам текст, механизмы работы с буфером обмена), в нем описывается взаимодействие практически всех составных частей пакета javax.swing.text.
   Текстовые компоненты имеют архитектуру MVC. Модель текстовых компонентов представлена довольно простым интерфейсом Document, который позволяет получать информацию об изменениях в документе и хранящийся в нем текст, а также при необходимости изменять полученный текст.

   JLabel - текст с иконкой

   JLabel используют, если нужен какой-то компонент, чтобы отобразить какое-то сообщение пользователю или сделать для поля ввода текстовую метку, или показать иконку.
   Текст, который показывает JLabel выделять нельзя, только смотреть.

   Списки (JList, JCombobox)

   Списки JList используются для визуального отображения данных.
   Пользователь видит весь список или большую его часть, и может выбрать один элемент списка или несколько.
    JList имеет двух поставщиков данных (модели данных). Первая модель, реализующая интерфейс ListModel, содержит элементы списка. Вторая модель ListSelectionModel реализует интерфейс ListSelectionModel и следит за выделенными элементами.
   По умолчанию в списке JList используется стандартная реализация модели DefaultListSelectionModel, поддерживающая все самые важные режимы выделения.

   В отличие от обычного списка JList, раскрывающийся список JComboBox используется для выбора одной строки из нескольких вариантов и показывает только выбранный в данный момент элемент.

   JComboBox позволяет также вводить собственные значения.


   Панели JTabbedPane, JSplitPane, JScrollPane, JViewPort

   Панель с вкладками JTabbedPane позволяет в компактном виде размещать визуальные компоненты в интерфейсе приложения.
   При этом пользователь может работать только с одной группой компонентов на одной из вкладок, в то время, как остальные компоненты на других вкладках будут скрыты.
   Таким образом можно рационально использовать пространство формы и, при этом, представлять логически связанные группы компонентов.

   Разделяемая панель JSplitPane используется для гибкого распределения пространства между двумя компонентами. Она позволяет произвольным образом изменить соотношение размеров связанных компонентов.

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

   Компонента JViewPort является основой панели прокрутки, и который можно использовать в приложениях как «видоискатель».

   Таблицы JTable

   Таблица JTable позволяет отображать двухмерную информацию в виде строк и столбцов, настраивать и сортировать данные, выводить их в любом подходящем виде, управлять заголовками таблицы и ее выделенными элементами.
   JTable использует три модели, поставляющие ей данные и сохраняющие изменения при изменении этих данных.
   Первая и самая важная модель реализует интерфейс TableModel и хранит данные ячеек таблицы и дополнительную служебную информацию об этих ячейках.
   Вторая модель реализует интерфейс TableColumnModel и управляет столбцами таблицы. TableColumnModel позволяет добавлять, перемещать и находить столбцы, узнавать об изменениях в их расположении, с ее помощью можно изменить расстояние между столбцами и находящимися в них ячейками.
   Модель TableColumnModel имеет собственную модель выделения списка ListSelectionModel. Так что можно формально говорить о четырех моделях таблицы JTable. Просто одна из этих моделей вызывается неявно, через другую модель.
   Третья модель таблицы SelectionModel используется для выделения списка. Она управляет выделением строк таблицы и не затрагивает столбцы.


   Инструмент для отображения иерархической информации JTree

   Отображение иерархической информации в библиотеке Swing реализуется с помощью дерева JTree, основой которого является корневой узел root.
   Потомки корневого узла, могут иметь своих потомков, и т.д.
   Информация о ветвях дерева хранится в узлах nodes.
   Узел без потомков является листом leaf дерева.
   Потомки одного узла являются близнецами siblings.
   Путь path в дереве определяет последовательность узлов, начиная от корня, по которым следует пройти, чтобы найти нужный нам узел.
   Пакет javax.swing.tree хранит основные «строительные» классы деревьев Swing : интерфейс TreeNode, описывающий узел дерева, модель дерева с его данными, реализующую интерфейс TreeModel, модель выделения узлов дерева TreeSelectionModel, позволяющую настраивать различные режимы выделения, класс TreePath, описывающий путь в дереве.


   Визуальные компоненты, позволяющие устанавливать данные в определенном диапазоне и отображать информацию, представляющую часть некоторого диапазона (JSlider, JProgressbar, JSpinner)

   Ползунки JSlider предоставляют пользователю наглядную возможность плавного изменения значения от минимального до максимального.
   Индикатор процесса JProgressBar используется для динамического отображения выполнения какого-либо процесса в приложении и позволяет оценить, на каком этапе выполнения находится интересующий нас процесс и сколько ориентировочно времени он может еще занять.
   Счетчик JSpinner позволяет выбрать значение из некоторого набора, который можно «прокручивать» в обе стороны. В отличие от списков (раскрывающийся список JComboBox, простой список JList) на экран не вызывается всплывающее окно и количество элементов в счетчике JSpinner может быть неограниченным.

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

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

   Диалоговое окно JFileChooser

   Компонент JFileChooser представляет собой контейнер, в котором расположены несколько компонентов, списков и кнопок, «управляющих» выбором файлов.
   JFileChooser - это компонент, унаследованный от класса JComponent, так что можно включить его в любое место интерфейса.
   С этим компонентом просто настроить и вывести на экран несложное диалоговое окно для открытия файла или сохранения в нем данных.

Не без использования java-online.ru (хороший ресурс)

Комментариев нет:

Отправить комментарий

Наследование в Java

   «родительское/дочернее»     Наследование (inheritance) - свойство системы, позволяющее описать (создать) новый класс на основе уже су...