Как сделать окно javafx

Добавил пользователь Евгений Кузнецов
Обновлено: 21.08.2024

Я пытаюсь открыть несколько окон с помощью JavaFX, у меня есть eventlistener, который открывает новое окно при нажатии кнопки выглядит следующим образом:

откроется первое окно и откроется новое окно, но моя проблема заключается в том, чтобы события работали со вторым окном

в main.fxml меня есть эта строка:

Тогда в моем классе контроллера у меня есть этот метод:

но Intellij говорит мне это; контроллер не установлен для элемента верхнего уровня

Итак, мой вопрос: нужно ли мне создавать несколько классов контроллеров или я могу использовать только один для нескольких окон, если это так?

Рекомендуемый подход - определить контроллер для каждого FXML. Поскольку контроллеры очень легкие, это не должно увеличивать накладные расходы. Контроллер для файла main.fxml может быть таким же простым, как

Я использовал этот подход с довольно большим количеством файлов FXML и соответствующих контроллеров в одном проекте и не имел проблем с управлением кодом и т.д. Я рекомендую использовать соглашение об именах формы Main.fxml MainController .

Если вашим контроллерам необходимо обмениваться данными, используйте методы, описанные в разделе "Передача параметров" JavaFX FXML

Я создаю представление в SceneBuilder для своего приложения JavaFX. Я хочу, чтобы мой обзор был максимальным. Как я могу добиться этого в SceneBuilder или в файле .fxml ?

Вы не можете сделать это с помощью Scene Builder, поскольку maximize или > - это свойства >, а не макеты, установленные на сцене.

Вы можете загрузить и установить .fxml на сцену, а затем установить сцену на сцене.

На сцене можно использовать следующие приемы:

На этапе я нашел два полезных свойства. Во-первых, это setFullScreen (boolean), который установит ваше представление на полный экран, но также скроет всю панель задач и заголовок представления.

Второй - setMaximized (boolean), который установит идеальный размер представления, как и любой другой размер представления приложения.

Я использую setMaximized (true) для своего приложения.

Я согласен с Yemmy1000. primaryStage.setMaximized (true) у меня работает нормально.

Этот код будет иметь ширину: 1800 и высоту: 900 при восстановлении с максимума.

Это код, который работает для меня

Он смешивает мой оконный экран при запуске приложения.

Поскольку вы не можете развернуть представление в формате fxml до максимума, вам необходимо установить максимальный размер рабочей области. В javafx 2 нет прямого метода для установки максимального размера сцены, но есть другой способ сделать это. Это путем ручной настройки размера сцены. Вы можете использовать этот код:

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

я видел этот вопрос но я не смог узнать, как реализовать это поведение.

задан 07 мая '12, 18:05

3 ответы

На мой взгляд, это не очень хорошее решение, потому что родительское окно все время активно.
Например, если вы хотите открыть окно как модальное после нажатия кнопки.

Теперь ваше новое окно ДЕЙСТВИТЕЛЬНО модальное - родительский блок. также Вы можете использовать

Мне пришлось использовать stage.initModality(Modality.APPLICATION_MODAL); чтобы заблокировать вызов родителя. Даже использование showAndWait() не блокировало вызывающего абонента (я звонил из JFXPanel - не уверен, что это имело какое-либо значение.) - Торуокер

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

Предыдущее связанное решение использует устаревший подход обработчика событий для выполнения действия после закрытия диалогового окна. Этот подход был действителен для реализаций до JavaFX 2.2. Для JavaFX 8+ нет необходимости в обработчиках событий, вместо этого используйте новый этап showAndWait() метод. Например:

Обратите внимание, что для того, чтобы все работало должным образом, важно инициализировать владельца рабочей области. и для инициализации модальности сцены либо WINDOW_MODAL or APPLICATION_MODAL.

В нем есть несколько высококачественных стандартных диалогов пользовательского интерфейса. JavaFX 8 и УправлениеFX, если они соответствуют вашим требованиям, я советую использовать их, а не разрабатывать свои собственные. Те встроенные JavaFX Диалог и Оповещение классы также имеют initOwner и initModality и showAndWait методы, так что вы можете установить для них модальность по своему усмотрению (обратите внимание, что по умолчанию встроенные диалоги являются модальными для приложения).

