
这样做的目的是创建一个JPopupMenu,当我在它上LEFT CLICK时,它就会出现在感叹号下面。
我没有使用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");发布于 2012-12-19 07:46:19
你能把popup的相关代码寄出去吗?
或者更好的SSCCE。
我不能重现你的问题。
你应该用
saveLabel.equals(cause).的
cause == saveLabel发布于 2012-12-19 16:35:51
这个例子对我有用。我看到你的问题有一段时间了--然后我意识到我从来没有调用过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);
}
}https://stackoverflow.com/questions/13947644
复制相似问题