如何在actionPerformed()中调用actionPerformed()

时间:2012-11-22 05:39:09

标签: java swing dialog popup action

我的代码存在问题。

添加信息菜单中有三个菜单项(Customer,Merchandize和Employee)。单击它们(使用addActionListener)应显示各种文本字段/单选按钮/组合框(填写信息所需)和提交按钮。

提交所需信息并单击提交按钮后,应将信息打印到弹出窗口。

我被困在最后一点,它应该再次调用actionPerformed方法并将值打印到弹出窗口。有人可以帮忙吗?

已编辑##我已编辑了我的代码。我的问题从第一行开始。 216到行号。 225.当我点击Customer菜单项的“submit3”按钮时,会出现弹出窗口但不显示包含“txt1”内容的字符串的内容。如何将我的组件的值传递给actionPerformed,以便它可以在新的弹出窗口中打印它们?

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;

public class Retail extends JFrame implements ActionListener 
{
/**
 * 
 */
private static final long serialVersionUID = 1L;
JMenuBar menuBar = new JMenuBar();
JMenu addmenu = new JMenu("Add Information");
JMenu delmenu = new JMenu("Delete Information");
JMenu savemenu = new JMenu("Save Information");
JMenuItem emp = new JMenuItem("Employee");
JMenuItem merc = new JMenuItem("Merchandise");
JMenuItem cust = new JMenuItem("Customer");
Container contentPane = getContentPane();
JPanel p2 = new JPanel();

public Retail()
{
    super();
    contentPane.setLayout(new BorderLayout());
    JPanel p1 = new JPanel();
    p1.setBorder(new TitledBorder("Select Menu"));
    p1.setPreferredSize(new Dimension(500, 100));
    contentPane.add(p1,BorderLayout.NORTH);

    p2.setBorder(new TitledBorder("Entry Screen"));
    p2.setPreferredSize(new Dimension(500,500));    
    contentPane.add(p2,BorderLayout.CENTER);
    p2.setLayout(new BorderLayout());

    p1.add(menuBar);
    menuBar.add(addmenu);
    menuBar.add(delmenu);
    menuBar.add(savemenu);
    addmenu.add(emp);
    addmenu.addSeparator();
    addmenu.add(merc);
    addmenu.addSeparator();
    addmenu.add(cust);
    addmenu.addSeparator();


    emp.addActionListener(this);
    merc.addActionListener(this);
    cust.addActionListener(this);

}
public void actionPerformed(ActionEvent e)
{
    JButton submit1 = new JButton("Submit Employee Information"); 
    JButton submit2 = new JButton("Submit Merchandise Information");
    JButton submit3 = new JButton("Submit Customer Information");
    if(e.getSource() == emp)
    {   
        p2.removeAll();
        p2.updateUI();
        String[] states={"MA","AZ","CA"};
        JLabel lb1 = new JLabel("First Name:");
        JTextField txt1 = new JTextField(12);
        JLabel lb2 = new JLabel("Last Name:");
        JTextField txt2 = new JTextField(12);
        JLabel lb3 = new JLabel("Address:");
        JTextField txt3 = new JTextField(12);
        JLabel lb4 = new JLabel("City:");
        JTextField txt4 = new JTextField(12);
        JLabel lb5 = new JLabel("State");
        JComboBox cb1 = new JComboBox(states);
        JLabel lb6 = new JLabel("ZipCode");
        JTextField txt5 = new JTextField(12);
        JPanel p3 = new JPanel();
        p3.setLayout(new GridLayout(8,1));
        JPanel p4 = new JPanel();
        p4.setLayout(new GridLayout(1,2));
        JLabel lb7= new JLabel("Gender:");
        JRadioButton rb1 = new JRadioButton("Male");
        JRadioButton rb2 = new JRadioButton("Female");
        ButtonGroup bgroup = new ButtonGroup();
        bgroup.add(rb1);
        bgroup.add(rb2);
        JLabel lb8 = new JLabel("Submit Information:");
        JPanel p5 = new JPanel();
        p5.setLayout(new GridLayout(8,1));
        p3.add(lb1);
        p3.add(lb2);
        p3.add(lb3);
        p3.add(lb4);
        p3.add(lb5);
        p3.add(lb6);
        p3.add(lb7);
        p3.add(lb8);

        p5.add(txt1);
        p5.add(txt2);
        p5.add(txt3);
        p5.add(txt4);
        p4.add(rb1);
        p4.add(rb2);
        p5.add(cb1);
        p5.add(txt5);
        p5.add(p4);
        p5.add(submit1);

        p2.add(p3,BorderLayout.WEST);
        p2.add(p5,BorderLayout.EAST);

        submit1.addActionListener(this);
    }

    if(e.getSource() == merc)
    {
        p2.removeAll();
        p2.updateUI();
        String[] states={"MA","AZ","CA"};
        JLabel lb1 = new JLabel("First Name:");
        JTextField txt1 = new JTextField(12);
        JLabel lb2 = new JLabel("Last Name:");
        JTextField txt2 = new JTextField(12);
        JLabel lb3 = new JLabel("Address:");
        JTextField txt3 = new JTextField(12);
        JLabel lb4 = new JLabel("City:");
        JTextField txt4 = new JTextField(12);
        JLabel lb5 = new JLabel("State");
        JComboBox cb1 = new JComboBox(states);
        JLabel lb6 = new JLabel("ZipCode");
        JTextField txt5 = new JTextField(12);
        JPanel p3 = new JPanel();
        p3.setLayout(new GridLayout(8,1));
        JPanel p4 = new JPanel();
        p4.setLayout(new GridLayout(1,2));
        JLabel lb7= new JLabel("Gender");
        JRadioButton rb1 = new JRadioButton("Male");
        JRadioButton rb2 = new JRadioButton("Female");
        JLabel lb8 = new JLabel("Submit Information:");

        JPanel p5 = new JPanel();
        p5.setLayout(new GridLayout(8,1));
        p3.add(lb1);
        p3.add(lb2);
        p3.add(lb3);
        p3.add(lb4);
        p3.add(lb5);
        p3.add(lb6);
        p3.add(lb7);
        p3.add(lb8);
        p5.add(txt1);
        p5.add(txt2);
        p5.add(txt3);
        p5.add(txt4);
        p4.add(rb1);
        p4.add(rb2);
        p5.add(cb1);
        p5.add(txt5);
        p5.add(p4);
        p5.add(submit2);

        p2.add(p3,BorderLayout.WEST);
        p2.add(p5,BorderLayout.EAST);

        submit2.addActionListener(this);

    }
    if(e.getSource() == cust)
    {
        p2.removeAll();
        p2.updateUI();
        String[] states={"MA","AZ","CA"};
        JLabel lb1 = new JLabel("First Name:");
        JTextField txt1 = new JTextField(12);
        JLabel lb2 = new JLabel("Last Name:");
        JTextField txt2 = new JTextField(12);
        JLabel lb3 = new JLabel("Address:");
        JTextField txt3 = new JTextField(12);
        JLabel lb4 = new JLabel("City:");
        JTextField txt4 = new JTextField(12);
        JLabel lb5 = new JLabel("State");
        JComboBox cb1 = new JComboBox(states);
        JLabel lb6 = new JLabel("ZipCode");
        JTextField txt5 = new JTextField(12);
        JPanel p3 = new JPanel();
        p3.setLayout(new GridLayout(8,1));
        JPanel p4 = new JPanel();
        p4.setLayout(new GridLayout(1,2));
        JLabel lb7= new JLabel("Gender");
        JRadioButton rb1 = new JRadioButton("Male");
        JRadioButton rb2 = new JRadioButton("Female");
        JLabel lb8 = new JLabel("Submit Information:");
        JPanel p5 = new JPanel();
        p5.setLayout(new GridLayout(8,1));
        p3.add(lb1);
        p3.add(lb2);
        p3.add(lb3);
        p3.add(lb4);
        p3.add(lb5);
        p3.add(lb6);
        p3.add(lb7);
        p3.add(lb8);

        p5.add(txt1);
        p5.add(txt2);
        p5.add(txt3);
        p5.add(txt4);
        p4.add(rb1);
        p4.add(rb2);
        p5.add(cb1);
        p5.add(txt5);
        p5.add(p4);
        p5.add(submit3);

        p2.add(p3,BorderLayout.WEST);
        p2.add(p5,BorderLayout.EAST);
        final String s;
        s = txt1.getText();
        submit3.addActionListener(new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent args0) 
            {
                JOptionPane.showMessageDialog(rootPane,s);
            }
        });
    }
}
public static void main(String[] args)
{

    Retail frame = new Retail();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Retail Information");
    frame.pack();
    frame.setResizable(true);
    frame.setVisible(true);
}


}

