2012-03-25 33 views
10

Tôi đã tự hỏi nếu bạn có thể kiểm tra để xem một JMenu (không JMenuItem) đã được nhấp. Tôi đã thử thêm một ActionListener cho nó nhưng nó dường như không nhận ra nó. Tôi chỉ cần nó để tạo thành một hành động khi nút JMenu được nhấn để tôi có thể thay đổi JMenuItems cho menu đó trước khi nó mở ra. Tất cả các arrounds công việc để có được kết quả này được chào đón quá!JMenu ActionListener

Cảm ơn

+0

Bạn đã thử ['addMenuListener'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenu.html#addMenuListener (javax.swing.event.MenuListener)) chưa? – assylias

+0

Không, tôi đang sử dụng addActionListener ngay bây giờ nhưng để thêm rằng tôi chạy vào một số vấn đề, không nên actionListener làm việc tốt? – clankfan1

+2

Tại sao thay đổi các mục menu trên JMenu? Tại sao không thay đổi nó trước khi bấm? "Trường hợp sử dụng" của bạn ở đây là gì? –

Trả lời

11
  • cho JMenu sử dụng MenuListener

đang

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

Với một thể hiện của JMenu bạn không thể thêm một ActionListener, chỉ với JMenuItem bạn có thể làm điều đó.

Các vấn đề liên quan