[英]Adding to a store from JTextfields from JPanel/JFrame
我開發了一個商店類,其中包含來自員工和個人類的信息。
在控制器類中,我向商店添加了一名員工:
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中的信息作為新雇員添加到我的商店類中?
我已經對此進行了研究,並且我不得不將其作為最后的手段。 一些使我再次前進的指示將不勝感激。
由於已經聲明了JTextField
,因此只需要正確使用它們即可創建新的Employee
。 更為困難的部分是將字符串正確轉換為Date
。 我還建議對帶有日期的文本字段使用JFormattedTextField
。
我使用substring()
和Integer.parseInt()
將字符串轉換為Date。 請注意,您必須從月份中減去1,因為它從0開始計數(所以0 =一月)。 另外,您必須從年份中減去1900 ,因為它是“ 年份減去1900 ”( 參考 )
這是一個示例, 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"));
}
}
}
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
}
}
}
並將此偵聽器添加到您的一個或每個文本字段中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.