3 个答案:

答案 0 :(得分:3)

最后一次测试:

if(e.getSource()==submit1)

永远不会成功,因为submit1是您刚刚在JButton开头构建的actionPerformed,因此无法成为当前事件的来源。

我建议您使用CardLayout作为p2,而不是构建像这样的新布局组件,只需转到动作处理程序中的相应卡片即可。这样,您可以为所有按钮注册一次监听器,您将收到正确的所有事件通知。

此外,您应该为每个UI组件注册单独的actionPerformed,而不是让一个巨型ActionListeners测试源。这使逻辑(和代码)更加清晰。

修改

例如,而不是:

emp.addActionListener(this);
merc.addActionListener(this);
cust.addActionListener(this);

你可以这样做:

emp.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // logic for click on emp button
    }
});
merc.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // logic for click on merc button
    }
});
// etc.

您的主要课程不需要implements ActionListener

然后,如果对CardLayout使用p2,则可以在程序开始时将动作侦听器附加到每个界面元素。然后,响应任何特定操作的逻辑变得更加简单 - 仅更新适当的UI元素并切换要在p2中显示的“卡”。有关最后一部分的详细信息,请参阅the docs for CardLayout

答案 1 :(得分:2)

您可以调用相应下一个菜单项

的.doClick()

OR

