2

我的代码有问题。

添加信息菜单中有三个菜单项(客户、商品和员工)。单击它们(使用addActionListener)应显示各种文本字段/单选按钮/组合框(需要填写信息)和提交按钮。

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

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

EDITED##我已经编辑了我的代码。我的问题从第 1 行开始。216到线号。225. 当我点击Customer menuitem的按钮“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);
}


}
4

3 回答 3

3

最后一次测试:

if(e.getSource()==submit1)

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

我建议您不要像这样构建新的布局组件,而是使用CardLayoutforp2并在您的操作处理程序中翻转到适当的卡片。这样您就可以为所有按钮注册一次侦听器,并且您将正确收到所有事件的通知。

此外,您应该为每个 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你的主要课程。

然后,如果您使用CardLayoutfor p2,您可以在程序开始时将动作侦听器附加到每个界面元素。然后,响应任何特定操作的逻辑变得更加简单——只需更新适当的 UI 元素并切换要显示的“卡片” p2。有关最后一部分的更多信息,请参阅文档。CardLayout

于 2012-11-22T05:57:23.583 回答
2

您可以调用适当的下一个菜单项的 .doClick()

或者

定义从适当的 actionPerformed() 方法调用的单独方法(例如 doEmpAction() 和 doCustAction() ),并从另一个调用它们。所以 doCustAction 只需调用 doEmpAction。

于 2012-11-22T05:57:12.577 回答
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 按钮。根据需要修改其他按钮。

于 2012-11-22T06:06:35.233 回答