2013-02-07 47 views
3

我想在用户右键单击我的JTable时获得JPopUpMenu显示。在我的课堂延伸的JTable,我叫下面的代码:Java在Mac OS中弹出菜单

addMouseListener(new MouseAdapter() 
    { 
     @Override 
     public void mouseReleased(MouseEvent e) 
     { 
      rowClicked = rowAtPoint(e.getPoint()); 
      colClicked = columnAtPoint(e.getPoint()); 
      if (e.isPopupTrigger()) 
      { 
       popUpMenu.show(e.getComponent(), e.getX(), e.getY()); 
      } 
     } 

     @Override 
     public void mouseClicked(MouseEvent e) 
     { 
      rowClicked = rowAtPoint(e.getPoint()); 
      colClicked = columnAtPoint(e.getPoint()); 

      if(e.isPopupTrigger()) 
      { 
       popUpMenu.show(e.getComponent(), e.getX(), e.getY()); 
      } 
     } 
    }); 

每当我右键点击触控板,用鼠标,或使用CTRL +右键,if(e.isPopupTrigger())从不计算真实,菜单是永远所示。我在那里有断点来验证。

我在网上做了一些研究,看来这个解决方案应该可以工作。由于右键单击是依赖于平台的,因此使用isPopupTrigger()应该是要走的路。

因为我在Mac上,有什么特别的吗?

回答

4

这个简单的例子适用于我,也许它会帮助你找到你的问题。我在Mac上使用Java 7中

enter image description here

public static void main(String[] args) 
{ 
    JFrame frame = new JFrame(); 
    JPanel panel = new JPanel(); 

    String columnNames[] = { "Column 1", "Column 2", "Column 3" }; 

    String dataValues[][] = { { "12", "234", "67" }, { "-123", "43", "853" }, { "93", "89.2", "109" }, { "279", "9033", "3092" } }; 
    JTable table = new JTable(dataValues, columnNames); 

    panel.add(table); 

    final JPopupMenu menu = new JPopupMenu(); 
    JMenuItem item = new JMenuItem("item"); 
    menu.add(item); 
    table.setComponentPopupMenu(menu); 

    table.addMouseListener(new MouseAdapter() 
    { 
     @Override 
     public void mouseReleased(MouseEvent e) 
     { 
      if (e.isPopupTrigger()) 
      { 
       menu.show(e.getComponent(), e.getX(), e.getY()); 
      } 
     } 

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

    frame.setContentPane(panel); 
    frame.pack(); 
    frame.setVisible(true); 
} 
+0

真棒,谢谢你,让我试试这个 – user489041

+1

+1'setComponentPopupMenu()',也看到了[这里](HTTP: //stackoverflow.com/a/5129757/230513)。 – trashgod

+0

通过添加解决我的问题的'setComponentPopupMenu'。感谢这个例子 – user489041