定义separete方法(例如doEmpAction()和doCustAction()),这些方法从相应的actionPerformed()方法调用并从另一个方法中调用它们。所以doCustAction只需调用doEmpAction。

答案 2 :(得分:1)

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;

public class Retail extends JFrame implements ActionListener {

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    JMenuBar menuBar = new JMenuBar();
    JMenu addmenu = new JMenu("Add Information");
    JMenu delmenu = new JMenu("Delete Information");
    JMenu savemenu = new JMenu("Save Information");
    JMenuItem emp = new JMenuItem("Employee");
    JMenuItem merc = new JMenuItem("Merchandise");
    JMenuItem cust = new JMenuItem("Customer");
    Container contentPane = getContentPane();
    JPanel p2 = new JPanel();

    public Retail() {
        super();
        contentPane.setLayout(new BorderLayout());
        JPanel p1 = new JPanel();
        p1.setBorder(new TitledBorder("Select Menu"));
        p1.setPreferredSize(new Dimension(500, 100));
        contentPane.add(p1, BorderLayout.NORTH);

        p2.setBorder(new TitledBorder("Entry Screen"));
        p2.setPreferredSize(new Dimension(500, 500));
        contentPane.add(p2, BorderLayout.CENTER);
        p2.setLayout(new BorderLayout());

        p1.add(menuBar);
        menuBar.add(addmenu);
        menuBar.add(delmenu);
        menuBar.add(savemenu);
        addmenu.add(emp);
        addmenu.addSeparator();
        addmenu.add(merc);
        addmenu.addSeparator();
        addmenu.add(cust);
        addmenu.addSeparator();


        emp.addActionListener(this);
        merc.addActionListener(this);
        cust.addActionListener(this);

    }

