首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPopup菜单不显示

JPopup菜单不显示
EN

Stack Overflow用户
提问于 2012-12-19 07:41:47
回答 2查看 212关注 0票数 2

这样做的目的是创建一个JPopupMenu,当我在它上LEFT CLICK时,它就会出现在感叹号下面。

我没有使用isPopupTrigger()方法,因为我已经创建了一个单独的MouseInputHandler来实现我的特定条件。

然而,JPopupMenu没有出现。

以下是代码:

代码语言:javascript
复制
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的代码:

代码语言:javascript
复制
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();
    }  

上述代码中涉及的变量是:

代码语言:javascript
复制
/* 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");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-19 07:46:19

你能把popup的相关代码寄出去吗?

或者更好的SSCCE

我不能重现你的问题。

你应该用

代码语言:javascript
复制
saveLabel.equals(cause)

.的

代码语言:javascript
复制
cause == saveLabel
票数 3
EN

Stack Overflow用户

发布于 2012-12-19 16:35:51

这个例子对我有用。我看到你的问题有一段时间了--然后我意识到我从来没有调用过setupJPopup()方法--也许这也是你的问题?否则,您是否可以开始将代码中的内容添加到此示例中,直到重新创建问题为止?

代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PopupMenu extends Box{

    Dimension preferredSize = new Dimension(400,30);

    JPopupMenu popup = new JPopupMenu();

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

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

    public PopupMenu(){
        super(BoxLayout.Y_AXIS);

        // The part I was missing and was throwing me for a loop
        // Maybe you're not calling this method, and therefore not setting up the popup menu???
        setupJPopup();

        //Other normal stuff
        JLabel clickMe = new JLabel("ClickMe");
        clickMe.setAlignmentX(RIGHT_ALIGNMENT);
        clickMe.addMouseListener(new MouseAdapter(){

            @Override
            public void mouseClicked(MouseEvent e) {
                popup.show(e.getComponent(), e.getX(), e.getY());
            }});

        add(clickMe);       
    }

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


    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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13947644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档