有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing如何从另一个java类添加操作侦听器?

我想开发一个非常基本的应用程序,这是代码,我有4个类,一个是主类,第二个是JMenuBar,第三个是Panel,第四个是动作监听器。目前我的问题是如何为JMenuBar类添加操作侦听器实例,直到我可以执行一些操作为止


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) 个答案

  1. # 1 楼答案

    你所拥有的是正确的。 当你们点击“文件”菜单项时,它应该调用执行的操作。只需在该方法中添加一个print ln,就可以看到它被调用

  2. # 2 楼答案

    这是我给你的测试程序

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

    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_菜单类上实现ActionListener