    public void actionPerformed(ActionEvent e) {
        JButton submit1 = new JButton("Submit Employee Information");
        JButton submit2 = new JButton("Submit Merchandise Information");
        JButton submit3 = new JButton("Submit Customer Information");
        if (e.getSource() == emp) {
            p2.removeAll();
            p2.updateUI();
            String[] states = {"MA", "AZ", "CA"};
            JLabel lb1 = new JLabel("First Name:");
            JTextField txt1 = new JTextField(12);
            JLabel lb2 = new JLabel("Last Name:");
            JTextField txt2 = new JTextField(12);
            JLabel lb3 = new JLabel("Address:");
            JTextField txt3 = new JTextField(12);
            JLabel lb4 = new JLabel("City:");
            JTextField txt4 = new JTextField(12);
            JLabel lb5 = new JLabel("State");
            JComboBox cb1 = new JComboBox(states);
            JLabel lb6 = new JLabel("ZipCode");
            JTextField txt5 = new JTextField(12);
            JPanel p3 = new JPanel();
            p3.setLayout(new GridLayout(8, 1));
            JPanel p4 = new JPanel();
            p4.setLayout(new GridLayout(1, 2));
            JLabel lb7 = new JLabel("Gender:");
            JRadioButton rb1 = new JRadioButton("Male");
            JRadioButton rb2 = new JRadioButton("Female");
            ButtonGroup bgroup = new ButtonGroup();
            bgroup.add(rb1);
            bgroup.add(rb2);
            JLabel lb8 = new JLabel("Submit Information:");
            JPanel p5 = new JPanel();
            p5.setLayout(new GridLayout(8, 1));
            p3.add(lb1);
            p3.add(lb2);
            p3.add(lb3);
            p3.add(lb4);
            p3.add(lb5);
            p3.add(lb6);
            p3.add(lb7);
            p3.add(lb8);

            p5.add(txt1);
            p5.add(txt2);
            p5.add(txt3);
            p5.add(txt4);
            p4.add(rb1);
            p4.add(rb2);
            p5.add(cb1);
            p5.add(txt5);
            p5.add(p4);
            p5.add(submit1);

            p2.add(p3, BorderLayout.WEST);
            p2.add(p5, BorderLayout.EAST);


            submit1.addActionListener(this);//instead of this line use next line to add actionlistener.

        }
        if (e.getSource() == merc) {
            p2.removeAll();
            p2.updateUI();
            String[] states = {"MA", "AZ", "CA"};
            JLabel lb1 = new JLabel("First Name:");
            JTextField txt1 = new JTextField(12);
            JLabel lb2 = new JLabel("Last Name:");
            JTextField txt2 = new JTextField(12);
            JLabel lb3 = new JLabel("Address:");
            JTextField txt3 = new JTextField(12);
            JLabel lb4 = new JLabel("City:");
            JTextField txt4 = new JTextField(12);
            JLabel lb5 = new JLabel("State");
            JComboBox cb1 = new JComboBox(states);
            JLabel lb6 = new JLabel("ZipCode");
            JTextField txt5 = new JTextField(12);
            JPanel p3 = new JPanel();
            p3.setLayout(new GridLayout(8, 1));
            JPanel p4 = new JPanel();
            p4.setLayout(new GridLayout(1, 2));
            JLabel lb7 = new JLabel("Gender");
            JRadioButton rb1 = new JRadioButton("Male");
            JRadioButton rb2 = new JRadioButton("Female");
            JLabel lb8 = new JLabel("Submit Information:");

            JPanel p5 = new JPanel();
            p5.setLayout(new GridLayout(8, 1));
            p3.add(lb1);
            p3.add(lb2);
            p3.add(lb3);
            p3.add(lb4);
            p3.add(lb5);
            p3.add(lb6);
            p3.add(lb7);
            p3.add(lb8);

            p5.add(txt1);
            p5.add(txt2);
            p5.add(txt3);
            p5.add(txt4);
            p4.add(rb1);
            p4.add(rb2);
            p5.add(cb1);
            p5.add(txt5);
            p5.add(p4);
            p5.add(submit2);

            p2.add(p3, BorderLayout.WEST);
            p2.add(p5, BorderLayout.EAST);

            submit2.addActionListener(this);//instead of this line use next line to add actionlistener.

        }
        if (e.getSource() == cust) {
            p2.removeAll();
            p2.updateUI();
            String[] states = {"MA", "AZ", "CA"};
            JLabel lb1 = new JLabel("First Name:");
            final JTextField txt1 = new JTextField(12);
            JLabel lb2 = new JLabel("Last Name:");
            JTextField txt2 = new JTextField(12);
            JLabel lb3 = new JLabel("Address:");
            JTextField txt3 = new JTextField(12);
            JLabel lb4 = new JLabel("City:");
            JTextField txt4 = new JTextField(12);
            JLabel lb5 = new JLabel("State");
            JComboBox cb1 = new JComboBox(states);
            JLabel lb6 = new JLabel("ZipCode");
            JTextField txt5 = new JTextField(12);
            JPanel p3 = new JPanel();
            p3.setLayout(new GridLayout(8, 1));
            JPanel p4 = new JPanel();
            p4.setLayout(new GridLayout(1, 2));
            JLabel lb7 = new JLabel("Gender");
            JRadioButton rb1 = new JRadioButton("Male");
            JRadioButton rb2 = new JRadioButton("Female");
            JLabel lb8 = new JLabel("Submit Information:");
            JPanel p5 = new JPanel();
            p5.setLayout(new GridLayout(8, 1));
            p3.add(lb1);
            p3.add(lb2);
            p3.add(lb3);
            p3.add(lb4);
            p3.add(lb5);
            p3.add(lb6);
            p3.add(lb7);
            p3.add(lb8);

            p5.add(txt1);
            p5.add(txt2);
            p5.add(txt3);
            p5.add(txt4);
            p4.add(rb1);
            p4.add(rb2);
            p5.add(cb1);
            p5.add(txt5);
            p5.add(p4);
            p5.add(submit3);

            p2.add(p3, BorderLayout.WEST);
            p2.add(p5, BorderLayout.EAST);

            //submit3.addActionListener(this);//instead of this line use next line to add actionlistener.Commment this line.
            submit3.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("------>" + txt1.getText());
                    //JOptionPane.showMessageDialog(rootPane, txt1.getText());
                    new MyDialog(txt1.getText());
                }
            });
            // submit3.addActionListener(new SubmitActionListener(txt1.getText()));//out action listener

        }
        if (e.getSource() == submit1) {
            JOptionPane.showMessageDialog(rootPane, " button is clicked");

        }

    }

    class MyDialog extends JDialog {

        public MyDialog(String textbox1) {
            JLabel label = new JLabel(textbox1);
            add(label);
            setModalityType(ModalityType.APPLICATION_MODAL);

            setTitle("Info");
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            setLocationRelativeTo(null);
            setSize(300, 200);
            setVisible(true);

        }
    }

    public static void main(String[] args) {

        Retail frame = new Retail();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Retail Information");
        frame.pack();
        frame.setResizable(true);
        frame.setVisible(true);
    }
}

这适用于submit3按钮。根据需要修改其他人。