2012-03-25 23 views
10

Me preguntaba si se puede probar para ver si se ha hecho clic en un JMenu (no JMenuItem). Traté de agregarle un ActionListener, pero parece que no lo reconoce. Solo necesito preformar una acción cuando se presiona el botón JMenu para poder cambiar los JMenuItems para ese menú antes de que se abra. ¡Todos los campos de trabajo para obtener este resultado son bienvenidos!JMenu ActionListener

Gracias

+0

¿Has probado ['addMenuListener'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenu.html#addMenuListener (javax.swing.event.MenuListener))? – assylias

+0

No, estoy usando addActionListener en este momento, pero para agregar que me encuentro con algunos problemas, ¿no debería funcionar ActionListener también? – clankfan1

+2

¿Por qué cambiar los elementos del menú en JMenu clic? ¿Por qué no cambiarlo antes del clic? ¿Cuál es su "caso de uso" aquí? –

Respuesta

11
  • JMenu para uso MenuListener

código

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class ActionExample { 

    public ActionExample() { 

     JMenu menu = new JMenu("Menu"); 
     menu.setMnemonic(KeyEvent.VK_M); 
     menu.addMenuListener(new SampleMenuListener()); 
     JMenu menu1 = new JMenu("Tool"); 
     menu1.setMnemonic(KeyEvent.VK_T); 
     menu1.addMenuListener(new SampleMenuListener()); 
     JFrame f = new JFrame("ActionExample"); 
     JMenuBar mb = new JMenuBar(); 
     mb.add(menu); 
     mb.add(menu1); 
     f.setJMenuBar(mb); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

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

      @Override 
      public void run() { 
       ActionExample actionExample = new ActionExample(); 
      } 
     }); 
    } 
} 

class SampleMenuListener implements MenuListener { 

    @Override 
    public void menuSelected(MenuEvent e) { 
     System.out.println("menuSelected"); 
    } 

    @Override 
    public void menuDeselected(MenuEvent e) { 
     System.out.println("menuDeselected"); 
    } 

    @Override 
    public void menuCanceled(MenuEvent e) { 
     System.out.println("menuCanceled"); 
    } 
} 
0

Con una instancia de JMenu no puede agregar un ActionListener, solo con JMenuItem puede hacerlo.

Cuestiones relacionadas