java对菜单项的监听_java – JFrame Action侦听所有菜单项的侦听器...

本文介绍了如何在Java中为JFrame的菜单项添加ActionListener,通过将菜单项存储为字段,并为它们分配同一个监听器,然后在监听器内部根据事件源判断点击的是哪个菜单项。示例代码展示了如何直接在JFrame类中实现监听器,或者使用单独的类或匿名类。此外,还提出了扩展JMenu类以简化添加新菜单项时的监听器配置。
摘要由CSDN通过智能技术生成

对的,这是可能的:

>将菜单项存储为字段

>将相同的ActionListener添加到每个菜单项.

>在侦听器中检查源以了解单击了哪个项目.

应该是这样的:

public class YourFrame extends JFrame implements ActionListener {

private final JMenuItem menuA, menuB;

public YourFrame(){

super("Your app");

JMenuBar menuBar = new JMenuBar();

JMenu menuReviews = new JMenu("Reviews");

menuA = new JMenuItem("A");

menuB = new JMenuItem("B");

...

menuReviews.add(menuA);

menuReviews.add(menuB);

menuBar.add(menuReviews);

setJMenuBar(menuBar);

...

menuA.addActionListener(this);

menuB.addActionListener(this);

...

}

public void actionPerformed(ActionEvent event){

if(event.getSource()==menuA){

System.out.println("Menu A clicked");

...

}else if(event.getSource()==menuB){

System.out.println("Menu B clicked");

...

}

}

}

请注意,我在这里让JFrame实现ActionListener,但这只是为了方便起见.您可以使用专用类或在构造函数中创建的匿名类:

ActionListener reviewsListener = new ActionListener(){

public void actionPerformed(ActionEvent event){

if(event.getSource()==menuA){

System.out.println("Menu A clicked");

...

}else if(event.getSource()==menuB){

System.out.println("Menu B clicked");

...

}

}

};

menuA.addActionListener(reviewsListener);

menuB.addActionListener(reviewsListener);

如果你想要更多地集成这个过程,我还可以建议扩展JMenu,这样你就可以将它传递给你的动作监听器并系统地添加到新的菜单项中.

public class YourJMenu extends JMenu {

private ActionListener listener;

public YourJMenu(String name, ActionListener listener){

super(name);

this.listener = listener;

}

@Override

public JMenuItem add(JMenuItem item){

item.addActionListener(listener);

return super.add(item);

}

}

有了这个,你只需要写:

JMenu menuReviews = new YourJMenu("Reviews", this);

并放弃:

menuA.addActionListener(this);

menuB.addActionListener(this);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值