package swing; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.embed.swing.JFXPanel; import javafx.scene.Scene; import javafx.scene.chart.LineChart; import javafx.scene.chart.NumberAxis; import javafx.scene.chart.XYChart; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class EmbeddedInSwing { /** * @param args * unused */ public static void main(String[] args) throws Exception { FutureTask contentCreator = new FutureTask(new Callable() { @Override public JFXPanel call() throws Exception { return new JFXPanel(); } }); SwingUtilities.invokeLater(contentCreator); final JFXPanel content = contentCreator.get(); Callable sceneCreator = new Callable() { @Override public Scene call() throws Exception { LineChart chart = new LineChart(new NumberAxis(0, 100, 10), new NumberAxis(0, 100, 10)); chart.setLegendVisible(false); // chart.setData(FXCollections.observableArrayList(new XYChart.Series(FXCollections.observableArrayList(new XYChart.Data(10, 10))))); Scene scene = new Scene(chart); return scene; } }; FutureTask task = new FutureTask(sceneCreator); Platform.runLater(task); final Scene scene = task.get(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame("Graph in JavaFX embedded in Swing"); content.setScene(scene); frame.add(content); frame.pack(); frame.setVisible(true); } }); } }