2016-12-08 2 views
0

Я хочу открыть меню на столе с помощью щелчков правой кнопкой мыши (он работает в примере), но я хочу, чтобы менинты работали только с помощью щелчков левой кнопкой мыши (и отменяют меню с помощью щелчков правой кнопкой мыши, но теперь слева и щелкните правой кнопкой мыши и вызовите действие).Как выбрать JMenuItem только левой кнопкой мыши внутри JPopupMenu?

Как это сделать? Я попробовал MouseListeners, но я не мог заставить его работать.

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Arrays; 
import java.util.Vector; 

import javax.swing.JFrame; 
import javax.swing.JMenuItem; 
import javax.swing.JOptionPane; 
import javax.swing.JPopupMenu; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 

public class PopupDemo { 

    protected void initUI() { 
     final JFrame frame = new JFrame(PopupDemo.class.getSimpleName()); 
     Vector<String> columns = new Vector<String>(Arrays.asList("Coumn 1", "Column 2")); 
     Vector<Vector<String>> data = new Vector<Vector<String>>(); 
     for (int i = 0; i < 5; i++) { 
      Vector<String> row = new Vector<String>(); 
      for (int j = 0; j < columns.size(); j++) { 
       row.add("Cell " + (i + 1) + "," + (j + 1)); 
      } 
      data.add(row); 
     } 
     final JTable table = new JTable(data, columns); 
     final JPopupMenu popupMenu = new JPopupMenu(); 
     JMenuItem deleteItem = new JMenuItem("Delete"); 
     deleteItem.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane.showMessageDialog(frame, "DELETE OPTION CHOOSED"); 
      } 
     }); 
     popupMenu.add(deleteItem); 
     table.setComponentPopupMenu(popupMenu); 
     frame.add(new JScrollPane(table), BorderLayout.CENTER); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new PopupDemo().initUI(); 
      } 
     }); 
    } 
} 
+0

Если это новый код, вы, вероятно, следует держаться подальше от Vector; вместо этого используйте ArrayList. См. Http://stackoverflow.com/questions/1386275/why-is-java-vector-class-considered-obsolete-or-deprecated –

ответ

1

На DeleteItem то, что вы хотите сделать, это проверить внутри MouseListener, какая кнопка мыши была нажата

deleteItem.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mousePressed(MouseEvent e) { 
       if (e.getButton() == MouseEvent.BUTTON3) { 
       // do whatever it is when the right button is pressed 
       } else { 
       // do whatever it is when the left button is pressed 
       } 
      } 
     }); 
Смежные вопросы