Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин Страница 40
Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин читать онлайн бесплатно
Свойство title позволяет установить заголовок окна FileChooser.
Методы showOpenDialog, showSaveDialog и showOpenMultipleDialog класса FileChooser отображают окно открытия файла, сохранения файла и открытия сразу нескольких файлов и при этом оперируют объектами java.io.File.
Метод getExtensionFilters класса FileChooser дает возможность установить фильтр файловых расширений для окна FileChooser.
Здесь показан пример использования компонента FileChooser для загрузки изображения.
Мы создаем компонент FileChooser с помощью конструктора и методом setInitialDirectory устанавливаем открываемый каталог.
По умолчанию открывается каталог Компьютер.
Далее методом getExtensionFilters.add мы добавляем фильтры расширений файлов для выбора пользователем.
По умолчанию какой-либо фильтр отсутствует.
Метод showOpenDialog возвращает выбранный пользователем файл в виде объекта java.io.File.
Из этого объекта мы извлекаем путь изображения и используем его для создания объекта Image и компонента ImageView.
Для сохранения в файл, вызывается метод showSaveDialog компонента FileChooser.
Здесь мы используем класс ImageIO пакета javax.imageio для записи изображения.
Статический метод write класса ImageIO записывает изображение, на основе объекта java.awt.Image, формата изображения и объекта java.io.File.
Формат изображения и объект java.io.File нам известны из метода showSaveDialog.
Чтобы получить объект java.awt.Image, мы используем класс SwingFXUtils, который обеспечивает преобразования типов данных между форматами Swing / AWT и JavaFX.
Компонент FileChooser позволяет выбрать только файл, а не каталог.
Для выбора каталога предназначен компонент DirectoryChooser.
Для компонента DirectoryChooser также устанавливается заголовок диалогового окна и первоначальный каталог.
Метод showDialog возвращает выбранный каталог в виде объекта java.io.File.
Окна Stage и Popup
Класс Stage представляет основной графический контейнер JavaFX-приложения, содержащий сцену приложения.
В методе start главного класса JavaFX-приложения можно не использовать объект Stage, передаваемый методу start в качестве аргумента, а создать свой объект Stage с помощью конструктора класса Stage.
При этом можно определить стиль создаваемого окна, используя поля DECORATED, TRANSPARENT, UNDECORATED и UTILITY перечисления StageStyle.
После создания объекта Stage, его свойство title дает возможность установить заголовок окна, свойство fullScreen – перевести окно в полноэкранный режим, свойство iconified – свернуть окно, а свойство resizable – отменить возможность изменения размеров окна пользователем.
Метод setScene устанавливает сцену для объекта Stage, а метод show делает окно видимым.
С помощью метода close можно закрыть окно,
методом initModality – можно установить модальность окна,
методом initOwner – можно установить родительское окно,
методом initStyle – определить декорирование окна,
а методы toBack и toFront позволяют перемещать окно на задний или передний план.
Класс Screen пакета stage позволяет получить характеристики экрана устройства и привязать окно Stage к размерам экрана.
Так как пользователь сам может изменять размеры окна перетаскиванием мышкой, то при изменении размеров Stage-окна хотелось бы иметь возможность легко просматривать всю сцену независимо от размеров Stage-окна, которое содержит сцену.
Для этого в качестве корневого узла графа сцены удобно назначить панель с прокруткой ScrollPane.
Однако панель ScrollPane может содержать только один дочерний узел, поэтому в качестве дочернего узла для панели ScrollPane можно установить контейнер Group или Pane.
Для контейнера Group нет возможности установить размеры методом setPrefSize, поэтому удобнее использовать контейнер Pane.
При этом важно установить размеры контейнера Pane чуть больше, чем размеры Scene-сцены, чтобы при прокрутке корневой панели ScrollPane видеть все узлы графа сцены.
Так как панель ScrollPane по умолчанию имеет серый фон, поэтому для изменения фона сцены можно использовать стиль -fx-background: white.
Поменять сторону полосы прокрутки панели ScrollPane с правой на левую можно методом setNodeOrientation с параметром NodeOrientation. RIGHT_TO_LEFT.
При этом к дочернему узлу панели нужно применить метод setNodeOrientation с параметром NodeOrientation. LEFT_TO_RIGHT.
Компонент Popup представляет всплывающее окно, которое обычно используется для уведомлений, выпадающих окон и т. д.
Всплывающее окно Popup может содержать набор узлов, пополнить который можно с помощью метода getContent.addAll класса Popup.
Отображается или скрывается окно Popup с помощью вызова методов show или hide.
А опция автоматического исчезновения окна при потере фокуса устанавливается определением свойства autoHide.
Координаты отображения окна Popup устанавливаются с помощью определения свойств x и y.
В этом примере мы создаем окно Popup.
Методом setAutoHide (true) устанавливаем для этого окна автоматическое закрытие при потере фокуса.
Добавляем в это окно узлы.
И в обработчике нажатия кнопки, мы привязываем координаты окна к курсору мыши при нажатии.
Методом show мы отображаем окно Popup.
Окна Dialog
Компонент Dialog представляет диалоговые окна для JavaFX приложения.
Класс Dialog имеет один общий тип, который представляет тип результата, возвращаемого диалогом.
В этом примере мы создаем диалоговое окно авторизации пользователя.
Поэтому типом здесь будет объект Pair, класс пакета javafx. util, представляющий пару имя-значение.
Именно этот объект и будет возвращать диалоговое окно, чтобы мы могли в приложении получить введенные пользователем логин и пароль.
Метод setTitle устанавливает заголовок диалогового окна, а методы setHeaderText и setGraphic устанавливают текст и значок заголовка содержимого окна.
Заголовок окна также может быть представлен узлом с помощью метода setHeader.
Метод getDialogPane возвращает панель DialogPane, которая служит корневым узлом диалога.
Эта панель содержит текст или узел и значок заголовка содержимого окна, а также контент и кнопки окна.
Если текст или узел заголовка не определены, значок отображается слева от контента.
Контент окна также может быть представлен текстом или узлом, используя методы setContentText или setContent.
Кнопки добавляются в панель DialogPane методом getButtonTypes.addAll, используя типы кнопок ButtonType.
Здесь мы создаем узел контента, содержащий поле для ввода логина и поле для ввода пароля.
Для отключения или включения кнопки авторизации при пустом или заполненном поле логина, мы получаем узел кнопки методом lookupButton и присоединяем к полю слушатель свойства textProperty, в обработчике которого включаем или отключаем кнопку авторизации.
Далее мы передаем фокус полю и методом setResultConverter мы связываем тип кнопки ButtonType, которую пользователь щелкнул, с результатом, который возвращается диалогом.
Методом showAndWait мы открываем окно и получаем введенные пользователем данные.
Метод show компонента Dialog открывает не модальное окно, которое не возвращает результат.
С помощью метода initOwner для диалога можно установить пользовательское родительское Stage окно, для которого можно определить свой значок.
Методом initStyle можно установить стиль окна.
А методом initModality можно установить модальность окна.
Класс Dialog расширяется классами Alert, ChoiceDialog, TextInputDialog, которые представляют специализированные диалоговые окна.
Диалоговое окно Alert с помощью типов AlertType представляет различные предустановленные типы окон, которые отличаются своим оформлением.
Типы INFORMATION, WARNING и ERROR не предполагают возврата какого-либо результата диалогом.
Установив тип CONFIRMATION для
Жалоба
Напишите нам, и мы в срочном порядке примем меры.