import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Test extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Show ContextMenu");

        Label label = new Label();

        ContextMenu ctx = new ContextMenu();
        ctx.getItems().add(new MenuItem("First"));
        ctx.getItems().add(new MenuItem("Second"));
        ctx.getItems().add(new MenuItem("Third"));
        ctx.getItems().add(new MenuItem("Fourth"));
        ctx.getItems().add(new MenuItem("Fifth"));

        ctx.setOnShown(e -> {
            label.setText("Showing");
        });

        ctx.setOnHidden(e -> {
            btn.setDisable(false);
            label.setText("Not showing");
        });

        btn.setOnMouseClicked(ec -> {

            btn.setDisable(true);

            ctx.show(btn, Side.BOTTOM, 0.0, 0.0);
        });

        HBox box = new HBox();

        StackPane root = new StackPane();
        root.getChildren().add(box);
        box.getChildren().add(btn);
        box.getChildren().add(label);

        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}