import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import javax.swing.*;

public class Main extends Application {

    SwingNode m_swingNode;
    Button m_btnChangeSwingNodeContent;
    int m_changeCounter;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("SwingNode JLightweightFrame Leak Demo");
        
        m_swingNode = new SwingNode();
        m_changeCounter = 0;
        m_btnChangeSwingNodeContent = new Button("CHANGE SWINGNODE CONTENT");

        m_btnChangeSwingNodeContent.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                m_changeCounter = m_changeCounter + 1;
                JButton btn = new JButton("TEST BUTTON NB "+ m_changeCounter);
                JPanel panel = new JPanel();
                panel.add(btn);

                m_swingNode.setContent(null); //Removing previous content if any
                m_swingNode.setContent(panel);
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(m_swingNode);
        root.getChildren().add(m_btnChangeSwingNodeContent);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
} 