简体   繁体   English

Java NetBeans用另一个调用ActionListener

[英]Java NetBeans call ActionListener with another

I am learning Java with GUI using JFrame, I would like to seek help regarding on how to call an ActionListener using an ActionListener. 我正在使用JFrame通过GUI学习Java,我想寻求有关如何使用ActionListener调用ActionListener的帮助。 Here is some of my codes. 这是我的一些代码。 The bottom part has the two action listeners and I added a simple comment for easy understanding. 底部有两个动作侦听器,为方便理解,我添加了一个简单的注释。

package onlinedelivery;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MainMenu extends JFrame {
    public JButton mainMenuButton;
    public JButton exitButton;
    public MainMenuButtonHandler mmHandler;
    public ExitButtonHandler exHandler;
    public static final int width = 400;
    public static final int heigth = 300;

public MainMenu() {
    Font bigFont = new Font("Arial",Font.BOLD,12);

    mainMenuButton = new JButton("Main Menu");
    mmHandler = new MainMenuButtonHandler();
    mainMenuButton.addActionListener(mmHandler);

    exitButton = new JButton("Exit");
    exHandler = new ExitButtonHandler();
    exitButton.addActionListener(exHandler);

    setTitle("Main Menu");

    Container pane = getContentPane();

    pane.setLayout(new GridLayout(5,2));

    pane.add(mainMenuButton);

    setSize(WIDTH,HEIGHT);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public class MainMenuButtonHandler implements ActionListener {
    @Override public void actionPerformed(ActionEvent e) {
        // ExitButtonHandler should be called here
        // When I click Main Menu Button Handler, ExitButtonHandler shall perform
    }
}

public class ExitButtonHandler implements ActionListener {      
    @Override public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    }
}

If both Actions logic is the same you can define just one and use it for both menu and button. 如果两个Actions逻辑相同,则只能定义一个,并将其用于菜单和按钮。

If not you can extend one action from another 如果不是这样,您可以将一项操作扩展到另一项操作

public class MainMenuButtonHandler extends ExitButtonHandler  {
    @Override public void actionPerformed(ActionEvent e) {
        // An additional logic here
        super.actionPerformed(e);
    }
}

You can use the doClick() method in JButton (inherited from AbstractButton) 您可以在JButton中使用doClick()方法(从AbstractButton继承)

With that alter the Handler Class of MainMenuButton like this: 改变了MainMenuButton的Handler类,如下所示:

public class MainMenuButtonHandler implements ActionListener {

    private JButton exitButton;

    public void setExitButton(JButton exitButton){
        this.exitButton = exitButton;
    }

    @Override public void actionPerformed(ActionEvent e) {
        //Do your work and invoke Click of exitButton
        this.exitButton.doClick();
    }
}

Also the MainMenu(): 也是MainMenu():

exitButton = new JButton("Exit");
exHandler = new ExitButtonHandler();
exitButton.addActionListener(exHandler);

mainMenuButton = new JButton("Main Menu");
mmHandler = new MainMenuButtonHandler();
mmHandler.setExitButton(exitButton) // newly added
mainMenuButton.addActionListener(mmHandler);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM