import java.awt.GridLayout; import java.lang.reflect.InvocationTargetException; import javafx.application.Application; import javafx.embed.swing.SwingNode; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import javafx.stage.WindowEvent; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.SwingUtilities; /** * * @author andrei-eremeev */ public class SwingNodeBase extends Application { private volatile boolean isFinished = false; private final Object monitor = new Object(); @Override public void start(Stage stage) throws Exception { SwingNode swingNode = new SwingNode(); init(swingNode); StackPane pane = new StackPane(); pane.getChildren().add(swingNode); Scene scene = new Scene(pane, 300, 300); stage.setScene(scene); stage.setX(175); stage.setY(75); stage.setOnShown(new EventHandler() { @Override public void handle(WindowEvent t) { try { Thread.sleep(1000); } catch (InterruptedException e) { } System.out.println("SHOW"); synchronized (monitor) { isFinished = true; monitor.notify(); } } }); stage.show(); new Thread(new Runnable() { @Override public void run() { } }).start(); } private static void init(final SwingNode node) throws InterruptedException, InvocationTargetException { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { JPanel panel = new JPanel(); panel.setLayout(new GridLayout(2, 1)); JButton button = new JButton("Button"); JTextArea textArea = new JTextArea("TextArea"); panel.add(button); panel.add(textArea); node.setContent(panel); } }); } public static void main(String[] args) { launch(args); } }