2012-03-25 66 views
10

我想知道您是否可以測試以查看JMenu(不是JMenuItem)是否已被點擊。我試圖給它添加一個ActionListener,但它似乎沒有認出它。我只需要它在JMenu按鈕被按下時執行一個動作,以便我可以改變它打開的菜單的JMenuItems。爲了得到這個結果,所有的工作都很受歡迎!JMenu ActionListener

感謝

+0

你試過['addMenuListener'](http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenu.html#addMenuListener(javax.swing.event.MenuListener))嗎? – assylias 2012-03-25 17:13:32

+0

不,我現在正在使用addActionListener,但爲了補充說我遇到了一些問題,不應該actionListener工作? – clankfan1 2012-03-25 17:20:10

+2

爲什麼要改變JMenu點擊的菜單項?爲什麼不在點擊之前改變它?你在這裏的「用例」是什麼? – 2012-03-25 17:28:04

回答

11
  • JMenu使用MenuListener

代碼

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

對於JMenu的實例,您不能添加ActionListener,只能使用JMenuItem來完成。