import javafx.scene.control.Button; import java.awt.Color; import java.util.concurrent.CountDownLatch; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.layout.VBox; import javafx.embed.swing.JFXPanel; import javafx.event.EventHandler; import javafx.scene.control.CheckBox; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class JFXPanelApp { public static String TEXT_INPUT_ID = "text.input.id"; public static String BUTTON_ID = "button.id"; public static String MAIN_CONTAINER_ID = "main.container.id"; public static String HEAVY_POPUP_CONTAINER_ID = "heavy.container.id"; public static String LIGHT_POPUP_CONTAINER_ID = "light.container.id"; public static String MENU_POPUP_CONTAINER_ID = "menu.container.id"; public static String CHECK_ID = "check.id"; public static String HEAVYWEIGHT_POPUP_BTN = "Show heavywieght popup"; public static String LIGHTWEIGHT_POPUP_BTN = "Show lightwieght popup"; public static String MENU_POPUP_BTN = "Create popup menu"; public static String RESET_BTN = "Reset content"; public static int SCENE_WIDTH = 200; public static int SCENE_HEIGHT = 200; protected Scene scene; final JFXPanel mainJavafxPanel = new JFXPanel(); protected JFXPanelApp() { final JFrame frame = new JFrame(this.getClass().getSimpleName()); frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainJavafxPanel.setBorder(BorderFactory.createLineBorder(Color.black)); frame.getContentPane().add(mainJavafxPanel, BoxLayout.X_AXIS); reset(); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } protected void reset() { final CountDownLatch cl = new CountDownLatch(1); Platform.runLater(new Runnable() { public void run() { mainJavafxPanel.setScene(createScene(MAIN_CONTAINER_ID)); cl.countDown(); } protected Scene createScene(String id) { final VBox pane = new VBox(); pane.setMinSize(SCENE_WIDTH, SCENE_HEIGHT); pane.setMaxSize(SCENE_WIDTH, SCENE_HEIGHT); pane.setPrefSize(SCENE_WIDTH, SCENE_HEIGHT); pane.setId(id); final Scene scene = new Scene(pane, SCENE_WIDTH, SCENE_HEIGHT); final TextField text_input = new TextField("TextInput"); text_input.setId(TEXT_INPUT_ID); pane.getChildren().add(text_input); HBox button_box = new HBox(5); pane.getChildren().add(button_box); final CheckBox check = new CheckBox("Button pressed"); check.setId(CHECK_ID); final Button button = new Button("Click me"); button.setId(BUTTON_ID); button.setOnAction(new EventHandler() { public void handle(javafx.event.ActionEvent t) { System.out.println("scene.getWidth() = " + scene.getWidth()); System.out.println("scene.getHeight() = " + scene.getHeight()); System.out.println("mainJavafxPanel.getSize() = " + mainJavafxPanel.getSize()); } }); button_box.getChildren().add(button); button_box.getChildren().add(check); return scene; } }); try { cl.await(); } catch (Exception z) { } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new JFXPanelApp(); } }); } }