简体   繁体   English

Java:同一个类中有多个ActionListeners?

[英]Java: multiple ActionListeners in the same class?

I am currently working on a simulated stock market for my Software Engineering class. 我目前正在为我的软件工程课程模拟股票市场。 I am using the actionlistener to open up new windows for each one of my current menu items. 我正在使用actionlistener为我当前的每个菜单项打开新窗口。 However, it seems that I can only use one ActionListener per class so I can only have one set window for all of my menu options. 但是,似乎每个类只能使用一个ActionListener,因此我只能为所有菜单选项设置一个窗口。 Is there any other way to implement multiple action listeners? 有没有其他方法来实现多个动作侦听器? Is there another way to do this. 还有另一种方法可以做到这一点。

Here is my code: 这是我的代码:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.BevelBorder;
    import javax.swing.table.DefaultTableModel;

    public class GUIroughdraft implements Runnable, ActionListener
    {
          private JFrame frame;
          private JMenuBar menuBar;
          private JMenu FileMenu;
          private JMenu ActionMenu;
          private JMenu HelpMenu;
          private JMenuItem SaveMenuItem;
          private JMenuItem LoadMenuItem;
          private JMenuItem ExitMenuItem;
          private JMenuItem BuyMenuItem;
          private JMenuItem SellMenuItem;
          private JMenuItem AboutMenuItem;
          private JMenuItem UserManualMenuItem;


          public static void main(String[] args)
          {
            // needed on mac os x
            System.setProperty("apple.laf.useScreenMenuBar", "true");

            // the proper way to show a jframe (invokeLater)
            SwingUtilities.invokeLater(new GUIroughdraft());
          }


        private JFrame frmBgszStockSimulator;
        /**
         * @wbp.nonvisual location=53,14
         */
        //private final JLabel lblBgszStockSimulator =                 DefaultComponentFactory.getInstance().createTitle("BGSZ Stock Simulator");
        private JTextField searchBar;
        private JTable table;

        /**
         * Launch the application. Testing Comment
         */

        /*
        public static void main(String[] args) 
        {
            EventQueue.invokeLater(new Runnable() 
            {
                public void run() 
                {
                    try 
                    {
                        GUIroughdraft window = new GUIroughdraft();
                        window.frmBgszStockSimulator.setVisible(true);
                    } catch (Exception e) 
                    {
                e.printStackTrace();
                    }
                }
            });
        }
        */



        /**
         * Create the application.
         */
        /*
        public GUIroughdraft() 
        {
            run();
        }
        */

/**
 * Initialize the contents of the frame.
 */
public void run() 
{
    frmBgszStockSimulator = new JFrame("BGSZ Stock Simulator");
    frmBgszStockSimulator.getContentPane().setBackground(Color.GRAY);
    frmBgszStockSimulator.setTitle("BGSZ Stock Simulator");
    frmBgszStockSimulator.setBounds(100, 100, 775, 510);
    frmBgszStockSimulator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmBgszStockSimulator.setVisible(true); 

    //Builds menu bar
    menuBar = new JMenuBar();

    //Builds the File menu
    FileMenu = new JMenu("File");
    SaveMenuItem = new JMenuItem("Save");
    LoadMenuItem = new JMenuItem("Load");
    ExitMenuItem = new JMenuItem("Exit");
    SaveMenuItem.addActionListener(this);
    LoadMenuItem.addActionListener(this);
    ExitMenuItem.addActionListener(this);
    FileMenu.add(SaveMenuItem);
    FileMenu.add(LoadMenuItem);
    FileMenu.add(ExitMenuItem);

    //Builds the Actions menu
    ActionMenu = new JMenu("Actions");
    BuyMenuItem = new JMenuItem("Buy");
    SellMenuItem = new JMenuItem("Sell");
    ActionMenu.add(BuyMenuItem);
    ActionMenu.add(SellMenuItem);

    //Builds the Help menu
    HelpMenu = new JMenu("Help");
    AboutMenuItem = new JMenuItem("About");
    UserManualMenuItem = new JMenuItem("User Manual");
    HelpMenu.add(AboutMenuItem);
    HelpMenu.add(UserManualMenuItem);

    menuBar.add(FileMenu);
    menuBar.add(ActionMenu);
    menuBar.add(HelpMenu);

    frmBgszStockSimulator.setJMenuBar(menuBar);


    JScrollBar scrollBar = new JScrollBar();
    scrollBar.setBackground(Color.LIGHT_GRAY);
    scrollBar.setBounds(323, 47, 21, 317);
    frmBgszStockSimulator.getContentPane().add(scrollBar);

    JTextArea displayBox = new JTextArea();
    displayBox.setEditable(false);
    displayBox.setLineWrap(true);
    displayBox.setWrapStyleWord(true);
    displayBox.setText("This will be a text field that displays all your actions and information about stocks, purchases, sales, errors, etc.");

    //when the user clicks the search button that is not there anymore 
    //create a new instance of the getStockData class
    //get the data from the input line something like  String userInput = searchBar.getText()
    //pass that to the getData(userInput);
    //set the displayBox.setText(the return from getData());

    displayBox.setBounds(12, 47, 312, 317);
    frmBgszStockSimulator.getContentPane().add(displayBox);

    searchBar = new JTextField();
    searchBar.setText("Enter your text here");
    searchBar.setBounds(12, 377, 733, 22);
    frmBgszStockSimulator.getContentPane().add(searchBar);
    searchBar.setColumns(10);

    JProgressBar progressBar = new JProgressBar();
    progressBar.setStringPainted(true);
    progressBar.setValue(75);
    progressBar.setBounds(78, 412, 586, 14);
    frmBgszStockSimulator.getContentPane().add(progressBar);

    table = new JTable();
    table.setModel(new DefaultTableModel(
            new Object[][] {
                {"Stock Name", "Stock Value", "Amount Owned", "Total Value"},
                {" BAC", "$13.48", "4", "$53.92"},
                {" RIG", "$8.89", "0", "$0.00"},
                {" SUNE", "$0.59", "12", "$7.08"},
                {" FCX", "$10.29", "2", "$20.58"},
                {" PBR", "$5.86", "0", "$0.00"},
                {" GE", "$31.83", "0", "$0.00"},
                {" VALE", "$4.24", "24", "$101.76"},
                {" VRX", "$27.07", "0", "$0.00"},
                {" PFE", "$30.07", "0", "$0.00"},
                {" CRC", "$1.05", "8", "$8.40"},
                {" GGB", "$1.82", "0", "$0.00"},
                {" CHK", "$4.01", "6", "$24.06"},
                {" T", "$39.37", "0", "$0.00"},
                {" F", "$13.35", "5", "$66.75"},
                {" WLL", "$7.66", "0", "$0.00"},
            },
            new String[] {
                "New column", "New column", "New column", "New column"
            }
        ));
    table.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
    table.setBounds(350, 51, 395, 313);
    frmBgszStockSimulator.getContentPane().add(table);

    JTextArea txtrValue = new JTextArea();
    txtrValue.setText("Displays Cash Value");
    txtrValue.setLineWrap(true);
    txtrValue.setEditable(false);
    txtrValue.setBounds(99, 12, 172, 22);
    frmBgszStockSimulator.getContentPane().add(txtrValue);

    JTextArea txtrCurrentPortfolioValue = new JTextArea();
    txtrCurrentPortfolioValue.setText("Display Portfolio Value");
    txtrCurrentPortfolioValue.setLineWrap(true);
    txtrCurrentPortfolioValue.setEditable(false);
    txtrCurrentPortfolioValue.setBounds(376, 12, 206, 22);
    frmBgszStockSimulator.getContentPane().add(txtrCurrentPortfolioValue);

    JLabel lblCashValue = new JLabel("Cash Value:");
    lblCashValue.setBounds(24, 15, 111, 16);
    frmBgszStockSimulator.getContentPane().add(lblCashValue);

    JLabel lblPortfolioValue = new JLabel("Portfolio Value:");
    lblPortfolioValue.setBounds(283, 15, 123, 16);
    frmBgszStockSimulator.getContentPane().add(lblPortfolioValue);

}

public void actionPerformed(ActionEvent ev)
  {
    SaveDialog dialog = new SaveDialog();
    dialog.setModal(true);
    dialog.setVisible(true);
  }


private class SaveDialog extends JDialog implements ActionListener
  {
    private JButton okButton = new JButton("Your File has been saved!");

    private SaveDialog()
    {
      super(frame, "Save", true);
      JPanel panel = new JPanel(new FlowLayout());
      panel.add(okButton);
      getContentPane().add(panel);
      okButton.addActionListener(this);
      setPreferredSize(new Dimension(250, 75));
      pack();
      setLocationRelativeTo(frame);
    }

    public void actionPerformed(ActionEvent ev)
    {
      setVisible(false);
    }
  }

public void actionPerformed2(ActionEvent ev)
  {
    LoadDialog dialog = new LoadDialog();
    dialog.setModal(true);
    dialog.setVisible(true);
  }

private class LoadDialog extends JDialog implements ActionListener
  {
    private JButton LoadButton = new JButton("Your File has successfully loaded!");

    private LoadDialog()
    {
      super(frame, "Load", true);
      JPanel panel = new JPanel(new FlowLayout());
      panel.add(LoadButton);
      getContentPane().add(panel);
      LoadButton.addActionListener(this);
      setPreferredSize(new Dimension(250, 75));
      pack();
      setLocationRelativeTo(frame);
    }

    public void actionPerformed(ActionEvent ev)
    {
      setVisible(false);
    }
  }


}

