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

Regression: MouseEvent not sent to MouseAdapter, Can not fire JPopupMenu

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P3 P3
    • None
    • 1.4.0
    • client-libs
    • x86
    • windows_2000



      Name: nt126004 Date: 08/30/2001


      java version "1.4.0-beta2"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta2-b77)
      Java HotSpot(TM) Client VM (build 1.4.0-beta2-b77, mixed mode)

      I can not get a JPopupMenu to fire becuase I can not get a MouseEvent
      to the associated MouseAdapter. I will post the Sun demo code for
      PopupMenuDemo because it demonstats the problem just as well as my
      application. There should be a popup menu that appears when one
      right clicks in the main window. It doesn't appear!

      import java.awt.*;
      import java.awt.event.*;
      import javax.swing.JPopupMenu;
      import javax.swing.JMenu;
      import javax.swing.JMenuItem;
      import javax.swing.JCheckBoxMenuItem;
      import javax.swing.JRadioButtonMenuItem;
      import javax.swing.ButtonGroup;
      import javax.swing.JMenuBar;
      import javax.swing.KeyStroke;
      import javax.swing.ImageIcon;

      import javax.swing.JTextArea;
      import javax.swing.JScrollPane;
      import javax.swing.JFrame;

      /*
       * This class adds popup menus to MenuDemo.
       */
      public class PopupMenuDemo extends JFrame
                                 implements ActionListener, ItemListener {
          JTextArea output;
          JScrollPane scrollPane;
          String newline = "\n";
          JPopupMenu popup;

          public PopupMenuDemo() {
              JMenuBar menuBar;
              JMenu menu, submenu;
              JMenuItem menuItem;
              JRadioButtonMenuItem rbMenuItem;
              JCheckBoxMenuItem cbMenuItem;

              addWindowListener(new WindowAdapter() {
                  public void windowClosing(WindowEvent e) {
                      System.exit(0);
                  }
              });

              //Add regular components to the window, using the default BorderLayout.
              Container contentPane = getContentPane();
              output = new JTextArea(5, 30);
              output.setEditable(false);
              scrollPane = new JScrollPane(output);
              contentPane.add(scrollPane, BorderLayout.CENTER);

              //Create the menu bar.
              menuBar = new JMenuBar();
              setJMenuBar(menuBar);

              //Build the first menu.
              menu = new JMenu("A Menu");
              menu.setMnemonic(KeyEvent.VK_A);
              menu.getAccessibleContext().setAccessibleDescription(
                      "The only menu in this program that has menu items");
              menuBar.add(menu);

              //a group of JMenuItems
              menuItem = new JMenuItem("A text-only menu item",
                                       KeyEvent.VK_T);
              //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
              menuItem.setAccelerator(KeyStroke.getKeyStroke(
                      KeyEvent.VK_1, ActionEvent.ALT_MASK));
              menuItem.getAccessibleContext().setAccessibleDescription(
                      "This doesn't really do anything");
              menuItem.addActionListener(this);
              menu.add(menuItem);
              menuItem = new JMenuItem("Both text and icon",
                                       new ImageIcon("images/middle.gif"));
              menuItem.setMnemonic(KeyEvent.VK_B);
              menuItem.addActionListener(this);
              menu.add(menuItem);
              menuItem = new JMenuItem(new ImageIcon("images/middle.gif"));
              menuItem.setMnemonic(KeyEvent.VK_D);
              menuItem.addActionListener(this);
              menu.add(menuItem);

              //a group of radio button menu items
              menu.addSeparator();
              ButtonGroup group = new ButtonGroup();
              rbMenuItem = new JRadioButtonMenuItem("A radio button menu item");
              rbMenuItem.setSelected(true);
              rbMenuItem.setMnemonic(KeyEvent.VK_R);
              group.add(rbMenuItem);
              rbMenuItem.addActionListener(this);
              menu.add(rbMenuItem);
              rbMenuItem = new JRadioButtonMenuItem("Another one");
              rbMenuItem.setMnemonic(KeyEvent.VK_O);
              group.add(rbMenuItem);
              rbMenuItem.addActionListener(this);
              menu.add(rbMenuItem);

              //a group of check box menu items
              menu.addSeparator();
              cbMenuItem = new JCheckBoxMenuItem("A check box menu item");
              cbMenuItem.setMnemonic(KeyEvent.VK_C);
              cbMenuItem.addItemListener(this);
              menu.add(cbMenuItem);
              cbMenuItem = new JCheckBoxMenuItem("Another one");
              cbMenuItem.setMnemonic(KeyEvent.VK_H);
              cbMenuItem.addItemListener(this);
              menu.add(cbMenuItem);

              //a submenu
              menu.addSeparator();
              submenu = new JMenu("A submenu");
              submenu.setMnemonic(KeyEvent.VK_S);

              menuItem = new JMenuItem("An item in the submenu");
              menuItem.setAccelerator(KeyStroke.getKeyStroke(
                      KeyEvent.VK_2, ActionEvent.ALT_MASK));
              menuItem.addActionListener(this);
              submenu.add(menuItem);

              menuItem = new JMenuItem("Another item");
              menuItem.addActionListener(this);
              submenu.add(menuItem);
              menu.add(submenu);

              //Build second menu in the menu bar.
              menu = new JMenu("Another Menu");
              menu.setMnemonic(KeyEvent.VK_N);
              menu.getAccessibleContext().setAccessibleDescription(
                      "This menu does nothing");
              menuBar.add(menu);

              //Create the popup menu.
              popup = new JPopupMenu();
              menuItem = new JMenuItem("A popup menu item");
              menuItem.addActionListener(this);
              popup.add(menuItem);
              menuItem = new JMenuItem("Another popup menu item");
              menuItem.addActionListener(this);
              popup.add(menuItem);

              //Add listener to components that can bring up popup menus.
              MouseListener popupListener = new PopupListener();
              output.addMouseListener(popupListener);
              scrollPane.addMouseListener(popupListener);
              menuBar.addMouseListener(popupListener);
          }

          public void actionPerformed(ActionEvent e) {
              JMenuItem source = (JMenuItem)(e.getSource());
              String s = "Action event detected."
                         + newline
                         + " Event source: " + source.getText()
                         + " (an instance of " + getClassName(source) + ")";
              output.append(s + newline);
          }

          public void itemStateChanged(ItemEvent e) {
              JMenuItem source = (JMenuItem)(e.getSource());
              String s = "Item event detected."
                         + newline
                         + " Event source: " + source.getText()
                         + " (an instance of " + getClassName(source) + ")"
                         + newline
                         + " New state: "
                         + ((e.getStateChange() == ItemEvent.SELECTED) ?
                           "selected":"unselected");
              output.append(s + newline);
          }

          // Returns just the class name -- no package info.
          protected String getClassName(Object o) {
              String classString = o.getClass().getName();
              int dotIndex = classString.lastIndexOf(".");
              return classString.substring(dotIndex+1);
          }

          public static void main(String[] args) {
              PopupMenuDemo window = new PopupMenuDemo();

              window.setTitle("PopupMenuDemo");
              window.setSize(450, 260);
              window.setVisible(true);
          }

          class PopupListener extends MouseAdapter {
              public void mousePressed(MouseEvent e) {
                  maybeShowPopup(e);
              }

              public void mouseReleased(MouseEvent e) {
                  maybeShowPopup(e);
              }

              private void maybeShowPopup(MouseEvent e) {
                  if (e.isPopupTrigger()) {
                      popup.show(e.getComponent(),
                                 e.getX(), e.getY());
                  }
              }
          }
      }
      (Review ID: 131046)
      ======================================================================

            bchristi Brent Christian
            nthompsosunw Nathanael Thompson (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: