如何利用辅助课程来处理我的活动?

时间:2017-03-24 13:24:15

标签: java class menu actionlistener menubar

我创建了两个单独的类,而我已经实例化了我的菜单栏,还有第二个类来处理事件;因为我在菜单栏上有很多选项,我想处理。

我有菜单栏并且它的结构都已设置完毕,现在下一步是在用户单击菜单栏上的选项时处理事件。

以下是我的主菜单栏类中的两个项目片段:

    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项目,然后我的事件处理类将返回一些代码。

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

如果您需要更多信息,请告诉我,我会正确的。

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

1 个答案:

答案 0 :(得分:1)

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

addActionListener需要一个ActionListener对象,而不是void(这是new MenuActionListener().orangeActionPerformed(e)的结果),此处e也是一个未知变量。< / p>

这将起作用: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