You don't need to implement the ActionListener interface, instead, create anonymous classes that provide the different functionality you need for any JButton or other object. 您不需要实现ActionListener接口,而是创建匿名类,以提供任何JButton或其他对象所需的不同功能。 An example would look like this: 一个例子看起来像这样:

myButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // do whatever you want in here
            }

        });

In GUIroughdraft class, place this code inside actionPerformed method 在GUIroughdraft类中,将此代码放在actionPerformed方法中

public void actionPerformed(ActionEvent ev)
  {
    if(ev.getActionCommand().equalsIgnoreCase("Save"){
       SaveDialog dialog = new SaveDialog();
       dialog.setModal(true);
       dialog.setVisible(true);
     }
    else if(ev.getActionCommand().equalsIgnoreCase("Load")){
         LoadDialog dialog = new LoadDialog();
         dialog.setModal(true);
         dialog.setVisible(true);
     }
    else if(ev.getActionCommand().equalsIgnoreCase("Exit")){
        // Do whatever you like
     }

  }

And also as per coding standards variable names should start with lower case letter. 而且根据编码标准,变量名称应以小写字母开头。

private JMenuItem SaveMenuItem; private JMenuItem SaveMenuItem; ---wrong - -错误

private JMenuItem saveMenuItem; private JMenuItem saveMenuItem; ---correct - -正确

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

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