1. Как подготовить компонент Swing для размещения его на форме JavaFX.
2. Как поместить наш подготовленный контрол в JavaFX сцену.//Создание нашего Swing контролаvar myB = new JButton();
//Сделаем наш контрол встраиваемым в приложение JavaFX с графической сценой
var myJavaFXB = SwingComponent.wrap(myB);
Класс сцены javafx.scene.Scene имеет поле content, который является списком всех контролов, лежащих в этой сцене. Наша задача поместить подготовленный нами Swing контрол в этот список.
3. Что делать если используем Composer.
Этот плагин помогает конструировать визуальную часть, при этом он генерирует часть кода, которая не доступна для редактирования из NetBeans. По моему, это очень замечательно, но требует изучения мысли разработчиков этого самого плагина. Найдем код, среди того что редактировать нельзя, который отвечает за класс нашей сцены с компонентом Swing. Выглядеть он может примерно так:
masterScene = javafx.scene.Scene {Тут masterScene это моя визуальная сцена, куда требуется поместить контрол Swing. Прочитаем еще раз пункт 2 этой статьи. Мы имеем content, но не можем дописать эту часть кода прямо здесь, она не редактируемая.
width: 640.0
height: 480.0
content: javafx.scene.layout.Panel {
content: getDesignRootNodes ()
}
};
Теперь откроем визуальный редактор Composer для редактирования нашей формы. В инспекторе объектов создаем метод, отрабатывающий по завершению создания нашей сцены. См. рис.
Теперь мы имеем метод, в который необходимо поместить логику добавления нашего подготовленного контрола в сцену. Примерно так.
Вот, собственно, и все.//нередактируемый кодmasterScene = javafx.scene.Scene {
width: 640.0
height: 480.0
content: javafx.scene.layout.Panel {
content: getDesignRootNodes ()
}
};
scenePost_CreationCode(); // <-- вызов нашего только что добавленного метода
... ... ...// наш только что добавленный методfunction scenePost_CreationCode(): Void {// Предварительно установим некоторый значения и расположение на форме// Добавим наш подготовленный контрол в список сцены.
myB.setText("Нажми меня");
myJavaFXB.height = 25;
myJavaFXB.width = 75;
myJavaFXB.layoutX = 10;
myJavaFXB.layoutY =10;
insert myJavaFXB into getDesignScene().content;
}

