簡體   English   中英

從JPanel / JFrame從JTextfields添加到商店

[英]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"));
        }

    }

}
  1. 您使用了錯誤的監聽器。 您必須使用KeyListener來實現所需的功能。
  2. 使用Java Beans命名約定:每個類的名稱都必須以大寫字母開頭。

您的代碼將如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM