我开发了一个商店类,它保存员工和个人班级的信息。
在我的控制器类中,我已经向商店添加了一名员工:
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的信息并将其作为新员工添加到我的商店类?
我已经研究过这个问题,并且我将这个放在这里作为最后的手段。一些让我再次参加的指示非常感谢。
答案 0 :(得分:1)
由于您已经声明了JTextField
,因此您只需正确使用它们即可创建新的Employee
。更难的部分是将字符串正确转换为Date
。我还建议对带有日期的文本字段使用JFormattedTextField
。
我使用substring()
和Integer.parseInt()
将字符串转换为日期。请注意,自从它开始计数为0(因此0 = 1月)以来,您必须从月中减去1。此外,你必须从一年中减去1900,因为它是“年减去1900 ”(Reference)
这是一个例子,Employee
- 类只打印出JTextArea
的参数(所以我们知道它是正确的)。
<强>输出:强>
<强>代码:强>
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)
KeyListener
来实现您想要的目标。您的代码如下所示:
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
}
}
}
并添加到您的一个或每个文本字段中,此侦听器。