2

以下のコードに問題があります。

[情報の追加]メニューには、3つのメニュー項目(顧客、商品化、および従業員)があります。それらをクリックすると(を使用してaddActionListener)、さまざまなテキストフィールド/ラジオボタン/コンボボックス(情報の入力に必要)と送信ボタンが表示されます。

必要な情報を送信して送信ボタンをクリックすると、ポップアップウィンドウに情報が出力されます。

actionPerformedメソッドを再度呼び出して値をポップアップウィンドウに出力する必要がある最後のポイントでスタックします。誰か助けてもらえますか?

EDITED##コードを編集しました。私の問題は行番号から始まります。行番号に216。225.カスタマーメニュー項目の「送信3」ボタンをクリックすると、ポップアップが表示されますが、「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はありません。JButtonactionPerformed

CardLayoutこのような新しいレイアウトコンポーネントを作成する代わりに、 forを使用p2して、アクションハンドラーの適切なカードに切り替えることをお勧めします。そうすれば、すべてのボタンのリスナーを一度登録すると、すべてのイベントが適切に通知されます。

actionPerformedまた、ソースをテストする1つの巨人を用意する代わりに、ActionListenersUIコンポーネントごとに個別に登録する必要があります。これにより、ロジック(およびコード)がよりクリーンに保たれます。

編集

たとえば、これの代わりに:

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 に答える