Flex MenuBar 顶级菜单监听

itemClick是监控不到menubar的顶级菜单的,itemClick只是和Menu这个类有关,而menubar只是能"CALL"出Menu的
MenuBarItem的集合.但用menubar的change侦听器能监控到点击顶级按钮的事件,不过我在FLEX3正式版测试发现点击一次menubar的顶级按钮会出发两次change事件,如果用change事件来处理某些问题是很麻烦.

  我解决该类问题的方法如下:
  比如有个id为TopMenu的menubar
  
  我用两个侦听器来监测menubar的点击时间,一个是Menu的itemClick事件还有一个是click事件.

  就是说用Menu的itemClick的事件还监测子Menu的点击事件,再用click事件检测menubar的顶级菜单的点击事件.
  
  具体:
  //itemClick事件
  private function itemClick(e:MenuEvent):void
  {
trace(e.label)
  }
//MouseEvent
  private function doClick():void
  {
  //用MenuBarItem.data是否为空来判断该MenuBarItem是否有子Menu,如果有
  就不触发事件,这个可以根据自己的需要来设置 
  if(TopMenu.selectedIndex!=-1&&MenuBarItem(TopMenu.getChildAt(TopMenu.selectedIndex+1)).data=="")
{
trace(MenuBarItem(TopMenu.getChildAt(TopMenu.selectedIndex+1)).data.@name);
//激活所有MenuBar的顶级MenuBarItem
  activeMenu();
  //使点过的按钮不能再点
MenuBarItem(TopMenu.getChildAt(TopMenu.selectedIndex+1)).enabled=false;
}
  }
//激活所有MenuBar的顶级MenuBarItem
private function activeMenu():void
{
for each(var item:MenuBarItem in TopMenu.menuBarItems)
{
item.enabled=true;
}
}

Java 实现菜单监听事件(MenuListener)可以通过实现多个 ActionEvent 来实现多个事件的处理。每个 ActionEvent 将被分配一个唯一的标识符,以便您可以确定哪个事件已被触发。 下面是一个简单的示例代码,演示如何使用 MenuListener 监听菜单事件并实现多个 ActionEvent: ```java import javax.swing.*; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; public class MenuListenerExample extends JFrame implements MenuListener { private final int NEW_FILE = 1; private final int OPEN_FILE = 2; private final int SAVE_FILE = 3; public MenuListenerExample() { JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); fileMenu.addMenuListener(this); menuBar.add(fileMenu); setJMenuBar(menuBar); setSize(300, 200); setVisible(true); } public static void main(String[] args) { new MenuListenerExample(); } @Override public void menuSelected(MenuEvent e) { JMenu menu = (JMenu) e.getSource(); if (menu.getText().equals("File")) { JMenuItem newFile = new JMenuItem("New File"); newFile.setActionCommand(String.valueOf(NEW_FILE)); newFile.addActionListener(this::actionPerformed); menu.add(newFile); JMenuItem openFile = new JMenuItem("Open File"); openFile.setActionCommand(String.valueOf(OPEN_FILE)); openFile.addActionListener(this::actionPerformed); menu.add(openFile); JMenuItem saveFile = new JMenuItem("Save File"); saveFile.setActionCommand(String.valueOf(SAVE_FILE)); saveFile.addActionListener(this::actionPerformed); menu.add(saveFile); } } @Override public void menuDeselected(MenuEvent e) {} @Override public void menuCanceled(MenuEvent e) {} public void actionPerformed(ActionEvent e) { switch (Integer.parseInt(e.getActionCommand())) { case NEW_FILE: System.out.println("New File"); break; case OPEN_FILE: System.out.println("Open File"); break; case SAVE_FILE: System.out.println("Save File"); break; default: System.out.println("Unknown Event"); break; } } } ``` 在这个例子中,我们创建了一个 JMenu 对象,并在菜单被选中时,创建了三个 JMenuItem 对象,并将它们添加到了菜单中。每个 JMenuItem 对象都分配了一个唯一的标识符,并使用 setActionCommand 方法将其设置为相应的事件类型。每个 JMenuItem 对象还使用 addActionListener 方法将监听器与相应的事件处理方法关联起来。 在 actionPerformed 方法中,我们使用 switch 语句根据事件类型执行相应的操作。在本例中,我们输出了相应的消息,但您可以根据需要执行任何操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值