Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8093921

[MenuItem] MenuItem.addEventHandler() doesn't work for registering MouseEvents'

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: P4 P4
    • None
    • 8u20
    • javafx
    • None

      Registering an event handler on a MenuItem to detect any kind of mouse event doesn't work. Sample code below for JavaFx in Swing demonstrates that only the event handler for the ActionEvent is triggered but not the one for the MOUSE_PRESSED event registered via addEventHandler( ).

      public class Test {

        private static void initAndShowGUI() {
          // This method is invoked on the EDT thread
          JFrame frame = new JFrame("Swing and JavaFX");
          final JFXPanel fxPanel = new JFXPanel();
          frame.add(fxPanel);
          frame.setSize(300, 200);
          frame.setVisible(true);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          Platform.runLater(new Runnable()
          {
            @Override
            public void run()
            {
              initFX(fxPanel);
            }
          });
        }

        private static void initFX(JFXPanel fxPanel) {
          // This method is invoked on the JavaFX thread
          Scene scene = createScene();
          fxPanel.setScene(scene);
        }

        private static Scene createScene() {
          Group root = new Group();
          Scene scene = new Scene(root, Color.ALICEBLUE);
          MenuBar menuBar = new MenuBar();

          Menu menu = new Menu("Menu");

          MenuItem menuItem = new MenuItem("MenuItem");

          menuItem.addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>()
          {
            @Override
            public void handle(MouseEvent mouseEvent)
            {
              System.out.println(mouseEvent);
            }
          });

          menuItem.setOnAction(new EventHandler<ActionEvent>()
          {
            @Override
            public void handle(ActionEvent actionEvent)
            {
              System.out.println(actionEvent);
            }
          });

          menu.getItems().addAll(menuItem);

          menuBar.getMenus().addAll(menu);
          root.getChildren().add(menuBar);

          return (scene);
        }

        public static void main(String[] args) {
          SwingUtilities.invokeLater(new Runnable()
          {
            @Override
            public void run()
            {
              initAndShowGUI();
            }
          });
        }
      }

            jgiles Jonathan Giles
            dkamaljfx Danesh Kamal (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: