如何从另一个类java添加Action Listener?

时间:2018-01-16 05:28:44

标签: java swing actionlistener

我想开发一个非常基本的应用程序,这里是代码,我有4个类,一个是主类,第二个是JMenuBar,第三个是Panel,第四个一个是Action Listener。目前我的问题是在这里如何为JMenuBar类添加Action Listener的实例,直到我可以做一些动作。

public class My_Action implements ActionListener {


    public My_Action() {

    }

    @Override
    public void actionPerformed(ActionEvent actionEvent) {

    }

}
public class My_Menu extends JMenuBar {


    private My_Action my_action = new My_Action();
    JMenu file;
    JMenu Edit;
    JMenu help;

    public My_Menu() {
        file = new JMenu("File");
        Edit = new JMenu("Edit");
        help = new JMenu("help");


        JMenuItem item1 = new JMenuItem("file");
        JMenuItem item2 = new JMenuItem("New");
        JMenuItem item3 = new JMenuItem("Setting");
        JMenuItem item4 = new JMenuItem("Color");
        JMenuItem item5 = new JMenuItem("Print");
        JMenuItem item6 = new JMenuItem("Exit");

        file.add(item1);
        file.add(item2);
        file.add(item3);
        file.add(item4);
        file.add(item5);
        file.add(item6);

        file.addSeparator();
        this.add(file);
        this.add(Edit);
        this.add(help);
        item1.addActionListener(my_action);


    }
    public void actionPerformed(ActionEvent actionEvent){
          System.exit(0);
    }
}

2 个答案:

答案 0 :(得分:0)

这是我的测试程序。

执行菜单程序时检查控制台输出。

package just.test;

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

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class My_Menu extends JMenuBar implements ActionListener {

    private static final long serialVersionUID = 1L;
    private My_Action my_action = new My_Action();

    JMenu file;
    JMenu Edit;
    JMenu help;

    public My_Menu() {
        file = new JMenu("File");
        Edit = new JMenu("Edit");
        help = new JMenu("help");

        this.add(file);
        this.add(Edit);
        this.add(help);

        JMenuItem item1 = new JMenuItem("file");
        item1.setActionCommand("file");
        JMenuItem item2 = new JMenuItem("New");
        item2.setActionCommand("New");
        JMenuItem item3 = new JMenuItem("Setting");
        item3.setActionCommand("Setting");
        JMenuItem item4 = new JMenuItem("Color");
        item4.setActionCommand("Color");
        JMenuItem item5 = new JMenuItem("Print");
        item5.setActionCommand("Print");
        JMenuItem item6 = new JMenuItem("Exit");
        item6.setActionCommand("Exit");

        JMenuItem item7 = new JMenuItem("edit1");
        item7.setActionCommand("edit1");
        JMenuItem item8 = new JMenuItem("edit2");
        item8.setActionCommand("edit2");
        JMenuItem item9 = new JMenuItem("about..");
        item9.setActionCommand("about");


        file.add(item1);
        file.add(item2);
        file.addSeparator();
        file.add(item3);
        file.add(item4);
        file.add(item5);
        file.add(item6);


        Edit.add(item7);
        Edit.add(item8);


        help.add(item9);

        item1.addActionListener(my_action);
        item2.addActionListener(my_action);
        item3.addActionListener(my_action);
        item4.addActionListener(my_action);
        item5.addActionListener(my_action);

        item7.addActionListener(this);
        item8.addActionListener(this);
        item9.addActionListener(this);

        file.addActionListener(this);
        Edit.addActionListener(this);
        help.addActionListener(my_action);

    }


    @Override
    public void actionPerformed(ActionEvent actionEvent) {  
        String command = actionEvent.getActionCommand();
        System.out.println("----1----\n" + command);

        //System.exit(0);
    }

    class My_Action implements ActionListener {

        public My_Action() {

        }

        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            String command = actionEvent.getActionCommand();
            System.out.println("----2----\n" + command);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();

                JPanel jp = new JPanel();
                jp.setLayout(new BorderLayout());
                f.add(new My_Menu(), BorderLayout.NORTH);
                f.add(jp, BorderLayout.CENTER);
                jp.setSize(500,400);
                f.setSize(800, 600);
                f.setVisible(true);

                //f.pack();
            }
        });
    }


}

您只需将addActionListener添加到必须发送消息的组件中。

item1.addActionListener(my_action);

item7.addActionListener(this);

不要忘记在My_Menu类上实现ActionListener。

答案 1 :(得分:-1)

你拥有的是对的。 它应该调用单击文件菜单项时执行的操作。只需在该方法中放置一个打印ln就可以看到它被调用。

相关问题