Question

In the last question I was asking the community why my JPopupMenu did not appear on the screen.
I was unable to come up with a simple , runnable, compilable example.
So, here is what I did for you guys:
enter image description here

  • Is the area too small to draw a popup?

  • I want my popup to be like this:
    pop The code of what I did is visible in the first photo.

    Code:

    /* The old code entered here has been removed */
    

    Complete code can be found here

    edit 2

    I copied the various JRadioButtonMenuItem and the setupJPopup() into a new file and ran. It works. Why doesn't it work in ScreenRecorder class? Code package demo;

    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    import javax.swing.ButtonGroup;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuItem;
    import javax.swing.JPopupMenu;
    import javax.swing.JRadioButtonMenuItem;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    
    public class PopupTrial {
    
    
        public PopupTrial(){
            setupJPopup();
            JFrame frame = new JFrame();
            try{
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            }catch(Exception e){
    
            }
            frame.getContentPane().add(label);
            label.addMouseListener(new MouseAdapter(){
                @Override
                public void mouseClicked(MouseEvent e){
                    popup.show(e.getComponent(), e.getX(), e.getY());
                }
            });
            frame.setVisible(true);
            frame.setSize(300, 300);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                @Override
                public void run(){
                    new PopupTrial();
                }
            });
        }
        public void setupJPopup(){
            encodingGroup.add(avi);
            encodingGroup.add(quicktime);
    
            popup.add(avi);
            popup.add(quicktime);
            popup.addSeparator();
    
            recordingAreaGroup.add(entireScreen);
            recordingAreaGroup.add(custom);
    
            popup.add(entireScreen);
            popup.add(custom);
            popup.addSeparator();
    
            cursorGroup.add(selectBlackCursor);
            cursorGroup.add(selectWhiteCursor);
            cursorGroup.add(selectNoCursor);
    
            selectCursor.add(selectBlackCursor);
            selectCursor.add(selectWhiteCursor);
            selectCursor.add(selectNoCursor);
    
            popup.add(selectCursor);
            popup.pack();
        }
        JLabel label = new JLabel("Click Me");
        ButtonGroup recordingAreaGroup = new ButtonGroup();
        ButtonGroup cursorGroup = new ButtonGroup();
        ButtonGroup encodingGroup = new ButtonGroup();
        JPopupMenu popup = new JPopupMenu();
        JRadioButtonMenuItem avi = new JRadioButtonMenuItem("AVI",true);
        JRadioButtonMenuItem quicktime = new JRadioButtonMenuItem("QuickTime",false);
        JRadioButtonMenuItem entireScreen = new JRadioButtonMenuItem("Entire Screen",true);
        JRadioButtonMenuItem custom = new JRadioButtonMenuItem("Custom...",false);
        JMenuItem selectCursor = new JMenu("Select a cursor");
        JRadioButtonMenuItem selectWhiteCursor = new JRadioButtonMenuItem("White Cursor",true);
        JRadioButtonMenuItem selectBlackCursor = new JRadioButtonMenuItem("Black Cursor",false);
        JRadioButtonMenuItem selectNoCursor = new JRadioButtonMenuItem("No Cursor",false);
    }
    

    enter image description here

    Was it helpful?

    Solution

    No, the size of the JFrame isn't related to why the PopupMenu isn't showing. Here's an example showing something similar to what you want (and using similar methods) working:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class PopupMenu extends Box{
    
        Dimension preferredSize = new Dimension(400,30);
    
        public PopupMenu(){
            super(BoxLayout.Y_AXIS);
    
            final JPopupMenu menu = new JPopupMenu("Options");
            for(int i = 1; i < 20; i++)
                menu.add(new JMenuItem("Option" + i));
    
            JLabel clickMe = new JLabel("ClickMe");
        clickMe.setAlignmentX(RIGHT_ALIGNMENT);
            clickMe.addMouseListener(new MouseAdapter(){
    
                @Override
                public void mouseClicked(MouseEvent e) {
                    menu.show(e.getComponent(), e.getX(), e.getY());
                }});
    
            add(clickMe);       
        }
    
        public Dimension getPreferredSize(){
            return preferredSize;
        }
    
        public static void main(String[] args) {
    
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setContentPane(new PopupMenu());
            frame.validate();
            frame.pack();
            frame.setVisible(true);
        }
    }
    
    Licensed under: CC-BY-SA with attribution
    Not affiliated with StackOverflow
    scroll top