的想法是創建一個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");
你可以發佈示例工作代碼與該問題來嘗試? –
我敢打賭,你忘了將'LabelHandler'添加爲'JLabel downLabel'的'MouseListener'。你是否在你的代碼中有這樣一行:'downLabel.addMouseListener(labelHandler);'?很難說沒有[SSCCE](http://sscce.org) –
@GuillaumePolet我需要嗎?我想這是沒有必要的,因爲如果有人點擊感嘆號LEFT CLICK,菜單必須顯示出來。其他任何地方,不一定不是右鍵單擊還是左鍵單擊。我會做的是我會鏈接你們在我的GDrive中完成源代碼,如果這很好 –