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

[macosx] ActionListener called twice for JMenuItem using ScreenMenuBar

XMLWordPrintable

    • b12
    • Verified

      FULL PRODUCT VERSION :
      java version "1.7.0_04-ea"
      Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b19)
      Java HotSpot(TM) 64-Bit Server VM (build 23.0-b20, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Mac OS X 10.7.3

      A DESCRIPTION OF THE PROBLEM :
      When the ScreenMenuBar is activated using System.setProperty("apple.laf.useScreenMenuBar", "true"); and the registered Accelerator Key for a JMenuItem is pressed, the ActionListener is called twice.


      REGRESSION. Last worked in version 6u31

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Activate the usage of the Screen Menu Bar
      System.setProperty("apple.laf.useScreenMenuBar", "true");

      Create a JFrame with a JMenuBar, JMenu and a JMenuItem and register a hotkey to the JMenuItem using setAccelerator and add an ActionListener.

      Start the test application and press the Hotkey.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Having the ActionListener called once per pressed hotkey.
      ACTUAL -
      The ActionListener its called twice.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.awt.Toolkit;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.lang.reflect.InvocationTargetException;

      import javax.swing.JFrame;
      import javax.swing.JMenu;
      import javax.swing.JMenuBar;
      import javax.swing.JMenuItem;
      import javax.swing.KeyStroke;
      import javax.swing.SwingUtilities;

      public class Test extends JFrame {

      public Test() {
      JMenuBar menuBar = new JMenuBar();
      JMenu fileMenu = new JMenu("File");
      JMenuItem openItem = new JMenuItem("Open");
      openItem.setAccelerator(KeyStroke.getKeyStroke('O', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
      openItem.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
      System.out.println("i was called");
      }
      });
      fileMenu.add(openItem);
      menuBar.add(fileMenu);
      setJMenuBar(menuBar);
      pack();
      setVisible(true);
      }

      public static void main(String[] args) throws InvocationTargetException, InterruptedException {
      System.setProperty("apple.laf.useScreenMenuBar", "true");
      SwingUtilities.invokeAndWait(new Runnable() {

      @Override
      public void run() {
      new Test();
      }
      });
      }
      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Do not use the ScreenMenuBar.

            leonidr Leonid Romanov (Inactive)
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: