JavaFX SwingNode embed Swing component
import javax.swing.JLabel; import javax.swing.SwingUtilities; import javafx.application.Application; import javafx.embed.swing.SwingNode; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.control.ToggleButton; import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import javafx.stage.Stage; public class Main extends Application{ private static ToggleButton fxbutton; private static GridPane grid; public static Label fxLabel; @Override//from w w w . ja va2 s. c om public void start(Stage stage) { final SwingNode swingNode = new SwingNode(); createSwingContent(swingNode); BorderPane pane = new BorderPane(); String buttonText = "Use Swing Form"; fxbutton = new ToggleButton(buttonText); fxbutton.setAlignment(Pos.CENTER); fxbutton.setOnAction((event)->{ ToggleButton toggle = (ToggleButton) event.getSource(); if(!toggle.isSelected()){ swingNode.setDisable(true); swingNode.setVisible(false); grid.setDisable(false); grid.setVisible(true); fxbutton.setText("Use Swing Form"); } else { swingNode.setDisable(false); swingNode.setVisible(true); grid.setDisable(true); grid.setVisible(false); fxbutton.setText("Use JavaFX Form"); } }); swingNode.setVisible(false); Text appTitle = new Text("Swing/FX Form Demo"); pane.setTop(appTitle); HBox formPanel = new HBox(); formPanel.setSpacing(10); fxLabel = new Label("Message from JavaFX form..."); formPanel.getChildren().addAll(fxFormContent(), swingNode); pane.setCenter(formPanel); VBox vbox = new VBox(); vbox.getChildren().addAll(fxbutton, fxLabel); pane.setBottom(vbox); Scene scene = new Scene(pane, 700, 500); stage.setScene(scene); stage.setTitle("Swing Form Embedded In JavaFX"); stage.show(); } private void createSwingContent(final SwingNode swingNode) { SwingUtilities.invokeLater(() -> { swingNode.setContent(new JLabel("Swing")); }); } private GridPane fxFormContent() { grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(25, 25, 25, 25)); Text scenetitle = new Text("Enter User"); grid.add(scenetitle, 0, 0, 2, 1); Label first = new Label("First Name:"); grid.add(first, 0, 1); TextField firstField = new TextField(); grid.add(firstField, 1, 1); Button messageButton = new Button("Click"); messageButton.setOnAction((event) ->{ fxLabel.setText("Message from JavaFX Form..."); }); grid.add(messageButton, 0,3); return grid; } public static void main(String[] args) { launch(args); } }