package javafxpopuptest; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; import javafx.scene.shape.Rectangle; import javafx.scene.shape.RectangleBuilder; import javax.swing.*; public class JavaFXInSwingPopupTest extends JFrame { private JFXPanel fxPanel; public JavaFXInSwingPopupTest() throws HeadlessException { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JMenuBar menuBar = new JMenuBar(); JMenu testMenu = new JMenu("Test"); JMenuItem testMenuItem = new JMenuItem("Test"); testMenuItem.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { System.out.println("Test"); } } ); testMenu.add(testMenuItem); menuBar.add(testMenu); this.setJMenuBar(menuBar); fxPanel = new JFXPanel(); this.getContentPane().add(fxPanel); Platform.runLater(new Runnable() { @Override public void run() { initFX(fxPanel); } }); this.setSize(200, 200); this.setVisible(true); } private void initFX(JFXPanel fxPanel) { final Rectangle rect = RectangleBuilder.create().y(50).width(50).height(30).build(); rect.setOnMouseReleased( new EventHandler() { @Override public void handle(MouseEvent t) { if(t.getButton() == MouseButton.SECONDARY) { ContextMenu cm = new ContextMenu(); MenuItem testMenuItem = new MenuItem("Popup"); cm.getItems().add(testMenuItem); cm.show(rect, t.getScreenX(), t.getScreenY()); } } } ); final Group root = new Group(); root.getChildren().add(rect); Scene scene = new Scene(root); fxPanel.setScene(scene); System.out.println("JavaFX version: " + System.getProperty("javafx.runtime.version")); } public static void main(String[] args) { System.setProperty("apple.laf.useScreenMenuBar", "true"); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new JavaFXInSwingPopupTest(); } }); } }