0

在最后一个问题中,我问社区为什么我JPopupMenu没有出现在屏幕上。
我无法想出一个简单、可运行、可编译的示例。
所以,这是我为你们所做的:
在此处输入图像描述

  • 该区域是否太小而无法绘制弹出窗口?

  • 我希望我的弹出窗口是这样的:
    流行音乐 我所做的代码在第一张照片中可见。

    代码:

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

    完整的代码可以在这里找到

    编辑 2

    JRadioButtonMenuItem我将各种和复制setupJPopup()到一个新文件中并运行。有用。为什么它在 ScreenRecorder 类中不起作用? 代码 包演示;

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

    在此处输入图像描述

    4

    1 回答 1

    2

    不, 的大小与不显示JFrame的原因PopupMenu无关。这是一个示例,显示了与您想要的(并使用类似的方法)工作类似的东西:

    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);
        }
    }
    
    于 2012-12-19T15:13:28.793 回答