我如何利用二级课程来处理我的事件?

Posted

技术标签:

【中文标题】我如何利用二级课程来处理我的事件?【英文标题】:How can I utilize a secondary class to handle my events? 【发布时间】:2017-03-24 13:24:15 【问题描述】:

在实例化菜单栏的同时,我创建了两个单独的类,以及处理事件的第二个类;因为我在菜单栏上有很多我想处理的选项。

我已经设置了菜单栏,它的结构已经全部设置好了,现在下一步是在用户单击菜单栏上的选项时处理事件。

这是我的主菜单栏类中两个项目的 sn-p:

    JMenuItem addOrangeItem = new JMenuItem("Orange");
    addOrangeItem.addActionListener(new MenuActionListener().orangeActionPerformed(e));

    JMenuItem addAppleItem = new JMenuItem("Apple");
    addAppleItem.addActionListener(new MenuActionListener().appleActionPerformed(e));

这是我的事件处理类:

public class MenuActionListener implements ActionListener 

    public void orangeActionPerformed(ActionEvent e) 
    
    @Override
    public void actionPerformed(ActionEvent e) 
        System.out.println("I have chosen an orange!");
    


    public void appleActionPerformed(ActionEvent e) 
    
    @Override
    public void actionPerformed(ActionEvent e) 
        System.out.println("I have chosen an apple!");
    

问题在于我的主菜单栏类中的这行代码:

addAppleItem.addActionListener(new MenuActionListener().appleActionPerformed(e)); 而我的 ActionEvent 的 e 下划线为红色,我不知道该怎么做才能让它工作。

我的代码的目标是选择 Apple/orange 项目,然后我的事件处理类将返回一些代码。

我的问题是如何编辑上面的代码行,以便我可以正确处理我的菜单栏项?

如果您需要更多信息,请告诉我,我会尽快处理。

非常感谢任何帮助,谢谢。

【问题讨论】:

该行应该是 addAppleItem.addActionListener(new MenuActionListener()); - 基本上,您将 MenuActionListener 的一个实例作为 ActionListener 添加到对象 addAppleItem - 在您执行一个函数并尝试将该函数的返回值添加为 ActionListener 之前 【参考方案1】:

这是一个无效的语法:addActionListener(new MenuActionListener().orangeActionPerformed(e))

addActionListener 想要一个ActionListener 对象,而不是void(这是new MenuActionListener().orangeActionPerformed(e) 的结果),而且e 在这里是一个未知变量。

这将起作用:addActionListener(new MenuActionListener()),但由于您需要根据按下的项目不同的操作,您可以使用操作命令系统:

在您的 JMenuItem 上设置一个操作命令(另请注意,ActionListener 的一个实例对于两个按钮都足够了):

ActionListener listener = new MenuActionListener();

JMenuItem addOrangeItem = new JMenuItem("Orange");
addOrangeItem.setActionCommand("orange");// set action command
addOrangeItem.addActionListener(listener);

JMenuItem addAppleItem = new JMenuItem("Apple");
addAppleItem.setActionCommand("apple");// set action command
addAppleItem.addActionListener(listener);

然后在监听器中检索动作命令(在actionPerformed),然后决定做什么:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

    public class MenuActionListener implements ActionListener 

        public void orangeActionPerformed() 
            System.out.println("I have chosen an orange!");
        

        public void appleActionPerformed() 

            System.out.println("I have chosen an apple!");

        

        @Override
        public void actionPerformed(final ActionEvent e) 

            String command = e.getActionCommand();

            switch (command) 

            case "orange":
                orangeActionPerformed();
                break;
            case "apple":
                appleActionPerformed();
                break;
            default:

            

        
    

注意setActionCommand 是来自AbstractButton 的方法,例如也适用于JButton

【讨论】:

以上是关于我如何利用二级课程来处理我的事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何改进我的课程以创建输出文件

关于如何在 C++ 中处理不同项目中的文件所需的课程

第十三周课程总结

Jquery:我的课程在第二次通话期间不起作用

第十三周课程总结

第十三周课程总结