Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8287331
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 8, 20262026-06-08T12:00:24+00:00 2026-06-08T12:00:24+00:00

I have an application that has a main GUI with a menubar, and another

  • 0

I have an application that has a main GUI with a menubar, and another fullscreen frame, which makes some parts of the main GUI appear in fullscreen exclusive mode. When I am in fullscreen mode, I would like to bind a drop-down menu from the menu bar as jpopupmenu.

Swing provides the function getPopupMenu() in JMenu. This function seems to work fine at first glance. I can hover over the menuitems and move to and view the submenus. Hovering over the submenus does emphasize the submenus, hovering over a plain menuitem (or radiobuttonmenuitem or checkboxmenuitem) does not emphasize the item. However, I can’t actually click on a menuitem. The keyboard-shortcuts do actually work fine, though. The problem is essentially the same as presented on this forum (where the problem is not solved, though):

http://www.java-forums.org/new-java/16463-jmenu-jpopupmenu.html

If I add a JMenuItem after the menubar has been initialized and used/shown in the main GUI (thus when switching to the fullscreen frame), the menu-item is actually clickable. This menu-item is in turn also clickable in the menubar of the main GUI. Executing getPopupMenu() directly after initializing the jMenu does not change anything. Not using the fullscreen exclusive-mode does also not change anything about the problem.

Edit

It seems I left out some important information: I’m testing the app on Mac OSX and using:
System.setProperty("apple.laf.useScreenMenuBar", "true");

To make the menu bar use the native menubar. If I disable this, the popup-menu works as expected. This seems like a bug in the mac java API? Is their some way to overcome, this?

I apologize for forgetting mentioning this, I wasn’t aware this would influence anything (though it seems kind of obvious).

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-08T12:00:26+00:00Added an answer on June 8, 2026 at 12:00 pm

    Okay, I’m probably missing something, but I hacked this together really quickly and have no issues

    public class PopupFrame extends javax.swing.JFrame {
    
        /**
         * Creates new form PopupFrame
         */
        public PopupFrame() {
            initComponents();
        }
    
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {
    
            jMenuBar1 = new javax.swing.JMenuBar();
            mnuFile = new javax.swing.JMenu();
            jMenuItem1 = new javax.swing.JMenuItem();
            jMenuItem2 = new javax.swing.JMenuItem();
            jMenuItem3 = new javax.swing.JMenuItem();
            jMenuItem4 = new javax.swing.JMenuItem();
            jMenuItem5 = new javax.swing.JMenuItem();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            addMouseListener(new java.awt.event.MouseAdapter() {
                public void mousePressed(java.awt.event.MouseEvent evt) {
                    doMouseClicked(evt);
                }
                public void mouseReleased(java.awt.event.MouseEvent evt) {
                    doMouseClicked(evt);
                }
                public void mouseClicked(java.awt.event.MouseEvent evt) {
                    doMouseClicked(evt);
                }
            });
    
            mnuFile.setText("File");
    
            jMenuItem1.setText("New");
            jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    doActionPerformed(evt);
                }
            });
            mnuFile.add(jMenuItem1);
    
            jMenuItem2.setText("Open");
            jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    doActionPerformed(evt);
                }
            });
            mnuFile.add(jMenuItem2);
    
            jMenuItem3.setText("Save");
            jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    doActionPerformed(evt);
                }
            });
            mnuFile.add(jMenuItem3);
    
            jMenuItem4.setText("Close");
            jMenuItem4.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    doActionPerformed(evt);
                }
            });
            mnuFile.add(jMenuItem4);
    
            jMenuItem5.setText("Exit");
            jMenuItem5.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    doActionPerformed(evt);
                }
            });
            mnuFile.add(jMenuItem5);
    
            jMenuBar1.add(mnuFile);
    
            setJMenuBar(jMenuBar1);
    
            org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(0, 400, Short.MAX_VALUE)
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(0, 278, Short.MAX_VALUE)
            );
    
            pack();
        }// </editor-fold>
    
        private void doActionPerformed(java.awt.event.ActionEvent evt) {
    
            JMenuItem mi = (JMenuItem) evt.getSource();
    
            JOptionPane.showMessageDialog(this, "Clicked " + mi.getText());
    
        }
    
        private void doMouseClicked(java.awt.event.MouseEvent evt) {
    
            if (evt.isPopupTrigger()) {
    
                JPopupMenu popupMenu = mnuFile.getPopupMenu();
                popupMenu.show(this, evt.getX(), evt.getY());
    
            }
    
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            /*
             * Set the Nimbus look and feel
             */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /*
             * If Nimbus (introduced in Java SE 6) is not available, stay with the
             * default look and feel. For details see
             * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(PopupFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(PopupFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(PopupFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(PopupFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>
    
            /*
             * Create and display the form
             */
            java.awt.EventQueue.invokeLater(new Runnable() {
    
                public void run() {
                    new PopupFrame().setVisible(true);
                }
            });
        }
        // Variables declaration - do not modify
        private javax.swing.JMenuBar jMenuBar1;
        private javax.swing.JMenuItem jMenuItem1;
        private javax.swing.JMenuItem jMenuItem2;
        private javax.swing.JMenuItem jMenuItem3;
        private javax.swing.JMenuItem jMenuItem4;
        private javax.swing.JMenuItem jMenuItem5;
        private javax.swing.JMenu mnuFile;
        // End of variables declaration
    }
    

    I apologies, I had to put it together while my 3 month old had a nap, so it’s quick and ugly 😛

    UPDATE

    After some playing around, it would seem that when we invoke the popup ourselves, I was changing the popup’s parent reference (invoker) which meant that when the JMenu tried to show the popup, the context was all wrong.

    I updated the doActionPerformed method to look like this:

    JOptionPane.showMessageDialog(this, "Clicked " + mi.getText());
    JPopupMenu popupMenu = mnuFile.getPopupMenu();
    popupMenu.setInvoker(mnuFile);
    

    Basically, resting the popup’s client reference.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have an application that has two threads. The first one (the main thread)
I have a Delphi application that has a document browser as the main form.
In my application I have several activities, the main screen has 4 buttons that
I have an application that has 2 beans with the same name, but which
I have a Qt application that has two threads: the main thread that handles
I have a GUI C# application that has a single button Start/Stop. Originally this
I have a Windows program that has a GUI which also uses a command
I have an application that has a GUI and TCP server. The TCP server
I have an application that is using a modal view that has some buttons
I have a Qt application that has some embedded JPG files that I want

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.