Как вывести информационное сообщение javafx

Обновлено: 04.07.2024

Давным-давно, когда люди ещё делали домашние странички, интернет был по шипучему модему, а Napster казался опасной провокацией коммунистов, простенькие оконные приложения под Windows очень часто писали на библиотеке VCL. Одни пользовались Delphi (но признавались только домашним), другие смело запускали её из C++ Builder (и удивлялись ещё одному String, а также спискам, которые начинаются с 1). А кто-то ухитрялся писать на нём под unix-ы (вы помните Kylix? А он был!)

В VCL почти у всех визуальных компонент были свойства ShowHint и Hint. Если быть точным, они были у всех компонент оконного типа (кнопок, выпадающих списков и прочих панелек).

В строковой Hint писался текст подсказки, а булевый ShowHint мог её отключить. А более прокачанные даже знали, что можно сделать расширенный вариант подсказки. Если написать в Hint Нажми меня|Кнопка просит, чтобы вы её нажали, то левая часть всплывёт, а правая будет передана в событие. Это событие перехватывали и показывали полученный текст в строке состояния.

Настолько простые и удобные подсказки были предметом величайшей зависти тех, кто сидел на MFC (никаких WinForms в тогдашней Visual Studio ещё не было, не говоря о WPF), поддерживал OWL или штурмовал чистый WinAPI с Петцольдом наперевес. Кто знает, может быть кто-то из них и приложил свою мозолистую от кодинга руку к тому, что уникальная по своей удобности технология подсказок оказалась полностью утрачена в JavaFX.

Что у нас есть?

В JavaFX за подсказки отвечает компонент Tooltip. По всей видимости, это тайный компонент, потому что, к примеру, SceneBuilder его знать не знает.

Если мы создадим новый Tooltip, а потом привяжем через setTooltip, то при наведении курсора на компонент, к которому привязывали, мы и правда увидим подсказку. На чёрном фоне (так надо). И с поддержкой картинок (спасибо).

Но JavaFX не позволит нам расслабиться: свойство Tooltip (и соответствующие методы) есть только у наследников класса javafx.scene.control.Control. А все панели и прочие области наследуются от javafx.scene.layout.Region. И никаких подсказок на них всплывать, получается, не может. Видимо, раз в приложении есть панель, то пользователю должно быть и так ясно, что там находится.

А ТЗ требовало панель состояния и подсказки в ней в том числе и на панелях. И я справился своими силами.

Показываем и подсказываем

Причём интерфейс должен быть настолько простым, чтобы я мог поручить непосредственное привязывание подсказок студенту-стажёру, который работает на полставки.

Как и положено рабочему прототипу, это решение выглядит почти тривиальным. Поэтому я исключил все комментарии, которые бы только растянули статью. Но у него есть маленькое, но преимущество: приспособить его к своему проекту намного быстрее и проще, чем писать с нуля.

Особенно если вы такой же лентай, как и я.

Подсказываем

Саму подсказку мы будем хранить в двух классах, унаследованных от общего предка. Сначала создадим абстрактный класс подсказки.

Буква A перед названием пошла из старых учебников C++, по которым я учился программировать. Я не против, если вы привыкли по-другому (например, с постфиксом Base и т. п.). Я люблю начальную A, потому что она короткая.

И, как вы наверное догадались, любовь к шаблонам и генетикам у меня тоже из C++:


Теперь создадим по классу на оба случая. Вот класс для Region:


А вот для Control:

Контролируем

Теперь берёмся за Controller. А контроллер у нас начинается с интерфейса. Java без интерфейса — это как хакер без ноутбука.


А вот и сам контроллер:


Дальше можно смело писать, даже не задумываясь, кто от кого унаследован:


А если у нас есть labelStatusBar в качестве строки состояния, то мы можем использовать и его:


Конечно, эту реализацию стоит доработать — ведь чисто теоретически в приложении может быть и больше одной строки состояния. Если вам такие известны (разумеется, современные, на JavaFx и активно используемые) — дайте знать.

Заключение

К сожалению, этот набор из 4 классов слишком объёмен, чтобы свестись к одному документу на pastebin. Но и слишком мал и несамостоятелен, чтобы стать гордым maven-пакетом и занять почётное место в известном репозитории.

