我写了一段:
class myMouseListener extends MouseAdapter{
    public void mouseClicked(MouseEvent e){      if(e.isPopupTrigger()){
        System.out.print("dddddddddd");      }
    }
  }
有本书上介绍isPopupTrigger()返回true则是鼠标右键。可为什么捕捉不到呢?

解决方案 »

  1.   

    送一段代码给你去研究:
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Event;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.MenuBar;
    import java.awt.MenuItem;
    import java.awt.MenuShortcut;
    import java.awt.Point;
    import java.awt.PopupMenu;
    import java.awt.event.ActionEvent;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JPanel;
    import javax.swing.event.MouseInputListener;public class TestMouse extends JFrame implements MouseInputListener {
    static JFrame frame;
    JLabel lbText;
    JPanel jpanel;
    JPanel jContentPane;
    int x1 = 0, y1 = 0;
    int startX, startY, endX, endY;
    int flag = 0;
    boolean shiftPress = false; // shift键是否按下
    KeyEventTest keyListener;
    /**
     * 默认的构造函数
     */
    public TestMouse() {
    super("模式对话框");
    setContentPane(getContentpane()); // 添加包容器
    setJMenuBar(createMenuBar()); // 添加菜单工具栏
    setSize(500, 400); // size
    setLocation(100, 100); // start location
    jContentPane.addKeyListener(keyListener);
    }
    /**
     * 带一个参数的构造函数
     */
    public TestMouse(String frameName) {
    setTitle(frameName);
    setContentPane(getContentpane()); // 添加包容器
    setJMenuBar(createMenuBar()); // 添加菜单工具栏
    setSize(500, 400); // size
    setLocation(100, 100); // start location
    jContentPane.addKeyListener(keyListener);
    } /**
     * @return contentPane_根容器
     */
    private JPanel getContentpane() {
    if (jContentPane == null) {
    jContentPane = new javax.swing.JPanel();
    jContentPane.setLayout(new java.awt.BorderLayout());
    jContentPane.addMouseListener(this);
    jContentPane.addMouseMotionListener(this);
    jContentPane.add(getpanel(), java.awt.BorderLayout.CENTER);
    }
    return jContentPane; } private JPanel getpanel() {
    if (jpanel == null) {
    jpanel = new JPanel();
    jpanel.setLayout(null);
    jpanel.add(getLable());
    }
    return jpanel;
    }
    private Component getLable() {
    lbText = new JLabel();
    lbText.setBounds(10, 10, 150, 30);
    return lbText;
    } /**
     * @return bar_菜单工具栏
     */
    private JMenuBar createMenuBar() {
    JMenuBar bar = new JMenuBar();
    JMenu fileMenu = new JMenu("文件");
    bar.add(fileMenu);
    return bar;
    }
    public static void main(String[] args) {
    frame = new TestMouse();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    }
    public void mouseClicked(MouseEvent e) {
    if (e.getModifiers() == Event.META_MASK) {
    PopupMenu popupMenu = new PopupMenu(); // 弹出式主菜单
    MenuItem rightItem = new MenuItem();
    rightItem.setLabel("显示右键");
    rightItem.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(ActionEvent e) {
    lbText.setText("显示右键");
    }
    }); frame.add(popupMenu);
    popupMenu.add(rightItem);
    popupMenu.show(frame.getContentPane(), e.getX(), e.getY());
    }
    }
    public void mousePressed(MouseEvent arg0) {
    startX = arg0.getX();
    startY = arg0.getY(); }
    public void mouseReleased(MouseEvent arg0) {
    this.lbText.setText("");
    }
    public void mouseEntered(MouseEvent arg0) {}
    public void mouseExited(MouseEvent arg0) {}
    public void mouseDragged(MouseEvent e) {
    flag = 2;
    endX = e.getX();
    endY = e.getY();
    repaint();
    }
    public void update(Graphics g) {
    g.setColor(this.getBackground());
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    paint(g);
    }
    public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.BLUE);
    if (flag == 1) {
    } else if (flag == 2) {
    g2.drawString("鼠标坐标:(" + x1 + "," + y1 + ")", 10, 50);
    if (this.shiftPress == true) {
    g2.drawLine(startX, startY, endX, startY);
    } else {
    g2.drawLine(startX, startY, endX, endY);
    }
    }
    }
    public void mouseMoved(MouseEvent arg0) {}
    public void keyTyped(KeyEvent arg0) {}}
      

  2.   

    public boolean isPopupTrigger()
    Returns whether or not this mouse event is the popup menu trigger event for the platform. 
    Note: Popup menus are triggered differently on different systems. Therefore, isPopupTrigger should be checked in both mousePressed and mouseReleased for proper cross-platform functionality. 
      

  3.   

    把mouseClicked(MouseEvent e)改成mouseReleased(MouseEvent e)试试
      

  4.   

    这是我在一个JTable中单击又键弹出的popmenu的部分代码;
    programTable.addMouseListener(new MouseAdapter() {
          public void mousePressed(MouseEvent e) {
            showPopup(e);
          }      public void mouseReleased(MouseEvent e) {
            showPopup(e);
          }      private void showPopup(MouseEvent e) {
            if (e.isPopupTrigger()) {
              popup.show(e.getComponent(), e.getX(), e.getY());
              int selRow = programTable.rowAtPoint(e.getPoint());
              programTable.setRowSelectionInterval(selRow, selRow);
            }
          }
        });
      

  5.   

    多键mouse了这段代码不适合了!