2012-12-19 16 views
2

enter image description hereJPopup菜單顯示不出來

的想法是創建一個JPopupMenu將出現正下方感嘆號時,我LEFT CLICK就可以了。
我沒有使用isPopupTrigger()方法,因爲我創建了一個單獨的MouseInputHandler來實現我的特定條件。
但是JPopupMenu不顯示。
下面是代碼:
保護類LabelHandler擴展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"); 
+0

你可以發佈示例工作代碼與該問題來嘗試? –

+0

我敢打賭,你忘了將'LabelHandler'添加爲'JLabel downLabel'的'MouseListener'。你是否在你的代碼中有這樣一行:'downLabel.addMouseListener(labelHandler);'?很難說沒有[SSCCE](http://sscce.org) –

+0

@GuillaumePolet我需要嗎?我想這是沒有必要的,因爲如果有人點擊感嘆號LEFT CLICK,菜單必須顯示出來。其他任何地方,不一定不是右鍵單擊還是左鍵單擊。我會做的是我會鏈接你們在我的GDrive中完成源代碼,如果這很好 –

回答

3

您可以發佈相關的代碼popup

或更好的SSCCE

我重現你的問題。


,您應該使用的

cause == saveLabel 
+0

''JLabel'是否覆蓋'equals()'方法? –

+0

不需要,因爲'=='會比較地址,'saveLabel'已經實例化,所以它的地址不會改變。當把遊標從'DEFAULT_CURSOR'改爲'HAND_CURSOR'時,'=='運行良好,我不知道'JPopupMenu'有什麼問題:-) –

+0

@vishal_aim不,它不。 –

0

這個例子的工作

saveLabel.equals(cause) 

insread我。我看到你的問題一段時間 - 然後我意識到我從來沒有打電話給setupJPopup()方法 - 也許這也是你的問題?否則,您是否可以開始將代碼中的內容添加到此示例中,直到重新創建問題?

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