Но я всё равно надеюсь, что он найдёт своего пользователя (точнее, своего разработчика). А может, он попадётся на глаза разработчикам из Oracle и убедит их сделать подсказки удобней.

Есть одобренные самой Oracle библиотеки расширений — возможно. стоит попытаться пристроить этот интерфейс в одну из них?


2 ответа 2

Начиная с Java JDK 8u40 диалоги есть в стандартной библиотеке. Простейший пример:

введите сюда описание изображения

Вот хороший обзор доступных диалогов с примерами: JavaFX Dialogs (official)

дико извиняюсь,но как "подключить" jar-ник к проекту? тупо кинуть в src-папку и юзать Dialogs.showInformationDialog(. ) не получилось

Нужно добавить путь к JAR-файлу в Class Path. Если вы используете Eclipse, тогда: правая кнопка на проекте -> Build Path -> Add external jars

Всё ещё ищете ответ? Посмотрите другие вопросы с метками javafx или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.3.1.41564

Оповещение является частью JavaFX и является подклассом класса Dialog. Оповещения — это некоторые предопределенные диалоги, которые используются для отображения некоторой информации пользователю. Оповещения в основном имеют определенные типы оповещений:

Оповещение содержит 3 части:

  • Заголовок
  • Содержание текста
  • Кнопки подтверждения

Конструкторы класса:

  1. Оповещение (Alert.AlertType a) : Создает новое оповещение с указанным типом оповещения.
  2. Оповещение (Alert.AlertType a, String c, ButtonType… b) : создает новое предупреждение с указанным типом предупреждения, содержимым и типом кнопки.

Обычно используемые методы:

methodexplanation
getAlertType() set a specified alert type
setAlertType(Alert.AlertType a) set a specified alert type for the alert
getButtonTypes() Returns an ObservableList of all ButtonType instances that are currently set inside this Alert instance.
setContentText(String s) sets the context text for the alert
getContentText() returns the content text for the alert.

Ниже программы иллюстрируют класс Alert:

    Программа для создания оповещений разных типов и их отображения. Эта программа создает оповещения, которые имеют тип по умолчанию. При необходимости оповещение будет изменено на другие типы оповещений. Эта программа создает кнопки, обозначенные именами b, b1, b2, b3. Кнопки будут созданы внутри сцены, которая, в свою очередь, будет размещена внутри сцены. Мы создали бы ярлык, чтобы показать, нажата кнопка или нет. Функция setTitle () используется для предоставления заголовка сцене. Затем создается панель плитки, на которой вызывается метод addChildren () для прикрепления кнопки и метки внутри сцены. Наконец, вызывается метод show () для отображения окончательных результатов. Мы создадим обработчик событий для обработки событий кнопки. Обработчик события будет добавлен к кнопке с помощью функции setOnAction (). Когда кнопки нажимаются, они отображают соответствующие предупреждения, связанные с ними, и устанавливают соответствующий alertType с помощью функции setAlertType ().

// Java-программа для создания предупреждений о
// вводим и отображаем их

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

Класс JOptionPane

Интерфейс экземпляра класса JOptionPane имеет структуру, представленную на следующем рисунке. Иконка в интерфейсе может отсутствовать.


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

Конструкторы окна подтверждения showConfirmDialog

Конструкторы окна выбора showInputDialog

parent - родительское окно.

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

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

optionType - опция определения кнопок управления :

  • DEFAULT_OPTION
  • YES_NO_OPTION
  • YES_NO_CANCEL_OPTION
  • OK_CANCEL_OPTION

selectionValues - список возможных значений. В диалоговом окне InputDialog список будет представлен в компоненте JComboBox или JList. Если selectionValues = null, то в окне будет определено поле JTextField, в которое пользователь может ввести любое значение.

initialSelectionValue - инициализируемое значение.

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

Локализация кнопок JOptionPane

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

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


Листинг примера JOptionPane

В методах addMessageListeners(), addConfirmListeners(), addInputListeners() определяются слушатели, обрабатывающие нажатие соответствующих кнопок.




Диалоговые окна подтверждений ConfirmDialog

Листинг процедуры создания слушателей, формирующие диалоговые окна подтверждений.





Диалоговые окна выбора данных InputDialog

Листинг процедуры создания слушателей, формирующие диалоговые окна выбора




Исходные коды примеров, рассмотренных на странице, можно скачать здесь (2.25 Кб).

Читайте также: