java - 弹出菜单不显示

标签 java swing user-interface popup

enter image description here

这个想法是创建一个 JPopupMenu,当我左键单击时,它会显示在感叹号的正下方。
我没有使用 isPopupTrigger() 方法,因为我创建了一个单独的 MouseInputHandler 来实现我的特定条件。
但是 JPopupMenu 没有显示。
这是代码:

protected class LabelHandler extends MouseInputAdapter{


    @Override
    public void mouseClicked(MouseEvent e){
        JLabel cause = (JLabel) e.getSource();
        if(cause == saveLabel){
            try{
                desktop.open(f);
            }catch(IOException ex){
                ex.printStackTrace();
            }
        }else if(cause == downLabel){

            popup.show(ScreenRecorder.this, e.getX(),e.getY());
        }
    }

    @Override
    public void mouseEntered(MouseEvent e){
        JLabel cause = (JLabel) e.getSource();
        if(cause == saveLabel){
            saveLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
        }else if(cause == downLabel){
            downLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
        }
    }

    @Override
    public void mouseExited(MouseEvent e){
        JLabel cause = (JLabel) e.getSource();
        if(cause == saveLabel || cause == saveLabel){
            saveLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        }else if(cause == downLabel){
            downLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        }
    }
}

标签被命名为downLabel,因为它应该是一个向下的箭头,但无论如何,我在那里放了一个感叹号。请告诉我为什么 JPopupMenu 不显示。是的,我用另一种方法设置了菜单。

编辑:

创建 JPopup 的代码:

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

上述代码涉及的变量有:

/* Creating the JPopupMenu containing the various menu items */
    JPopupMenu popup = new JPopupMenu();

    ButtonGroup encodingGroup = new ButtonGroup();
    ButtonGroup recordingAreaGroup = new ButtonGroup();
    ButtonGroup cursorGroup = new ButtonGroup();

    /* Handler for labels*/
    LabelHandler labelHandler = new LabelHandler();

    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);
    JMenu 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);
/* Icons for the cursors */
    Icon blackCursor = (Icon) new ImageIcon("src/images/blackCursor.png");
    Icon whiteCursor = (Icon) new ImageIcon("src/images/whiteCursor.png");

最佳答案

您可以发布弹出窗口的相关代码吗?

或者更好的是 SSCCE .

我无法重现您的问题。


你应该使用

saveLabel.equals(cause)

已读

cause == saveLabel

关于java - 弹出菜单不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947644/

相关文章:

python - PySimpleGui 输出标题栏名称问题

java - 如何在多个 jpanel 中使用一个变量?

java - JPanel图像从屏幕飞走

java - 如何将 2 个 JList 添加到一个 JScrollPane 中?

java - 如何在textView中有很多文本但只显示其中的一部分

Java Applet 布局未按预期显示 o_O

java - Android POST 请求未收到响应

java - EclipseLink Moxy unmarshall 具有不同元素名称的集合

java - 不可能的 NPE 被抛出(java)

java - 在 Eclipse 中导入现有的 Java 项目,但 JFrame 的设计 View 不存在?