Решил, что пора написать грандиозное многофункциональное приложение на Java, но не знаешь, с чего начать? Держи крутой видеокурс!

Возвращаем JavaFX к жизни: 21 урок для начинающих

Мы собрали новую статью по просьбам трудящихся под этим материалом. Да, JavaFX удаляется из последних версий JDK. Но есть трюки, которые вернут старый добрый инструмент. Смотри, как это сделать:

А теперь, когда всё установили и настроили, приступаем к видеокурсу :)

Первый урок курса по традиции посвящен базису. JavaFX – это инструмент для создания кроссплатформенных UI-приложений. Первая особенность – наличие в структуре приложения непривычных элементов: Scene и Stage , которые позволяют создавать более гибкий и управляемый код. Другая фича – поддержка HTML , CSS и JS .

Ты напишешь свое первое FX-приложение, а пользователи ОС Linux в конце ролика получат совет, как починить самый первый запуск.

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

На выходе ты получишь архив, содержащий INF-файл с данными о джарнике и основной класс. Запуск для Windows осуществляется двойным кликом, а для Linux – из терминала.

Здесь ты будешь учиться рисовать фигуры в JavaFX . Фигур может быть много: круг, эллипс, треугольник и, как ни странно, текст – это тоже фигура. Концепция проста, так что поняв, как это работает на объектах из урока, ты сможешь рисовать и другие фигуры.

До появления FX этими задачами занималась библиотека AWT : если ты с ней знаком, тебе будет скучновато на этой лекции.

В предыдущем уроке рассматривался процесс создания фигур при помощи нативных методов. Здесь ты узнаешь, как все это проделать на Canvas .

Автор заранее подготовил метод с кучей действий для работы с разными фигурами. Занятный процесс оперирования графикой сопровождается поиском неисправности. Попробуй найти ее раньше ведущего ;)

Речь пойдет о биндинге и пропертис. Пропертисы – это обертки над классами: int –> IntegerProperty . Зачастую эти штуки используются при создании JavaBeans .

Еще один удобный функционал – биндинг. Он позволяет менять одно значение при изменении другого.

В конце урока автор рассматривает интересную и тесно связанную с биндингом тему – ChangeListener .

Если ты знаком со Swing , то понять это в разрезе JavaFX не составит труда. Многофункциональный инструмент помогает размещать элементы на панели создаваемого интерфейса программы. Существует несколько принципов размещения, но автор рассмотрит только самые распространенные. Занятие подкрепляется понятными примерами кода.

Возможно, ты уже знаком с различными элементами вроде textField , button и т. д., поскольку добавлял их на форму. В этой лекции автор остановится на нюансах работы с каждым из них. Будет представлен интерфейс со всеми существующими элементами, которые можно использовать в своих целях.

Этот видос научит тебя создавать кастомные контроллы – те, которые ты сам придумаешь. Возможности безграничны, особенно радует поддержка CSS . Есть два варианта создания собственных элементов: непосредственно силами Java и FXML .

Автор объяснит на примере TextField , как можно расширить его функционал, создав свой собственный элемент для формы.

Если ты давно хотел разобраться, как работает процесс управления нажатиями и прочими событиями, то пришел твой час. Основные события – это KeyEvent , MouseEvent , ActionEvent , а остальные используются реже (на досуге почитай и потести другие ивенты).

Для начала нужен контролл, добавленный на форму. А дальше вешаем обработчик на нужный котролл и внутри метода пишем код. Все элементарно. Пробуй сам или повторяй по уроку.

Довольно простая тема (поначалу). Урок начинается с добавления картинки в основное окно приложения через InputStream и указания ссылки на объект. В качестве усложнения задания будет предложен вариант просмотра/замены пикселей в исходном изображении при помощи GetPixelReader и PixelReader / Writer . Занятная тема, т. к. позволяет потренировать навыки и вспомнить Java Core .

Анимация в Java реализуется достаточно просто, но понадобится много кода. Лектор показывает подготовленную заранее программку, выводящую в окне приложения элементарную анимацию.

Все завязано на изменении KeyValue для каждого параметра анимации: их может быть несколько. В примере изменяется перемещение по области, длительность всей анимации, реверс и бесконечное "воспроизведение".

