Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин Страница 41
Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин читать онлайн бесплатно
Для получения не просто подтверждения от пользователя, а каких-либо данных, можно воспользоваться диалогом TextInputDialog, где можно получить строку, введенную пользователем.
Для выбора пользователем предустановленных опций можно использовать диалог ChoiceDialog.
Здесь вы в конструкторе диалога, либо методом getItems.addAll определяете список выбора.
И методом showAndWait получаете выбранный пользователем вариант.
Pagination
Элемент управления Pagination используется для навигации между страницами одного контента, который был разделен на более мелкие части.
Компонент Pagination состоит из содержимого страницы и управления навигацией между страницами.
Компонент Pagination создается с помощью конструктора, в котором можно указать количество страниц контента и индекс открытой страницы.
Количество страниц контента и индекс открытой страницы также можно указать методами setPageCount и setCurrentPageIndex.
Ограничить количество отображаемых кнопок страниц в компоненте можно методом setMaxPageIndicatorCount.
Контент страниц компонента Pagination заполняется с помощью фабрики, которая устанавливается методом setPageFactory.
На вход фабрика получает индекс страницы, которую выбирает пользователь для отображения, нажимая кнопку навигации, а на выход фабрика выдает узел контента страницы.
В этом примере у нас есть текст, разбитый на фрагменты, и мы в методе itemsPerPage определяем, что на каждой странице у нас будет один фрагмент.
На основе количества фрагментов мы рассчитываем, сколько у нас будет страниц и передаем эту цифру в конструктор компонента Pagination.
Методом setMaxPageIndicatorCount мы устанавливаем, что в панели навигации будет отображаться только 5 кнопок.
В фабрике мы вызываем метод createPage, в котором формируем узел, отображающий текст фрагмента страницы.
ButtonBar
Компонент ButtonBar представляет собой специализированную панель для размещения кнопок в конкретной операционной системе.
Любой узел Node может быть аннотирован с помощью метода setButtonData и помещен в панель ButtonBar, с помощью метода getButtons.addAll.
При этом размещение этого узла относительно других узлов будет определяться на основе его аннотации, а также общего порядка кнопок, определенного для панели ButtonBar.
Общий порядок кнопок устанавливается для панели ButtonBar устанавливается методом setButtonOrder с использованием констант BUTTON_ORDER_WINDOWS, BUTTON_ORDER_MAC_OS, и BUTTON_ORDER_LINUX, и является специфическим для конкретной операционной системы.
Например, для Windows порядка, кнопка с аннотацией Yes появится перед кнопкой с аннотацией No, тогда как для Linux и Mac OS порядка это будет наоборот.
По умолчанию все кнопки имеют одинаковый размер в панели ButtonBar, и это означает, что все кнопки имеют ширину самой широкой кнопки.
Вы можете отказаться от этого для каждой кнопки, вызывая метод setButtonUniformSize со значением false.
Панель SplitPane
Компонент SplitPane представляет собой панель с горизонтальным или вертикальным набором разделенных частей.
Панель SplitPane содержит набор дочерних узлов ObservableList, заполнить который можно с помощью метода getItems.addAll класса SplitPane.
Каждый дочерний узел панели SplitPane помещается в свою область, отделенную от других частей панели разделителями.
Количество разделенных частей определяется количеством дочерних узлов панели SplitPane.
Если дочерний узел заполняет не все пространство своей части панели, пользователь может мышкой сдвигать разделители частей панели.
Задавать расположение разделителей частей панели SplitPane можно с помощью метода setDividerPosition или методом setDividerPositions, или заполняя набор ObservableList разделителей методом getDividers.addAll.
Позиция разделителя представляет собой число между 0.0 и 1.0.
В этом примере мы создаем панель с двумя разделенными частями, при этом левая часть панели также разделена на две части, разделитель которых можно сдвигать мышкой.
Spinner
Компонент Spinner представляет собой однострочное текстовое поле, которое позволяет пользователю выбирать число или значение объекта из упорядоченной последовательности.
Спиннер похож на комбинированное поле combo box и список, которые позволяют пользователю выбирать из диапазона значений.
Как и редактируемые комбинированные поля combo box, спиннеры позволяют пользователю вводить свое значение в поле.
Но в отличие от комбинированных полей combo box, у спиннеров нет раскрывающегося списка.
Так как спиннеры не отображают все возможные значения – отображается только текущее значение – они часто используются вместо комбинированных полей или списков, когда набор возможных значений большой, чтобы выпадающим списком не закрывать другие компоненты интерфейса.
Последовательность значений спиннера определяется его фабрикой SpinnerValueFactory, которая устанавливается либо в конструкторе, либо методом setValueFactory.
Существуют три предустановленных фабрики для трех типов последовательностей значений спиннера.
Это IntegerSpinnerValueFactory для последовательности целых значений.
DoubleSpinnerValueFactory для последовательности значений типа double.
И ListSpinnerValueFactory для последовательности значений ObservableList, это обычно значения типа String.
У Spinner есть дочерний компонент TextField, который отвечает за отображение и потенциальное изменение текущего значения Spinner, и этот компонент называется редактором.
По умолчанию Spinner не редактируется, но это можно изменить, если для свойства editable установить значение true.
Редактор Spinner синхронизируется с фабрикой SpinnerValueFactory, слушая изменения свойства value фабрики значений.
Если пользователь изменил значение, отображаемое в редакторе, пользователь должен зафиксировать редактирование с помощью клавиши «Enter».
На слайде показано создание спиннеров для трех типов значений – int, double и String.
Для создания спиннера с последовательностью произвольных объектов, создается фабрика SpinnerValueFactory с переопределенными методами decrement и increment, а объект должен иметь переопределенный метод toString.
С помощью предустановленных классов спиннера и метода getStyleClass.add можно поменять расположение кнопок спиннера относительно поля значения.
Для создания редактируемого спиннера, сначала мы должны вызвать метод setEditable (true).
Так как поле спиннера принимает на вход строки, мы должны установить для фабрики значений преобразователь между строками и значениями последовательности спиннера.
Делаем мы это методом setConverter, в котором указываем преобразователь с определенными методами toString и fromString.
Далее мы присоединяем к полю спиннера, которое является редактором, слушатель нажатия клавиши Enter.
В котором извлекаем строку, введенную пользователем, и преобразуем ее в значение последовательности спиннера.
Далее, если значение не входит в последовательность, мы добавляем это значение.
Если такое значение уже есть, мы устанавливаем его как текущее.
Для последовательности типа String, все это уже определено по умолчанию.
Для обработки выбора пользователем значения, мы присоединяем к свойству value спиннера слушателя изменения свойства, в обработчике которого получаем выбранное значение.
Задание
Создайте спиннер с использованием модели данных и пользовательской фабрикой значений.
Панель ToolBar
Компонент ToolBar представляет панель инструментов, состоящую из горизонтального или вертикального набора узлов Node.
Свойство компонента orientation определяет горизонтальное или вертикальное расположение панели инструментов.
Панель ToolBar содержит набор дочерних узлов ObservableList, заполнить который можно с помощью метода getItems.addAll класса ToolBar.
Для создания панели инструментов, сначала создаются элементы управления, а затем они добавляются в панель инструментов.
Задание
Жалоба
Напишите нам, и мы в срочном порядке примем меры.