从JPanel / JFrame中添加到JTextfields的商店

时间:2015-11-25 10:56:10

标签: java arrays eclipse swing arraylist

我开发了一个商店类,它保存员工和个人班级的信息。

在我的控制器类中,我已经向商店添加了一名员工:

Employee e1 = new Employee("Dave", 'M', new Date(01,1,80), "01", new Date(02,2,2002));

我想要做的是使用从JPanel / JFrame中的键盘输入的信息向商店添加更多员工。我开发了JTextfields和JButtons。

我已经定义了按钮和字段:

JButton enterButton;
JTextField name;
JTextField gender;
JTextField dob;
JTextField id;
JTextField startDate;

我构建了每一个,它们都出现在JPanel上。我知道我需要添加actionListener并完成如下操作:

myEventHandler h = new myEventHandler();

enterButton.addActionListener(h);
name.addActionListener(h);
gender.addActionListener(h);
dob.addActionListener(h);
id.addActionListener(h);
startDate.addActionListener(h);

然后我创建了一个类:

private class myEventHandler implements ActionListener {

public void actionPerformed(ActionEvent e) {

但是在这一点上我的代码崩溃了:

if(e.getSource()==enterButton) {

如何点击此enterButton获取输入到五个JTextfields的信息并将其作为新员工添加到我的商店类?

我已经研究过这个问题,并且我将这个放在这里作为最后的手段。一些让我再次参加的指示非常感谢。

2 个答案:

答案 0 :(得分:1)

由于您已经声明了JTextField,因此您只需正确使用它们即可创建新的Employee。更难的部分是将字符串正确转换为Date。我还建议对带有日期的文本字段使用JFormattedTextField

我使用substring()Integer.parseInt()将字符串转换为日期。请注意,自从它开始计数为0(因此0 = 1月)以来,您必须从月中减去1。此外,你必须从一年中减去1900,因为它是“年减去1900 ”(Reference

这是一个例子,Employee - 类只打印出JTextArea的参数(所以我们知道它是正确的)。

<强>输出:

enter image description here

<强>代码:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Example {

    JButton enterButton;
    JTextField name;
    JTextField gender;
    JFormattedTextField dob;
    JTextField id;
    JFormattedTextField startDate;
    JTextArea outputArea;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Example();
            }
        });

    }

    public Example() {

        JFrame frame = new JFrame();

        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
        MyEventHandler eventHandler = new MyEventHandler();

        enterButton = new JButton("Apply");
        enterButton.addActionListener(eventHandler);

        name = new JTextField(10);
        name.addActionListener(eventHandler);

        gender = new JTextField(10);
        gender.addActionListener(eventHandler);

        dob = new JFormattedTextField(df);
        dob.setColumns(10);
        dob.addActionListener(eventHandler);

        id = new JTextField(10);
        id.addActionListener(eventHandler);

        startDate = new JFormattedTextField(df);
        startDate.setColumns(10);
        startDate.addActionListener(eventHandler);

        JPanel inputPanel = new JPanel();
        inputPanel.add(name);
        inputPanel.add(gender);
        inputPanel.add(dob);
        inputPanel.add(id);
        inputPanel.add(startDate);
        inputPanel.add(enterButton);

        outputArea = new JTextArea();

        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(inputPanel, BorderLayout.NORTH);
        frame.getContentPane().add(new JScrollPane(outputArea));

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setSize(frame.getWidth(), 400);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private class MyEventHandler implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            new Employee(name.getText(), gender.getText(), getDateOf(dob), id.getText(), getDateOf(startDate));
        }
    }

    @SuppressWarnings("deprecation")
    private Date getDateOf(JFormattedTextField field) {
        int year = Integer.parseInt(field.getText().substring(6, 10)) - 1900;
        int month = Integer.parseInt(field.getText().substring(3, 5)) - 1;
        int date = Integer.parseInt(field.getText().substring(0, 2));
        return new Date(year, month, date);
    }

    public class Employee {

        public Employee(String name, String gender, Date dob, String id, Date startDate) {
            outputArea.append((name + "\n" + gender + "\n" + dob + "\n" + id + "\n" + startDate + "\n"));
        }

    }

}

答案 1 :(得分:0)

  1. 您使用的是错误的侦听器。您必须使用KeyListener来实现您想要的目标。
  2. 使用Java Beans命名约定:每个类的名称必须以大写字母开头。
  3. 您的代码如下所示:

    public class MyKeyListener implements KeyListener {
        @Override
        public void keyPressed(KeyEvent evt) {
    
        }
    
        @Override
        public void keyReleased(KeyEvent evt) {
    
        }
    
       @Override
       public void keyTyped(KeyEvent evt) {
           if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
              // do your stuff here
           }
       }
    }
    

    并添加到您的一个或每个文本字段中,此侦听器。