На этом уроке ты узнаешь, что такое Scene Builder и зачем он тебе нужен. Данный инструмент не поставляется вместе с Java , и его нужно скачивать отдельно с официального сайта Oracle.

В окне билдера собраны и удобно скомпонованы все элементы, присутствующие в JavaFX . Все просто: выбирается элемент слева и драгндропом переносится вправо, в контейнер. Изменять свойства каждого добавленного элемента можно непосредственно в меню элемента.

Вся прелесть билдера в том, что сохраненную форму можно спокойно перенести в свой проект JavaFX и там создать обвязку, обработку и прочее.

Ранее в лекциях упоминалось о существовании CSS в работе с JavaFX . Пришло время разобраться! До появления JavaFX был неудобный и громоздкий Swing , в котором кастомить элементы можно было с огорчением и болью. FX вобрал в себя все лучшее от HTML и позволяет “по щелчку” изменять любое свойство элемента.

В комплекте с JavaFX идет набор стилей, которые можно взять и прилепить к приложению быстро и легко. Либо на его основе сделать модификацию. Это и будет темой урока.

Пытливый зритель заподозрит неладное и задумается: "А чем Scene Builder или чистая Java не подходит?". Самое главное – это удобство использования и внесение изменений в XML-файлы без перекомпиляции. Автор приводит объяснения из официального хелпа, чем одно лучше другого.

Единственная проблема – обработка событий. Но все оказывается проще некуда.

JavaFX умеет проигрывать музыку и видео. Лектор покажет простой и понятный способ реализации такого функционала. Для этого нужен класс Media , в который ты можешь передать URL или файл. А дальше все элементарно: добавляй кнопки управления, оформляй окно проигрывателя и прочее.

С видео дела обстоят аналогично, но могут быть траблы с кодеками: на некоторых типах файлов есть лицензии, что может затруднить работу видеоплеера. В официальном мануале ты найдешь описание поддерживаемых форматов.

Пробуем работать с HTML и JS : в окошке JavaFX будет выводиться HTML, Java будет отдавать функции JS и наоборот.

Для отображения HTML обычно используется движок WebKit и webView . Эта штука может выводить инфу ( loadContent ) из URL, строки или файла. С помощью WebView можно работать с Web-элементами напрямую вплоть до выполнения JS-скрипта, который меняет кучу параметров и перерисовывает страницу. Круто, правда?

В Java существует 6 типов графиков и все они работают аналогично: создается график, в него кладется инфа (зачастую используются списки), и все работает. В ролике автор использует в качестве примера Pie chart . Видос короткий, но простой и понятный, позволяющий сразу что-то наваять.

В уроке много кода, но автор постепенно объяснит суть каждого куска. Тренироваться ты будешь на цилиндре, а другие объекты разберешь самостоятельно по аналогии.

JavaFX позволяет менять различные параметры, вплоть до градиента окраски объекта, а эффект трехмерности достигается с помощью инструмента PerspectiveCamera .

В коллекциях JavaFX есть интерфейсы: ObservableList , ObservableMap , ListChangeListener , MapChangeListener . Это обычные листы и мапы, но они позволяют отлавливать изменения и реагировать на события.

Лектор показывает, как срабатывает реакция на изменение данных в списке.

Как и в случае с коллекциями, в теме многопоточности тоже существует несколько классов и интерфейсов, реализующих и работающих с многопоточностью. Такой подход позволяет более эффективно работать связке между приложением FX и потоками. JavaFX предоставляет свои классы Task и Service из пакета javafx.concurrent . В Task описывается конкретное действие, которое требуется выполнить, а Service запускает все это счастье.

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

У меня есть приложение JavaFX, в котором у меня есть главное окно (сцена), из которого пользователь должен открыть второе дочернее окно. Во втором окне пользователь должен выполнить некоторые действия, которые в дальнейшем повлияют на поведение приложения.

Я не мог понять, как мне получить доступ к данным / значениям второго экрана после того, как пользователь закроет этот экран.

Это пример похожей ситуации. Допустим, я хочу получить значение текстового поля второго этапа.

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

Теперь, конечно, ты можешь просто сделать

в вашем обработчике.

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

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