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

[macosx] ActionListeners fire twice for JMenuItems still in the ScreenMenuBar.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P3 P3
    • 8
    • 7u10
    • client-libs

      FULL PRODUCT VERSION :
      java version " 1.7.0_12-ea "
      Java(TM) SE Runtime Environment (build 1.7.0_12-ea-b02)
      Java HotSpot(TM) 64-Bit Server VM (build 24.0-b25, mixed mode)
      AND
      java version " 1.7.0_10-ea "
      Java(TM) SE Runtime Environment (build 1.7.0_10-ea-b16)
      Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      OS X 10.8.2

      A DESCRIPTION OF THE PROBLEM :
      JMenuItems still fire twice when used with the ScreenMenuBar and when they use shift-cmd or alt-cmd modifiers. They fire only once when the only modifier is cmd.

      I was verifying that bug 7160951 was actually fixed when I noticed that it still fired twice for more complicated modifiers. There are also times when it only fires once with shift-cmd and alt-cmd but most often it fires twice.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run the provided test frame and try both key shortcuts.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The output shows that the action listener fires twice for each key press.
      ACTUAL -
      There should only be one line of output per key press.

      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.awt.event.KeyEvent;
      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 TestFrame extends JFrame {

      public TestFrame() {
      JMenuBar menuBar = new JMenuBar();
      JMenu fileMenu = new JMenu( " File " );

      JMenuItem shiftItem = new JMenuItem( " Shift " );
      shiftItem.setAccelerator(KeyStroke.getKeyStroke('O',
      KeyEvent.SHIFT_MASK |
      Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
      shiftItem.addActionListener(new ActionListener() {
      @Override public void actionPerformed(ActionEvent e) {
      System.out.println( " Shift was called " );
      }
      });
      fileMenu.add(shiftItem);

      JMenuItem altItem = new JMenuItem( " Alt " );
      altItem.setAccelerator(KeyStroke.getKeyStroke('O',
      KeyEvent.ALT_MASK |
      Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
      altItem.addActionListener(new ActionListener() {
      @Override public void actionPerformed(ActionEvent e) {
      System.out.println( " Alt was called " );
      }
      });
      fileMenu.add(altItem);

      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 TestFrame();
      }
      });
      }
      }

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

            leonidr Leonid Romanov (Inactive)
            ndcosta Nelson Dcosta (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: